From 9e51a602993f33dd156230985391bbbbbaca8a74 Mon Sep 17 00:00:00 2001 From: Michael Goderbauer Date: Wed, 10 Jan 2018 13:37:36 -0800 Subject: [PATCH] Reland #13918 (#14023) * Revert "Reverting package changes until I can figure out how to fix Windows. (#14007)" This reverts commit 6fda8ee821dd2e63e7949e57b10efde84bb0a3cc. * Make prepare_package run on Windows --- dev/automated_tests/pubspec.yaml | 4 +- dev/benchmarks/complex_layout/pubspec.yaml | 4 +- dev/benchmarks/microbenchmarks/pubspec.yaml | 4 +- dev/bots/prepare_package.dart | 340 +++++++++++------- dev/bots/pubspec.yaml | 8 +- dev/bots/test/prepare_package_test.dart | 191 ++++------ dev/devicelab/pubspec.yaml | 4 +- dev/integration_tests/channels/pubspec.yaml | 4 +- .../external_ui/pubspec.yaml | 4 +- dev/integration_tests/flavors/pubspec.yaml | 4 +- .../platform_interaction/pubspec.yaml | 4 +- dev/integration_tests/ui/pubspec.yaml | 4 +- dev/manual_tests/pubspec.yaml | 4 +- dev/tools/vitool/pubspec.yaml | 4 +- examples/catalog/pubspec.yaml | 4 +- examples/flutter_gallery/pubspec.yaml | 4 +- examples/flutter_view/pubspec.yaml | 4 +- examples/hello_world/pubspec.yaml | 4 +- examples/layers/pubspec.yaml | 4 +- examples/platform_channel/pubspec.yaml | 4 +- examples/platform_channel_swift/pubspec.yaml | 4 +- examples/platform_view/pubspec.yaml | 4 +- examples/stocks/pubspec.yaml | 4 +- packages/flutter/pubspec.yaml | 4 +- packages/flutter_driver/pubspec.yaml | 4 +- packages/flutter_localizations/pubspec.yaml | 4 +- packages/flutter_test/pubspec.yaml | 4 +- packages/flutter_tools/pubspec.yaml | 4 +- 28 files changed, 335 insertions(+), 304 deletions(-) diff --git a/dev/automated_tests/pubspec.yaml b/dev/automated_tests/pubspec.yaml index 845daea771..5fbb2c3329 100644 --- a/dev/automated_tests/pubspec.yaml +++ b/dev/automated_tests/pubspec.yaml @@ -7,7 +7,7 @@ dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -16,7 +16,7 @@ dependencies: crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/dev/benchmarks/complex_layout/pubspec.yaml b/dev/benchmarks/complex_layout/pubspec.yaml index ed170d5f9b..136922a21f 100644 --- a/dev/benchmarks/complex_layout/pubspec.yaml +++ b/dev/benchmarks/complex_layout/pubspec.yaml @@ -19,7 +19,7 @@ dev_dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -29,7 +29,7 @@ dev_dependencies: csslib: 0.14.1 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/dev/benchmarks/microbenchmarks/pubspec.yaml b/dev/benchmarks/microbenchmarks/pubspec.yaml index bed82f793d..dd00ddec9f 100644 --- a/dev/benchmarks/microbenchmarks/pubspec.yaml +++ b/dev/benchmarks/microbenchmarks/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -21,7 +21,7 @@ dependencies: csslib: 0.14.1 # TRANSITIVE DEPENDENCY dart_style: 1.0.9 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/dev/bots/prepare_package.dart b/dev/bots/prepare_package.dart index b9621cc892..023d00d5e7 100644 --- a/dev/bots/prepare_package.dart +++ b/dev/bots/prepare_package.dart @@ -2,28 +2,21 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:async'; import 'dart:convert'; import 'dart:io'; +import 'dart:typed_data'; import 'package:args/args.dart'; +import 'package:http/http.dart' as http; import 'package:path/path.dart' as path; +import 'package:process/process.dart'; const String CHROMIUM_REPO = 'https://chromium.googlesource.com/external/github.com/flutter/flutter'; const String GITHUB_REPO = 'https://github.com/flutter/flutter.git'; - -/// The type of the process runner function. This allows us to -/// inject a fake process runner into the ArchiveCreator for tests. -typedef ProcessResult ProcessRunner( - String executable, - List arguments, { - String workingDirectory, - Map environment, - bool includeParentEnvironment, - bool runInShell, - Encoding stdoutEncoding, - Encoding stderrEncoding, -}); +const String MINGIT_FOR_WINDOWS_URL = 'https://storage.googleapis.com/flutter_infra/mingit/' + '603511c649b00bbef0a6122a827ac419b656bc19/mingit.zip'; /// Error class for when a process fails to run, so we can catch /// it and provide something more readable than a stack trace. @@ -39,64 +32,95 @@ class ProcessFailedException extends Error { /// Creates a pre-populated Flutter archive from a git repo. class ArchiveCreator { - /// [tempDir] is the directory to use for creating the archive. Will place - /// several GiB of data there, so it should have available space. - /// [outputFile] is the name of the output archive. It should end in either - /// ".tar.xz" or ".zip". - /// The runner argument is used to inject a mock of [Process.runSync] for + /// [_tempDir] is the directory to use for creating the archive. The script + /// will place several GiB of data there, so it should have available space. + /// + /// The processManager argument is used to inject a mock of [ProcessManager] for /// testing purposes. - ArchiveCreator(this.tempDir, this.outputFile, {ProcessRunner runner}) - : assert(outputFile.path.toLowerCase().endsWith('.zip') || - outputFile.path.toLowerCase().endsWith('.tar.xz')), - flutterRoot = new Directory(path.join(tempDir.path, 'flutter')), - _runner = runner ?? Process.runSync { - flutter = path.join( - flutterRoot.absolute.path, + /// + /// If subprocessOutput is true, then output from processes invoked during + /// archive creation is echoed to stderr and stdout. + ArchiveCreator(this._tempDir, {ProcessManager processManager, bool subprocessOutput: true}) + : _flutterRoot = new Directory(path.join(_tempDir.path, 'flutter')), + _processManager = processManager ?? const LocalProcessManager(), + _subprocessOutput = subprocessOutput { + _flutter = path.join( + _flutterRoot.absolute.path, 'bin', - Platform.isWindows ? 'flutter.bat' : 'flutter', + 'flutter', ); - environment = new Map.from(Platform.environment); - environment['PUB_CACHE'] = path.join(flutterRoot.absolute.path, '.pub-cache'); + _environment = new Map.from(Platform.environment); + _environment['PUB_CACHE'] = path.join(_flutterRoot.absolute.path, '.pub-cache'); } - final Directory flutterRoot; - final Directory tempDir; - final File outputFile; - final ProcessRunner _runner; - String flutter; - final String git = Platform.isWindows ? 'git.bat' : 'git'; - final String zip = Platform.isWindows ? '7za.exe' : 'zip'; - final String tar = Platform.isWindows ? 'tar.exe' : 'tar'; - Map environment; + final Directory _flutterRoot; + final Directory _tempDir; + final bool _subprocessOutput; + final ProcessManager _processManager; + String _flutter; + final Uri _minGitUri = Uri.parse(MINGIT_FOR_WINDOWS_URL); + Map _environment; + + /// Returns a default archive name when given a Git revision. + /// Used when an output filename is not given. + static String defaultArchiveName(String revision) { + final String os = Platform.operatingSystem.toLowerCase(); + final String id = revision.length > 10 ? revision.substring(0, 10) : revision; + final String suffix = Platform.isWindows ? 'zip' : 'tar.xz'; + return 'flutter_${os}_$id.$suffix'; + } + + /// Performs all of the steps needed to create an archive. + Future createArchive(String revision, File outputFile) async { + await _checkoutFlutter(revision); + await _installMinGitIfNeeded(); + await _populateCaches(); + await _archiveFiles(outputFile); + return outputFile; + } /// Clone the Flutter repo and make sure that the git environment is sane /// for when the user will unpack it. - void checkoutFlutter(String revision) { + Future _checkoutFlutter(String revision) async { // We want the user to start out the in the 'master' branch instead of a // detached head. To do that, we need to make sure master points at the // desired revision. - runGit(['clone', '-b', 'master', CHROMIUM_REPO], workingDirectory: tempDir); - runGit(['reset', '--hard', revision]); + await _runGit(['clone', '-b', 'master', CHROMIUM_REPO], workingDirectory: _tempDir); + await _runGit(['reset', '--hard', revision]); // Make the origin point to github instead of the chromium mirror. - runGit(['remote', 'remove', 'origin']); - runGit(['remote', 'add', 'origin', GITHUB_REPO]); + await _runGit(['remote', 'remove', 'origin']); + await _runGit(['remote', 'add', 'origin', GITHUB_REPO]); + } + + /// Retrieve the MinGit executable from storage and unpack it. + Future _installMinGitIfNeeded() async { + if (!Platform.isWindows) { + return; + } + final Uint8List data = await http.readBytes(_minGitUri); + final File gitFile = new File(path.join(_tempDir.path, 'mingit.zip')); + await gitFile.writeAsBytes(data, flush: true); + + final Directory minGitPath = new Directory(path.join(_flutterRoot.path, 'bin', 'mingit')); + await minGitPath.create(recursive: true); + await _unzipArchive(gitFile, currentDirectory: minGitPath); } /// Prepare the archive repo so that it has all of the caches warmed up and - /// is configured for the user to being working. - void prepareArchive() { - runFlutter(['doctor']); - runFlutter(['update-packages']); - runFlutter(['precache']); - runFlutter(['ide-config']); + /// is configured for the user to begin working. + Future _populateCaches() async { + await _runFlutter(['doctor']); + await _runFlutter(['update-packages']); + await _runFlutter(['precache']); + await _runFlutter(['ide-config']); - // Create each of the templates, since they will call pub get on + // Create each of the templates, since they will call 'pub get' on // themselves when created, and this will warm the cache with their // dependencies too. for (String template in ['app', 'package', 'plugin']) { - final String createName = path.join(tempDir.path, 'create_$template'); - runFlutter( + final String createName = path.join(_tempDir.path, 'create_$template'); + await _runFlutter( ['create', '--template=$template', createName], ); } @@ -104,88 +128,128 @@ class ArchiveCreator { // Yes, we could just skip all .packages files when constructing // the archive, but some are checked in, and we don't want to skip // those. - runGit(['clean', '-f', '-X', '**/.packages']); + await _runGit(['clean', '-f', '-X', '**/.packages']); } - /// Create the archive into the given output file. - void createArchive() { + /// Write the archive to the given output file. + Future _archiveFiles(File outputFile) async { if (outputFile.path.toLowerCase().endsWith('.zip')) { - createZipArchive(outputFile, flutterRoot); + await _createZipArchive(outputFile, _flutterRoot); } else if (outputFile.path.toLowerCase().endsWith('.tar.xz')) { - createTarArchive(outputFile, flutterRoot); + await _createTarArchive(outputFile, _flutterRoot); } } - String _runProcess(String executable, List args, {Directory workingDirectory}) { - workingDirectory ??= flutterRoot; - stderr.write('Running "$executable ${args.join(' ')}" in ${workingDirectory.path}.\n'); - ProcessResult result; - try { - result = _runner( - executable, - args, - workingDirectory: workingDirectory.absolute.path, - environment: environment, - includeParentEnvironment: false, - ); - } on ProcessException catch (e) { - final String message = 'Running "$executable ${args.join(' ')}" in ${workingDirectory.path} ' - 'failed with:\n${e.toString()}\n PATH: ${environment['PATH']}'; - throw new ProcessFailedException(message, -1); - } catch (e) { - rethrow; - } - stdout.write(result.stdout); - stderr.write(result.stderr); - if (result.exitCode != 0) { - final String message = 'Running "$executable ${args.join(' ')}" in ${workingDirectory.path} ' - 'failed with ${result.exitCode}.'; - throw new ProcessFailedException(message, result.exitCode); - } - return result.stdout.trim(); + Future _runFlutter(List args) => _runProcess([_flutter]..addAll(args)); + + Future _runGit(List args, {Directory workingDirectory}) { + return _runProcess(['git']..addAll(args), workingDirectory: workingDirectory); } - String runFlutter(List args) { - return _runProcess(flutter, args); + /// Unpacks the given zip file into the currentDirectory (if set), or the + /// same directory as the archive. + /// + /// May only be run on Windows (since 7Zip is not available on other platforms). + Future _unzipArchive(File archive, {Directory currentDirectory}) { + assert(Platform.isWindows); // 7Zip is only available on Windows. + currentDirectory ??= new Directory(path.dirname(archive.absolute.path)); + final List commandLine = ['7za', 'x', archive.absolute.path]; + return _runProcess(commandLine, workingDirectory: currentDirectory); } - String runGit(List args, {Directory workingDirectory}) { - return _runProcess(git, args, workingDirectory: workingDirectory); - } - - void createZipArchive(File output, Directory source) { - final List args = []; - if (Platform.isWindows) { - // We use 7-Zip on Windows, which has different args. - args.addAll(['a', '-tzip', '-mx=9']); - } else { - args.addAll(['-r', '-9', '-q']); - } - args.addAll([ - output.absolute.path, - path.basename(source.absolute.path), - ]); - - _runProcess(zip, args, - workingDirectory: new Directory(path.dirname(source.absolute.path))); - } - - void createTarArchive(File output, Directory source) { - final List args = [ - 'cJf', + /// Create a zip archive from the directory source. + /// + /// May only be run on Windows (since 7Zip is not available on other platforms). + Future _createZipArchive(File output, Directory source) { + assert(Platform.isWindows); // 7Zip is only available on Windows. + final List commandLine = [ + '7za', + 'a', + '-tzip', + '-mx=9', output.absolute.path, path.basename(source.absolute.path), ]; - _runProcess(tar, args, + return _runProcess(commandLine, workingDirectory: new Directory(path.dirname(source.absolute.path))); } + + /// Create a tar archive from the directory source. + Future _createTarArchive(File output, Directory source) { + return _runProcess([ + 'tar', + 'cJf', + output.absolute.path, + path.basename(source.absolute.path), + ], workingDirectory: new Directory(path.dirname(source.absolute.path))); + } + + /// Run the command and arguments in commandLine as a sub-process from + /// workingDirectory if set, or the current directory if not. + Future _runProcess(List commandLine, {Directory workingDirectory}) async { + workingDirectory ??= _flutterRoot; + if (_subprocessOutput) { + stderr.write('Running "${commandLine.join(' ')}" in ${workingDirectory.path}.\n'); + } + final List output = []; + final Completer stdoutComplete = new Completer(); + final Completer stderrComplete = new Completer(); + Process process; + Future allComplete() async { + await stderrComplete.future; + await stdoutComplete.future; + return process.exitCode; + } + + try { + process = await _processManager.start( + commandLine, + workingDirectory: workingDirectory.absolute.path, + environment: _environment, + ); + process.stdout.listen( + (List event) { + output.addAll(event); + if (_subprocessOutput) { + stdout.add(event); + } + }, + onDone: () async => stdoutComplete.complete(), + ); + if (_subprocessOutput) { + process.stderr.listen( + (List event) { + stderr.add(event); + }, + onDone: () async => stderrComplete.complete(), + ); + } else { + stderrComplete.complete(); + } + } on ProcessException catch (e) { + final String message = 'Running "${commandLine.join(' ')}" in ${workingDirectory.path} ' + 'failed with:\n${e.toString()}'; + throw new ProcessFailedException(message, -1); + } + + final int exitCode = await allComplete(); + if (exitCode != 0) { + final String message = 'Running "${commandLine.join(' ')}" in ${workingDirectory.path} ' + 'failed with $exitCode.'; + throw new ProcessFailedException(message, exitCode); + } + return UTF8.decoder.convert(output).trim(); + } } /// Prepares a flutter git repo to be packaged up for distribution. /// It mainly serves to populate the .pub-cache with any appropriate Dart /// packages, and the flutter cache in bin/cache with the appropriate /// dependencies and snapshots. -void main(List argList) { +/// +/// Note that archives contain the executables and customizations for the +/// platform that they are created on. +Future main(List argList) async { final ArgParser argParser = new ArgParser(); argParser.addOption( 'temp_dir', @@ -203,9 +267,11 @@ void main(List argList) { argParser.addOption( 'output', defaultsTo: null, - help: 'The path where the output archive should be written. ' - 'The suffix determines the output format: .tar.xz or .zip are the ' - 'only formats supported.', + help: 'The path to the file where the output archive should be ' + 'written. The output file must end in ".tar.xz" on Linux and Mac, ' + 'and ".zip" on Windows. If --output is not specified, the archive will ' + "be written to the current directory. If the output directory doesn't " + 'exist, it, and the path to it, will be created.', ); final ArgResults args = argParser.parse(argList); @@ -219,47 +285,51 @@ void main(List argList) { errorExit('Invalid argument: --revision must be specified.'); } - Directory tmpDir; + Directory tempDir; bool removeTempDir = false; if (args['temp_dir'] == null || args['temp_dir'].isEmpty) { - tmpDir = Directory.systemTemp.createTempSync('flutter_'); + tempDir = Directory.systemTemp.createTempSync('flutter_'); removeTempDir = true; } else { - tmpDir = new Directory(args['temp_dir']); - if (!tmpDir.existsSync()) { + tempDir = new Directory(args['temp_dir']); + if (!tempDir.existsSync()) { errorExit("Temporary directory ${args['temp_dir']} doesn't exist."); } } - String outputFileString = args['output']; - if (outputFileString == null || outputFileString.isEmpty) { - final String suffix = Platform.isWindows ? '.zip' : '.tar.xz'; - outputFileString = path.join(tmpDir.path, 'flutter_${args['revision']}$suffix'); - } else if (!outputFileString.toLowerCase().endsWith('.zip') && - !outputFileString.toLowerCase().endsWith('.tar.xz')) { - errorExit('Output file has unsupported suffix. It should be either ".zip" or ".tar.xz".'); + final String output = (args['output'] == null || args['output'].isEmpty) + ? path.join(path.current, ArchiveCreator.defaultArchiveName(args['revision'])) + : args['output']; + + /// Sanity check the output filename. + final String outputFilename = path.basename(output); + if (Platform.isWindows) { + if (!outputFilename.endsWith('.zip')) { + errorExit('The argument to --output must end in .zip on Windows.'); + } + } else { + if (!outputFilename.endsWith('.tar.xz')) { + errorExit('The argument to --output must end in .tar.xz on Linux and Mac.'); + } } - final File outputFile = new File(outputFileString); - if (outputFile.existsSync()) { - errorExit('Output file ${outputFile.absolute.path} already exists.'); + final Directory outputDirectory = new Directory(path.dirname(output)); + if (!outputDirectory.existsSync()) { + outputDirectory.createSync(recursive: true); } + final File outputFile = new File(path.join(outputDirectory.absolute.path, outputFilename)); - final ArchiveCreator preparer = new ArchiveCreator(tmpDir, outputFile); + final ArchiveCreator preparer = new ArchiveCreator(tempDir); int exitCode = 0; String message; try { - preparer.checkoutFlutter(args['revision']); - preparer.prepareArchive(); - preparer.createArchive(); + await preparer.createArchive(args['revision'], outputFile); } on ProcessFailedException catch (e) { exitCode = e.exitCode; message = e.message; - } catch (e) { - rethrow; } finally { if (removeTempDir) { - tmpDir.deleteSync(recursive: true); + tempDir.deleteSync(recursive: true); } if (exitCode != 0) { errorExit(message, exitCode: exitCode); diff --git a/dev/bots/pubspec.yaml b/dev/bots/pubspec.yaml index 000b366a3b..4914df2748 100644 --- a/dev/bots/pubspec.yaml +++ b/dev/bots/pubspec.yaml @@ -4,13 +4,14 @@ description: Scripts which run on bots. dependencies: path: 1.5.1 args: 0.13.7 + process: 2.0.7 dev_dependencies: test: 0.12.26 mockito: 2.2.1 async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -18,11 +19,13 @@ dev_dependencies: convert: 2.0.1 # TRANSITIVE DEPENDENCY crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY + file: 2.3.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY + intl: 0.15.2 # TRANSITIVE DEPENDENCY io: 0.3.1 # TRANSITIVE DEPENDENCY isolate: 1.1.0 # TRANSITIVE DEPENDENCY js: 0.6.1 # TRANSITIVE DEPENDENCY @@ -33,6 +36,7 @@ dev_dependencies: node_preamble: 1.4.0 # TRANSITIVE DEPENDENCY package_config: 1.0.3 # TRANSITIVE DEPENDENCY package_resolver: 1.0.2 # TRANSITIVE DEPENDENCY + platform: 2.1.1 # TRANSITIVE DEPENDENCY plugin: 0.2.0+2 # TRANSITIVE DEPENDENCY pool: 1.3.4 # TRANSITIVE DEPENDENCY pub_semver: 1.3.2 # TRANSITIVE DEPENDENCY diff --git a/dev/bots/test/prepare_package_test.dart b/dev/bots/test/prepare_package_test.dart index 2cfe44b1e6..7b9b68d251 100644 --- a/dev/bots/test/prepare_package_test.dart +++ b/dev/bots/test/prepare_package_test.dart @@ -2,12 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:convert'; +import 'dart:async'; import 'dart:io'; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; import 'package:path/path.dart' as path; +import 'package:process/process.dart'; import '../prepare_package.dart'; @@ -17,131 +18,100 @@ void main() { Directory tmpDir; Directory flutterDir; File outputFile; - MockProcessRunner runner; - List results; + MockProcessManager processManager; + List results = []; final List> args = >[]; final List> namedArgs = >[]; - final String zipExe = Platform.isWindows ? '7za.exe' : 'zip'; - final String tarExe = Platform.isWindows ? 'tar.exe' : 'tar'; - final String gitExe = Platform.isWindows ? 'git.bat' : 'git'; String flutterExe; void _verifyCommand(List args, String expected) { final List expectedList = expected.split(' '); - final String executable = expectedList.removeAt(0); - expect(args[0], executable); - expect(args[1], orderedEquals(expectedList)); + expect(args[0], orderedEquals(expectedList)); } - ProcessResult _nextResult(Invocation invocation) { + Future _nextResult(Invocation invocation) async { args.add(invocation.positionalArguments); namedArgs.add(invocation.namedArguments); - return results.isEmpty ? new MockProcessResult('', '', 0) : results.removeAt(0); + final Process result = results.isEmpty ? new MockProcess('', '', 0) : results.removeAt(0); + return new Future.value(result); } void _answerWithResults() { when( - runner.call( - typed(captureAny), + processManager.start( typed(captureAny), environment: typed(captureAny, named: 'environment'), workingDirectory: typed(captureAny, named: 'workingDirectory'), - includeParentEnvironment: typed(captureAny, named: 'includeParentEnvironment'), ), ).thenAnswer(_nextResult); } setUp(() async { - runner = new MockProcessRunner(); + processManager = new MockProcessManager(); args.clear(); namedArgs.clear(); tmpDir = await Directory.systemTemp.createTemp('flutter_'); + outputFile = + new File(path.join(tmpDir.absolute.path, ArchiveCreator.defaultArchiveName('master'))); flutterDir = new Directory(path.join(tmpDir.path, 'flutter')); + flutterDir.createSync(recursive: true); flutterExe = - path.join(flutterDir.path, 'bin', Platform.isWindows ? 'flutter.bat' : 'flutter'); + path.join(flutterDir.path, 'bin', 'flutter'); }); tearDown(() async { - await tmpDir.delete(recursive: true); + // On Windows, the directory is locked and not able to be deleted, because it is a + // temporary directory. So we just leave some (very small, because we're not actually + // building archives here) trash around to be deleted at the next reboot. + if (!Platform.isWindows) { + await tmpDir.delete(recursive: true); + } }); test('sets PUB_CACHE properly', () async { - outputFile = new File(path.join(tmpDir.absolute.path, 'flutter_master.tar.xz')); - preparer = new ArchiveCreator(tmpDir, outputFile, runner: runner); + preparer = + new ArchiveCreator(tmpDir, processManager: processManager, subprocessOutput: false); _answerWithResults(); - results = [new MockProcessResult('deadbeef\n', '', 0)]; - preparer.checkoutFlutter('master'); - preparer.prepareArchive(); - preparer.createArchive(); + await preparer.createArchive('master', outputFile); expect( - verify(runner.call( - captureAny, + verify(processManager.start( captureAny, workingDirectory: captureAny, environment: captureAny, - includeParentEnvironment: typed(captureAny, named: 'includeParentEnvironment'), - )).captured[2]['PUB_CACHE'], + )).captured[1]['PUB_CACHE'], endsWith(path.join('flutter', '.pub-cache')), ); }); - test('calls the right commands for tar output', () async { - outputFile = new File(path.join(tmpDir.absolute.path, 'flutter_master.tar.xz')); - preparer = new ArchiveCreator(tmpDir, outputFile, runner: runner); + test('calls the right commands for archive output', () async { + preparer = + new ArchiveCreator(tmpDir, processManager: processManager, subprocessOutput: false); _answerWithResults(); - results = [new MockProcessResult('deadbeef\n', '', 0)]; - preparer.checkoutFlutter('master'); - preparer.prepareArchive(); - preparer.createArchive(); + await preparer.createArchive('master', outputFile); final List commands = [ - '$gitExe clone -b master https://chromium.googlesource.com/external/github.com/flutter/flutter', - '$gitExe reset --hard master', - '$gitExe remote remove origin', - '$gitExe remote add origin https://github.com/flutter/flutter.git', - '$flutterExe doctor', - '$flutterExe update-packages', - '$flutterExe precache', - '$flutterExe ide-config', - '$flutterExe create --template=app ${path.join(tmpDir.path, 'create_app')}', - '$flutterExe create --template=package ${path.join(tmpDir.path, 'create_package')}', - '$flutterExe create --template=plugin ${path.join(tmpDir.path, 'create_plugin')}', - '$gitExe clean -f -X **/.packages', - '$tarExe cJf ${path.join(tmpDir.path, 'flutter_master.tar.xz')} flutter', - ]; - int step = 0; - for (String command in commands) { - _verifyCommand(args[step++], command); - } - }); - - test('calls the right commands for zip output', () async { - outputFile = new File(path.join(tmpDir.absolute.path, 'flutter_master.zip')); - preparer = new ArchiveCreator(tmpDir, outputFile, runner: runner); - _answerWithResults(); - results = [new MockProcessResult('deadbeef\n', '', 0)]; - preparer.checkoutFlutter('master'); - preparer.prepareArchive(); - preparer.createArchive(); - final List commands = [ - '$gitExe clone -b master https://chromium.googlesource.com/external/github.com/flutter/flutter', - '$gitExe reset --hard master', - '$gitExe remote remove origin', - '$gitExe remote add origin https://github.com/flutter/flutter.git', - '$flutterExe doctor', - '$flutterExe update-packages', - '$flutterExe precache', - '$flutterExe ide-config', - '$flutterExe create --template=app ${path.join(tmpDir.path, 'create_app')}', - '$flutterExe create --template=package ${path.join(tmpDir.path, 'create_package')}', - '$flutterExe create --template=plugin ${path.join(tmpDir.path, 'create_plugin')}', - '$gitExe clean -f -X **/.packages', + 'git clone -b master https://chromium.googlesource.com/external/github.com/flutter/flutter', + 'git reset --hard master', + 'git remote remove origin', + 'git remote add origin https://github.com/flutter/flutter.git', ]; if (Platform.isWindows) { - commands.add('$zipExe a -tzip -mx=9 ${path.join(tmpDir.path, 'flutter_master.zip')} flutter'); - } else { - commands.add('$zipExe -r -9 -q ${path.join(tmpDir.path, 'flutter_master.zip')} flutter'); + commands.add('7za x ${path.join(tmpDir.path, 'mingit.zip')}'); + } + commands.addAll([ + '$flutterExe doctor', + '$flutterExe update-packages', + '$flutterExe precache', + '$flutterExe ide-config', + '$flutterExe create --template=app ${path.join(tmpDir.path, 'create_app')}', + '$flutterExe create --template=package ${path.join(tmpDir.path, 'create_package')}', + '$flutterExe create --template=plugin ${path.join(tmpDir.path, 'create_plugin')}', + 'git clean -f -X **/.packages', + ]); + if (Platform.isWindows) { + commands.add('7za a -tzip -mx=9 ${outputFile.absolute.path} flutter'); + } else { + commands.add('tar cJf ${outputFile.absolute.path} flutter'); } - int step = 0; for (String command in commands) { _verifyCommand(args[step++], command); @@ -149,50 +119,37 @@ void main() { }); test('throws when a command errors out', () async { - outputFile = new File(path.join(tmpDir.absolute.path, 'flutter.tar.xz')); - preparer = new ArchiveCreator( - tmpDir, - outputFile, - runner: runner, - ); + preparer = + new ArchiveCreator(tmpDir, processManager: processManager, subprocessOutput: false); - results = [ - new MockProcessResult('', '', 0), - new MockProcessResult('OMG! OMG! an ERROR!\n', '', -1) + results = [ + new MockProcess('', '', 0), + new MockProcess('', "Don't panic.\n", -1) ]; _answerWithResults(); - expect(() => preparer.checkoutFlutter('master'), + expect(expectAsync2(preparer.createArchive)('master', new File('foo')), throwsA(const isInstanceOf())); - expect(args.length, 2); - _verifyCommand(args[0], - '$gitExe clone -b master https://chromium.googlesource.com/external/github.com/flutter/flutter'); - _verifyCommand(args[1], '$gitExe reset --hard master'); }); }); } -class MockProcessRunner extends Mock implements Function { - ProcessResult call( - String executable, - List arguments, { - String workingDirectory, - Map environment, - bool includeParentEnvironment, - bool runInShell, - Encoding stdoutEncoding, - Encoding stderrEncoding, - }); -} - -class MockProcessResult extends Mock implements ProcessResult { - MockProcessResult(this.stdout, [this.stderr = '', this.exitCode = 0]); - - @override - dynamic stdout = ''; - - @override - dynamic stderr; - - @override - int exitCode; +class MockProcessManager extends Mock implements ProcessManager {} + +class MockProcess extends Mock implements Process { + MockProcess(this._stdout, [this._stderr, this._exitCode]); + + String _stdout; + String _stderr; + int _exitCode; + + @override + Stream> get stdout => + new Stream>.fromIterable(>[_stdout.codeUnits]); + + @override + Stream> get stderr => + new Stream>.fromIterable(>[_stderr.codeUnits]); + + @override + Future get exitCode => new Future.value(_exitCode); } diff --git a/dev/devicelab/pubspec.yaml b/dev/devicelab/pubspec.yaml index 71e1b6ab23..fa2605466f 100644 --- a/dev/devicelab/pubspec.yaml +++ b/dev/devicelab/pubspec.yaml @@ -24,7 +24,7 @@ dev_dependencies: archive: 1.0.33 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY browser: 0.10.0+2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY @@ -34,7 +34,7 @@ dev_dependencies: crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/dev/integration_tests/channels/pubspec.yaml b/dev/integration_tests/channels/pubspec.yaml index 1de59ae81d..cbd05b5f53 100644 --- a/dev/integration_tests/channels/pubspec.yaml +++ b/dev/integration_tests/channels/pubspec.yaml @@ -9,7 +9,7 @@ dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -19,7 +19,7 @@ dependencies: csslib: 0.14.1 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/dev/integration_tests/external_ui/pubspec.yaml b/dev/integration_tests/external_ui/pubspec.yaml index ade871ae5d..e564cfdba9 100644 --- a/dev/integration_tests/external_ui/pubspec.yaml +++ b/dev/integration_tests/external_ui/pubspec.yaml @@ -9,7 +9,7 @@ dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -19,7 +19,7 @@ dependencies: csslib: 0.14.1 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/dev/integration_tests/flavors/pubspec.yaml b/dev/integration_tests/flavors/pubspec.yaml index da06bed7e9..4dba44a3b3 100644 --- a/dev/integration_tests/flavors/pubspec.yaml +++ b/dev/integration_tests/flavors/pubspec.yaml @@ -9,7 +9,7 @@ dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -19,7 +19,7 @@ dependencies: csslib: 0.14.1 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/dev/integration_tests/platform_interaction/pubspec.yaml b/dev/integration_tests/platform_interaction/pubspec.yaml index eddbd14844..7783339d23 100644 --- a/dev/integration_tests/platform_interaction/pubspec.yaml +++ b/dev/integration_tests/platform_interaction/pubspec.yaml @@ -9,7 +9,7 @@ dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -19,7 +19,7 @@ dependencies: csslib: 0.14.1 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/dev/integration_tests/ui/pubspec.yaml b/dev/integration_tests/ui/pubspec.yaml index 65feeeb8fa..4d68e7a914 100644 --- a/dev/integration_tests/ui/pubspec.yaml +++ b/dev/integration_tests/ui/pubspec.yaml @@ -16,7 +16,7 @@ dev_dependencies: archive: 1.0.33 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY browser: 0.10.0+2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY @@ -27,7 +27,7 @@ dev_dependencies: csslib: 0.14.1 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/dev/manual_tests/pubspec.yaml b/dev/manual_tests/pubspec.yaml index 42372a9c74..7b358df27d 100644 --- a/dev/manual_tests/pubspec.yaml +++ b/dev/manual_tests/pubspec.yaml @@ -10,7 +10,7 @@ dev_dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -19,7 +19,7 @@ dev_dependencies: crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/dev/tools/vitool/pubspec.yaml b/dev/tools/vitool/pubspec.yaml index 326de1733b..317ccdcc8a 100644 --- a/dev/tools/vitool/pubspec.yaml +++ b/dev/tools/vitool/pubspec.yaml @@ -16,7 +16,7 @@ dev_dependencies: test: 0.12.26 async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -25,7 +25,7 @@ dev_dependencies: crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/examples/catalog/pubspec.yaml b/examples/catalog/pubspec.yaml index fd549f88d3..631dd12405 100644 --- a/examples/catalog/pubspec.yaml +++ b/examples/catalog/pubspec.yaml @@ -13,7 +13,7 @@ dev_dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -23,7 +23,7 @@ dev_dependencies: csslib: 0.14.1 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/examples/flutter_gallery/pubspec.yaml b/examples/flutter_gallery/pubspec.yaml index 201d6cc24f..24e5121a58 100644 --- a/examples/flutter_gallery/pubspec.yaml +++ b/examples/flutter_gallery/pubspec.yaml @@ -25,7 +25,7 @@ dev_dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -34,7 +34,7 @@ dev_dependencies: csslib: 0.14.1 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/examples/flutter_view/pubspec.yaml b/examples/flutter_view/pubspec.yaml index 85793e9d55..f443d5ddfa 100644 --- a/examples/flutter_view/pubspec.yaml +++ b/examples/flutter_view/pubspec.yaml @@ -7,7 +7,7 @@ dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -16,7 +16,7 @@ dependencies: crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/examples/hello_world/pubspec.yaml b/examples/hello_world/pubspec.yaml index 0ee14292d7..e7ed336f3c 100644 --- a/examples/hello_world/pubspec.yaml +++ b/examples/hello_world/pubspec.yaml @@ -10,7 +10,7 @@ dev_dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -19,7 +19,7 @@ dev_dependencies: crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/examples/layers/pubspec.yaml b/examples/layers/pubspec.yaml index 81071e7887..ff6c71377a 100644 --- a/examples/layers/pubspec.yaml +++ b/examples/layers/pubspec.yaml @@ -9,7 +9,7 @@ dev_dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -18,7 +18,7 @@ dev_dependencies: crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/examples/platform_channel/pubspec.yaml b/examples/platform_channel/pubspec.yaml index fa97a36514..e78f66f52f 100644 --- a/examples/platform_channel/pubspec.yaml +++ b/examples/platform_channel/pubspec.yaml @@ -12,7 +12,7 @@ dev_dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -22,7 +22,7 @@ dev_dependencies: csslib: 0.14.1 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/examples/platform_channel_swift/pubspec.yaml b/examples/platform_channel_swift/pubspec.yaml index db84f355a0..bf4e9756c5 100644 --- a/examples/platform_channel_swift/pubspec.yaml +++ b/examples/platform_channel_swift/pubspec.yaml @@ -12,7 +12,7 @@ dev_dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -22,7 +22,7 @@ dev_dependencies: csslib: 0.14.1 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/examples/platform_view/pubspec.yaml b/examples/platform_view/pubspec.yaml index 8c4e2d81ca..900797306d 100644 --- a/examples/platform_view/pubspec.yaml +++ b/examples/platform_view/pubspec.yaml @@ -6,7 +6,7 @@ dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -15,7 +15,7 @@ dependencies: crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/examples/stocks/pubspec.yaml b/examples/stocks/pubspec.yaml index b5cc0f178a..dfafbedb91 100644 --- a/examples/stocks/pubspec.yaml +++ b/examples/stocks/pubspec.yaml @@ -17,7 +17,7 @@ dev_dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -28,7 +28,7 @@ dev_dependencies: dart_style: 1.0.9 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY io: 0.3.1 # TRANSITIVE DEPENDENCY diff --git a/packages/flutter/pubspec.yaml b/packages/flutter/pubspec.yaml index 5cba8e95cf..babcb146b1 100644 --- a/packages/flutter/pubspec.yaml +++ b/packages/flutter/pubspec.yaml @@ -22,7 +22,7 @@ dev_dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -30,7 +30,7 @@ dev_dependencies: crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY io: 0.3.1 # TRANSITIVE DEPENDENCY diff --git a/packages/flutter_driver/pubspec.yaml b/packages/flutter_driver/pubspec.yaml index ca332edaf9..c2640f3678 100644 --- a/packages/flutter_driver/pubspec.yaml +++ b/packages/flutter_driver/pubspec.yaml @@ -26,7 +26,7 @@ dev_dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -35,7 +35,7 @@ dev_dependencies: crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/packages/flutter_localizations/pubspec.yaml b/packages/flutter_localizations/pubspec.yaml index 897e984581..2b66dd7483 100644 --- a/packages/flutter_localizations/pubspec.yaml +++ b/packages/flutter_localizations/pubspec.yaml @@ -14,7 +14,7 @@ dev_dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -23,7 +23,7 @@ dev_dependencies: crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY diff --git a/packages/flutter_test/pubspec.yaml b/packages/flutter_test/pubspec.yaml index 7ac123be2a..79ba19e60f 100644 --- a/packages/flutter_test/pubspec.yaml +++ b/packages/flutter_test/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: args: 0.13.7 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY @@ -36,7 +36,7 @@ dependencies: crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY io: 0.3.1 # TRANSITIVE DEPENDENCY diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml index b02c028f58..94b6a548e6 100644 --- a/packages/flutter_tools/pubspec.yaml +++ b/packages/flutter_tools/pubspec.yaml @@ -48,13 +48,13 @@ dev_dependencies: mockito: 2.2.1 async: 1.13.3 # TRANSITIVE DEPENDENCY - barback: 0.15.2+13 # TRANSITIVE DEPENDENCY + barback: 0.15.2+14 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY convert: 2.0.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY - html: 0.13.2+1 # TRANSITIVE DEPENDENCY + html: 0.13.2+2 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY io: 0.3.1 # TRANSITIVE DEPENDENCY