// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Downloads and merges line coverage data files for package:flutter. import 'dart:async'; import 'dart:io'; import 'package:args/args.dart'; import 'package:path/path.dart' as path; const String kBaseLcov = 'packages/flutter/coverage/lcov.base.info'; const String kTargetLcov = 'packages/flutter/coverage/lcov.info'; const String kSourceLcov = 'packages/flutter/coverage/lcov.source.info'; Future main(List args) async { if (path.basename(Directory.current.path) == 'tools') Directory.current = Directory.current.parent.parent; ProcessResult result = Process.runSync('which', ['lcov']); if (result.exitCode != 0) { print('Cannot find lcov. Consider running "apt-get install lcov".\n'); return 1; } if (!FileSystemEntity.isFileSync(kBaseLcov)) { print( 'Cannot find "$kBaseLcov". Consider downloading it from from cloud storage.\n' 'https://storage.googleapis.com/flutter_infra/flutter/coverage/lcov.info\n' ); return 1; } ArgParser argParser = new ArgParser(); argParser.addFlag('merge', negatable: false); ArgResults results = argParser.parse(args); if (FileSystemEntity.isFileSync(kTargetLcov)) { if (results['merge']) { new File(kTargetLcov).renameSync(kSourceLcov); } else { print('"$kTargetLcov" already exists. Did you want to --merge?\n'); return 1; } } if (results['merge']) { if (!FileSystemEntity.isFileSync(kSourceLcov)) { print('Cannot merge because "$kSourceLcov" does not exist.\n'); return 1; } ProcessResult result = Process.runSync('lcov', [ '--add-tracefile', kBaseLcov, '--add-tracefile', kSourceLcov, '--output-file', kTargetLcov, ]); return result.exitCode; } print('No operation requested. Did you want to --merge?\n'); return 0; }