Unverified Commit 6fda8ee8 authored by Greg Spencer's avatar Greg Spencer Committed by GitHub

Reverting package changes until I can figure out how to fix Windows. (#14007)

* Revert "Fixed output validation. (#14005)"

This reverts commit d84398db.

* Revert "Update package prep script to do async process execution and emit output as it happens. (#13918)"

This reverts commit b7169c1d.
parent d84398db
...@@ -7,7 +7,7 @@ dependencies: ...@@ -7,7 +7,7 @@ dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -16,7 +16,7 @@ dependencies: ...@@ -16,7 +16,7 @@ dependencies:
crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -19,7 +19,7 @@ dev_dependencies: ...@@ -19,7 +19,7 @@ dev_dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -29,7 +29,7 @@ dev_dependencies: ...@@ -29,7 +29,7 @@ dev_dependencies:
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
file: 2.3.5 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -11,7 +11,7 @@ dependencies: ...@@ -11,7 +11,7 @@ dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -21,7 +21,7 @@ dependencies: ...@@ -21,7 +21,7 @@ dependencies:
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
dart_style: 1.0.9 # TRANSITIVE DEPENDENCY dart_style: 1.0.9 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -2,21 +2,28 @@ ...@@ -2,21 +2,28 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'dart:typed_data';
import 'package:args/args.dart'; import 'package:args/args.dart';
import 'package:http/http.dart' as http;
import 'package:path/path.dart' as path; import 'package:path/path.dart' as path;
import 'package:process/process.dart';
const String CHROMIUM_REPO = const String CHROMIUM_REPO =
'https://chromium.googlesource.com/external/github.com/flutter/flutter'; 'https://chromium.googlesource.com/external/github.com/flutter/flutter';
const String GITHUB_REPO = 'https://github.com/flutter/flutter.git'; const String GITHUB_REPO = 'https://github.com/flutter/flutter.git';
const String MINGIT_FOR_WINDOWS_URL = 'https://storage.googleapis.com/flutter_infra/mingit/'
'603511c649b00bbef0a6122a827ac419b656bc19/mingit.zip'; /// 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<String> arguments, {
String workingDirectory,
Map<String, String> environment,
bool includeParentEnvironment,
bool runInShell,
Encoding stdoutEncoding,
Encoding stderrEncoding,
});
/// Error class for when a process fails to run, so we can catch /// Error class for when a process fails to run, so we can catch
/// it and provide something more readable than a stack trace. /// it and provide something more readable than a stack trace.
...@@ -32,96 +39,64 @@ class ProcessFailedException extends Error { ...@@ -32,96 +39,64 @@ class ProcessFailedException extends Error {
/// Creates a pre-populated Flutter archive from a git repo. /// Creates a pre-populated Flutter archive from a git repo.
class ArchiveCreator { class ArchiveCreator {
/// [_tempDir] is the directory to use for creating the archive. The script /// [tempDir] is the directory to use for creating the archive. Will place
/// will place several GiB of data there, so it should have available space. /// several GiB of data there, so it should have available space.
/// /// [outputFile] is the name of the output archive. It should end in either
/// The processManager argument is used to inject a mock of [ProcessManager] for /// ".tar.xz" or ".zip".
/// The runner argument is used to inject a mock of [Process.runSync] for
/// testing purposes. /// testing purposes.
/// ArchiveCreator(this.tempDir, this.outputFile, {ProcessRunner runner})
/// If subprocessOutput is true, then output from processes invoked during : assert(outputFile.path.toLowerCase().endsWith('.zip') ||
/// archive creation is echoed to stderr and stdout. outputFile.path.toLowerCase().endsWith('.tar.xz')),
ArchiveCreator(this._tempDir, {ProcessManager processManager, bool subprocessOutput: true}) flutterRoot = new Directory(path.join(tempDir.path, 'flutter')),
: _flutterRoot = new Directory(path.join(_tempDir.path, 'flutter')), _runner = runner ?? Process.runSync {
_processManager = processManager ?? const LocalProcessManager(), flutter = path.join(
_subprocessOutput = subprocessOutput { flutterRoot.absolute.path,
_flutter = path.join(
_flutterRoot.absolute.path,
'bin', 'bin',
'flutter', Platform.isWindows ? 'flutter.bat' : 'flutter',
); );
_environment = new Map<String, String>.from(Platform.environment); environment = new Map<String, String>.from(Platform.environment);
_environment['PUB_CACHE'] = path.join(_flutterRoot.absolute.path, '.pub-cache'); environment['PUB_CACHE'] = path.join(flutterRoot.absolute.path, '.pub-cache');
}
final Directory _flutterRoot;
final Directory _tempDir;
final bool _subprocessOutput;
final ProcessManager _processManager;
String _flutter;
final Uri _minGitUri = Uri.parse(MINGIT_FOR_WINDOWS_URL);
Map<String, String> _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. final Directory flutterRoot;
Future<File> createArchive(String revision, File outputFile) async { final Directory tempDir;
await _checkoutFlutter(revision); final File outputFile;
await _installMinGitIfNeeded(); final ProcessRunner _runner;
await _populateCaches(); String flutter;
await _archiveFiles(outputFile); final String git = Platform.isWindows ? 'git.bat' : 'git';
return outputFile; final String zip = Platform.isWindows ? '7za.exe' : 'zip';
} final String tar = Platform.isWindows ? 'tar.exe' : 'tar';
Map<String, String> environment;
/// Clone the Flutter repo and make sure that the git environment is sane /// Clone the Flutter repo and make sure that the git environment is sane
/// for when the user will unpack it. /// for when the user will unpack it.
Future<Null> _checkoutFlutter(String revision) async { void checkoutFlutter(String revision) {
// We want the user to start out the in the 'master' branch instead of a // 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 // detached head. To do that, we need to make sure master points at the
// desired revision. // desired revision.
await _runGit(<String>['clone', '-b', 'master', CHROMIUM_REPO], workingDirectory: _tempDir); runGit(<String>['clone', '-b', 'master', CHROMIUM_REPO], workingDirectory: tempDir);
await _runGit(<String>['reset', '--hard', revision]); runGit(<String>['reset', '--hard', revision]);
// Make the origin point to github instead of the chromium mirror. // Make the origin point to github instead of the chromium mirror.
await _runGit(<String>['remote', 'remove', 'origin']); runGit(<String>['remote', 'remove', 'origin']);
await _runGit(<String>['remote', 'add', 'origin', GITHUB_REPO]); runGit(<String>['remote', 'add', 'origin', GITHUB_REPO]);
}
/// Retrieve the MinGit executable from storage and unpack it.
Future<Null> _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.open(mode: FileMode.WRITE);
await gitFile.writeAsBytes(data);
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 /// Prepare the archive repo so that it has all of the caches warmed up and
/// is configured for the user to begin working. /// is configured for the user to being working.
Future<Null> _populateCaches() async { void prepareArchive() {
await _runFlutter(<String>['doctor']); runFlutter(<String>['doctor']);
await _runFlutter(<String>['update-packages']); runFlutter(<String>['update-packages']);
await _runFlutter(<String>['precache']); runFlutter(<String>['precache']);
await _runFlutter(<String>['ide-config']); runFlutter(<String>['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 // themselves when created, and this will warm the cache with their
// dependencies too. // dependencies too.
for (String template in <String>['app', 'package', 'plugin']) { for (String template in <String>['app', 'package', 'plugin']) {
final String createName = path.join(_tempDir.path, 'create_$template'); final String createName = path.join(tempDir.path, 'create_$template');
await _runFlutter( runFlutter(
<String>['create', '--template=$template', createName], <String>['create', '--template=$template', createName],
); );
} }
...@@ -129,117 +104,80 @@ class ArchiveCreator { ...@@ -129,117 +104,80 @@ class ArchiveCreator {
// Yes, we could just skip all .packages files when constructing // Yes, we could just skip all .packages files when constructing
// the archive, but some are checked in, and we don't want to skip // the archive, but some are checked in, and we don't want to skip
// those. // those.
await _runGit(<String>['clean', '-f', '-X', '**/.packages']); runGit(<String>['clean', '-f', '-X', '**/.packages']);
} }
/// Write the archive to the given output file. /// Create the archive into the given output file.
Future<Null> _archiveFiles(File outputFile) async { void createArchive() {
if (outputFile.path.toLowerCase().endsWith('.zip')) { if (outputFile.path.toLowerCase().endsWith('.zip')) {
await _createZipArchive(outputFile, _flutterRoot); createZipArchive(outputFile, flutterRoot);
} else if (outputFile.path.toLowerCase().endsWith('.tar.xz')) { } else if (outputFile.path.toLowerCase().endsWith('.tar.xz')) {
await _createTarArchive(outputFile, _flutterRoot); createTarArchive(outputFile, flutterRoot);
} }
} }
Future<String> _runFlutter(List<String> args) => _runProcess(<String>[_flutter]..addAll(args)); String _runProcess(String executable, List<String> 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<String> _runGit(List<String> args, {Directory workingDirectory}) { String runFlutter(List<String> args) {
return _runProcess(<String>['git']..addAll(args), workingDirectory: workingDirectory); return _runProcess(flutter, args);
} }
/// Unpacks the given zip file into the currentDirectory (if set), or the String runGit(List<String> args, {Directory workingDirectory}) {
/// same directory as the archive. return _runProcess(git, args, workingDirectory: workingDirectory);
///
/// May only be run on Windows (since 7Zip is not available on other platforms).
Future<String> _unzipArchive(File archive, {Directory currentDirectory}) {
assert(Platform.isWindows); // 7Zip is only available on Windows.
currentDirectory ??= new Directory(path.dirname(archive.absolute.path));
final List<String> commandLine = <String>['7za', 'x', archive.absolute.path];
return _runProcess(commandLine, workingDirectory: currentDirectory);
} }
/// Create a zip archive from the directory source. void createZipArchive(File output, Directory source) {
/// final List<String> args = <String>[];
/// May only be run on Windows (since 7Zip is not available on other platforms). if (Platform.isWindows) {
Future<String> _createZipArchive(File output, Directory source) { // We use 7-Zip on Windows, which has different args.
assert(Platform.isWindows); // 7Zip is only available on Windows. args.addAll(<String>['a', '-tzip', '-mx=9']);
final List<String> commandLine = <String>[ } else {
'7za', args.addAll(<String>['-r', '-9', '-q']);
'a', }
'-tzip', args.addAll(<String>[
'-mx=9',
output.absolute.path, output.absolute.path,
path.basename(source.absolute.path), path.basename(source.absolute.path),
]; ]);
return _runProcess(commandLine,
_runProcess(zip, args,
workingDirectory: new Directory(path.dirname(source.absolute.path))); workingDirectory: new Directory(path.dirname(source.absolute.path)));
} }
/// Create a tar archive from the directory source. void createTarArchive(File output, Directory source) {
Future<String> _createTarArchive(File output, Directory source) { final List<String> args = <String>[
return _runProcess(<String>[
'tar',
'cJf', 'cJf',
output.absolute.path, output.absolute.path,
path.basename(source.absolute.path), path.basename(source.absolute.path),
], workingDirectory: new Directory(path.dirname(source.absolute.path))); ];
} _runProcess(tar, args,
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<String> _runProcess(List<String> commandLine, {Directory workingDirectory}) async {
workingDirectory ??= _flutterRoot;
if (_subprocessOutput) {
stderr.write('Running "${commandLine.join(' ')}" in ${workingDirectory.path}.\n');
}
final List<int> output = <int>[];
final Completer<Null> stdoutComplete = new Completer<Null>();
final Completer<Null> stderrComplete = new Completer<Null>();
Process process;
Future<int> 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<int> event) {
output.addAll(event);
if (_subprocessOutput) {
stdout.add(event);
}
},
onDone: () async => stdoutComplete.complete(),
);
if (_subprocessOutput) {
process.stderr.listen(
(List<int> 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();
} }
} }
...@@ -247,10 +185,7 @@ class ArchiveCreator { ...@@ -247,10 +185,7 @@ class ArchiveCreator {
/// It mainly serves to populate the .pub-cache with any appropriate Dart /// It mainly serves to populate the .pub-cache with any appropriate Dart
/// packages, and the flutter cache in bin/cache with the appropriate /// packages, and the flutter cache in bin/cache with the appropriate
/// dependencies and snapshots. /// dependencies and snapshots.
/// void main(List<String> argList) {
/// Note that archives contain the executables and customizations for the
/// platform that they are created on.
Future<Null> main(List<String> argList) async {
final ArgParser argParser = new ArgParser(); final ArgParser argParser = new ArgParser();
argParser.addOption( argParser.addOption(
'temp_dir', 'temp_dir',
...@@ -268,11 +203,9 @@ Future<Null> main(List<String> argList) async { ...@@ -268,11 +203,9 @@ Future<Null> main(List<String> argList) async {
argParser.addOption( argParser.addOption(
'output', 'output',
defaultsTo: null, defaultsTo: null,
help: 'The path to the file where the output archive should be ' help: 'The path where the output archive should be written. '
'written. The output file must end in ".tar.xz" on Linux and Mac, ' 'The suffix determines the output format: .tar.xz or .zip are the '
'and ".zip" on Windows. If --output is not specified, the archive will ' 'only formats supported.',
"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); final ArgResults args = argParser.parse(argList);
...@@ -286,51 +219,47 @@ Future<Null> main(List<String> argList) async { ...@@ -286,51 +219,47 @@ Future<Null> main(List<String> argList) async {
errorExit('Invalid argument: --revision must be specified.'); errorExit('Invalid argument: --revision must be specified.');
} }
Directory tempDir; Directory tmpDir;
bool removeTempDir = false; bool removeTempDir = false;
if (args['temp_dir'] == null || args['temp_dir'].isEmpty) { if (args['temp_dir'] == null || args['temp_dir'].isEmpty) {
tempDir = Directory.systemTemp.createTempSync('flutter_'); tmpDir = Directory.systemTemp.createTempSync('flutter_');
removeTempDir = true; removeTempDir = true;
} else { } else {
tempDir = new Directory(args['temp_dir']); tmpDir = new Directory(args['temp_dir']);
if (!tempDir.existsSync()) { if (!tmpDir.existsSync()) {
errorExit("Temporary directory ${args['temp_dir']} doesn't exist."); errorExit("Temporary directory ${args['temp_dir']} doesn't exist.");
} }
} }
final String output = (args['output'] == null || args['output'].isEmpty) String outputFileString = args['output'];
? path.join(path.current, ArchiveCreator.defaultArchiveName(args['revision'])) if (outputFileString == null || outputFileString.isEmpty) {
: args['output']; final String suffix = Platform.isWindows ? '.zip' : '.tar.xz';
outputFileString = path.join(tmpDir.path, 'flutter_${args['revision']}$suffix');
/// Sanity check the output filename. } else if (!outputFileString.toLowerCase().endsWith('.zip') &&
final String outputFilename = path.basename(output); !outputFileString.toLowerCase().endsWith('.tar.xz')) {
if (Platform.isWindows) { errorExit('Output file has unsupported suffix. It should be either ".zip" or ".tar.xz".');
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 Directory outputDirectory = new Directory(path.dirname(output)); final File outputFile = new File(outputFileString);
if (!outputDirectory.existsSync()) { if (outputFile.existsSync()) {
outputDirectory.createSync(recursive: true); errorExit('Output file ${outputFile.absolute.path} already exists.');
} }
final File outputFile = new File(path.join(outputDirectory.absolute.path, outputFilename));
final ArchiveCreator preparer = new ArchiveCreator(tempDir); final ArchiveCreator preparer = new ArchiveCreator(tmpDir, outputFile);
int exitCode = 0; int exitCode = 0;
String message; String message;
try { try {
await preparer.createArchive(args['revision'], outputFile); preparer.checkoutFlutter(args['revision']);
preparer.prepareArchive();
preparer.createArchive();
} on ProcessFailedException catch (e) { } on ProcessFailedException catch (e) {
exitCode = e.exitCode; exitCode = e.exitCode;
message = e.message; message = e.message;
} catch (e) {
rethrow;
} finally { } finally {
if (removeTempDir) { if (removeTempDir) {
tempDir.deleteSync(recursive: true); tmpDir.deleteSync(recursive: true);
} }
if (exitCode != 0) { if (exitCode != 0) {
errorExit(message, exitCode: exitCode); errorExit(message, exitCode: exitCode);
......
...@@ -4,14 +4,13 @@ description: Scripts which run on bots. ...@@ -4,14 +4,13 @@ description: Scripts which run on bots.
dependencies: dependencies:
path: 1.5.1 path: 1.5.1
args: 0.13.7 args: 0.13.7
process: 2.0.7
dev_dependencies: dev_dependencies:
test: 0.12.26 test: 0.12.26
mockito: 2.2.1 mockito: 2.2.1
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -19,13 +18,11 @@ dev_dependencies: ...@@ -19,13 +18,11 @@ dev_dependencies:
convert: 2.0.1 # TRANSITIVE DEPENDENCY convert: 2.0.1 # TRANSITIVE DEPENDENCY
crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
file: 2.3.5 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
intl: 0.15.2 # TRANSITIVE DEPENDENCY
io: 0.3.1 # TRANSITIVE DEPENDENCY io: 0.3.1 # TRANSITIVE DEPENDENCY
isolate: 1.1.0 # TRANSITIVE DEPENDENCY isolate: 1.1.0 # TRANSITIVE DEPENDENCY
js: 0.6.1 # TRANSITIVE DEPENDENCY js: 0.6.1 # TRANSITIVE DEPENDENCY
...@@ -36,7 +33,6 @@ dev_dependencies: ...@@ -36,7 +33,6 @@ dev_dependencies:
node_preamble: 1.4.0 # TRANSITIVE DEPENDENCY node_preamble: 1.4.0 # TRANSITIVE DEPENDENCY
package_config: 1.0.3 # TRANSITIVE DEPENDENCY package_config: 1.0.3 # TRANSITIVE DEPENDENCY
package_resolver: 1.0.2 # TRANSITIVE DEPENDENCY package_resolver: 1.0.2 # TRANSITIVE DEPENDENCY
platform: 2.1.1 # TRANSITIVE DEPENDENCY
plugin: 0.2.0+2 # TRANSITIVE DEPENDENCY plugin: 0.2.0+2 # TRANSITIVE DEPENDENCY
pool: 1.3.4 # TRANSITIVE DEPENDENCY pool: 1.3.4 # TRANSITIVE DEPENDENCY
pub_semver: 1.3.2 # TRANSITIVE DEPENDENCY pub_semver: 1.3.2 # TRANSITIVE DEPENDENCY
......
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
import 'dart:async'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:mockito/mockito.dart'; import 'package:mockito/mockito.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
import 'package:path/path.dart' as path; import 'package:path/path.dart' as path;
import 'package:process/process.dart';
import '../prepare_package.dart'; import '../prepare_package.dart';
...@@ -18,86 +17,116 @@ void main() { ...@@ -18,86 +17,116 @@ void main() {
Directory tmpDir; Directory tmpDir;
Directory flutterDir; Directory flutterDir;
File outputFile; File outputFile;
MockProcessManager processManager; MockProcessRunner runner;
List<MockProcess> results = <MockProcess>[]; List<MockProcessResult> results;
final List<List<String>> args = <List<String>>[]; final List<List<String>> args = <List<String>>[];
final List<Map<Symbol, dynamic>> namedArgs = <Map<Symbol, dynamic>>[]; final List<Map<Symbol, dynamic>> namedArgs = <Map<Symbol, dynamic>>[];
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; String flutterExe;
void _verifyCommand(List<dynamic> args, String expected) { void _verifyCommand(List<dynamic> args, String expected) {
final List<String> expectedList = expected.split(' '); final List<String> expectedList = expected.split(' ');
expect(args[0], orderedEquals(expectedList)); final String executable = expectedList.removeAt(0);
expect(args[0], executable);
expect(args[1], orderedEquals(expectedList));
} }
Future<Process> _nextResult(Invocation invocation) async { ProcessResult _nextResult(Invocation invocation) {
args.add(invocation.positionalArguments); args.add(invocation.positionalArguments);
namedArgs.add(invocation.namedArguments); namedArgs.add(invocation.namedArguments);
final Process result = results.isEmpty ? new MockProcess('', '', 0) : results.removeAt(0); return results.isEmpty ? new MockProcessResult('', '', 0) : results.removeAt(0);
return new Future<Process>.value(result);
} }
void _answerWithResults() { void _answerWithResults() {
when( when(
processManager.start( runner.call(
typed(captureAny),
typed(captureAny), typed(captureAny),
environment: typed(captureAny, named: 'environment'), environment: typed(captureAny, named: 'environment'),
workingDirectory: typed(captureAny, named: 'workingDirectory'), workingDirectory: typed(captureAny, named: 'workingDirectory'),
includeParentEnvironment: typed(captureAny, named: 'includeParentEnvironment'),
), ),
).thenAnswer(_nextResult); ).thenAnswer(_nextResult);
} }
setUp(() async { setUp(() async {
processManager = new MockProcessManager(); runner = new MockProcessRunner();
args.clear(); args.clear();
namedArgs.clear(); namedArgs.clear();
tmpDir = await Directory.systemTemp.createTemp('flutter_'); 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 = new Directory(path.join(tmpDir.path, 'flutter'));
flutterDir.createSync(recursive: true);
flutterExe = flutterExe =
path.join(flutterDir.path, 'bin', 'flutter'); path.join(flutterDir.path, 'bin', Platform.isWindows ? 'flutter.bat' : 'flutter');
}); });
tearDown(() async { tearDown(() async {
// On Windows, the directory is locked and not able to be deleted, because it is a await tmpDir.delete(recursive: true);
// 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 { test('sets PUB_CACHE properly', () async {
preparer = outputFile = new File(path.join(tmpDir.absolute.path, 'flutter_master.tar.xz'));
new ArchiveCreator(tmpDir, processManager: processManager, subprocessOutput: false); preparer = new ArchiveCreator(tmpDir, outputFile, runner: runner);
_answerWithResults(); _answerWithResults();
await preparer.createArchive('master', outputFile); results = <MockProcessResult>[new MockProcessResult('deadbeef\n', '', 0)];
preparer.checkoutFlutter('master');
preparer.prepareArchive();
preparer.createArchive();
expect( expect(
verify(processManager.start( verify(runner.call(
captureAny,
captureAny, captureAny,
workingDirectory: captureAny, workingDirectory: captureAny,
environment: captureAny, environment: captureAny,
)).captured[1]['PUB_CACHE'], includeParentEnvironment: typed(captureAny, named: 'includeParentEnvironment'),
)).captured[2]['PUB_CACHE'],
endsWith(path.join('flutter', '.pub-cache')), endsWith(path.join('flutter', '.pub-cache')),
); );
}); });
test('calls the right commands for archive output', () async { test('calls the right commands for tar output', () async {
preparer = outputFile = new File(path.join(tmpDir.absolute.path, 'flutter_master.tar.xz'));
new ArchiveCreator(tmpDir, processManager: processManager, subprocessOutput: false); preparer = new ArchiveCreator(tmpDir, outputFile, runner: runner);
_answerWithResults(); _answerWithResults();
await preparer.createArchive('master', outputFile); results = <MockProcessResult>[new MockProcessResult('deadbeef\n', '', 0)];
preparer.checkoutFlutter('master');
preparer.prepareArchive();
preparer.createArchive();
final List<String> commands = <String>[ final List<String> commands = <String>[
'git clone -b master https://chromium.googlesource.com/external/github.com/flutter/flutter', '$gitExe clone -b master https://chromium.googlesource.com/external/github.com/flutter/flutter',
'git reset --hard master', '$gitExe reset --hard master',
'git remote remove origin', '$gitExe remote remove origin',
'git remote add origin https://github.com/flutter/flutter.git', '$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',
]; ];
if (Platform.isWindows) { int step = 0;
commands.add('7za x ${path.join(tmpDir.path, 'mingit.zip')}'); for (String command in commands) {
_verifyCommand(args[step++], command);
} }
commands.addAll(<String>[ });
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 = <MockProcessResult>[new MockProcessResult('deadbeef\n', '', 0)];
preparer.checkoutFlutter('master');
preparer.prepareArchive();
preparer.createArchive();
final List<String> commands = <String>[
'$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 doctor',
'$flutterExe update-packages', '$flutterExe update-packages',
'$flutterExe precache', '$flutterExe precache',
...@@ -105,13 +134,14 @@ void main() { ...@@ -105,13 +134,14 @@ void main() {
'$flutterExe create --template=app ${path.join(tmpDir.path, 'create_app')}', '$flutterExe create --template=app ${path.join(tmpDir.path, 'create_app')}',
'$flutterExe create --template=package ${path.join(tmpDir.path, 'create_package')}', '$flutterExe create --template=package ${path.join(tmpDir.path, 'create_package')}',
'$flutterExe create --template=plugin ${path.join(tmpDir.path, 'create_plugin')}', '$flutterExe create --template=plugin ${path.join(tmpDir.path, 'create_plugin')}',
'git clean -f -X **/.packages', '$gitExe clean -f -X **/.packages',
]); ];
if (Platform.isWindows) { if (Platform.isWindows) {
commands.add('7za a -tzip -mx=9 ${outputFile.absolute.path} flutter'); commands.add('$zipExe a -tzip -mx=9 ${path.join(tmpDir.path, 'flutter_master.zip')} flutter');
} else { } else {
commands.add('tar cJf ${outputFile.absolute.path} flutter'); commands.add('$zipExe -r -9 -q ${path.join(tmpDir.path, 'flutter_master.zip')} flutter');
} }
int step = 0; int step = 0;
for (String command in commands) { for (String command in commands) {
_verifyCommand(args[step++], command); _verifyCommand(args[step++], command);
...@@ -119,37 +149,50 @@ void main() { ...@@ -119,37 +149,50 @@ void main() {
}); });
test('throws when a command errors out', () async { test('throws when a command errors out', () async {
preparer = outputFile = new File(path.join(tmpDir.absolute.path, 'flutter.tar.xz'));
new ArchiveCreator(tmpDir, processManager: processManager, subprocessOutput: false); preparer = new ArchiveCreator(
tmpDir,
outputFile,
runner: runner,
);
results = <MockProcess>[ results = <MockProcessResult>[
new MockProcess('', '', 0), new MockProcessResult('', '', 0),
new MockProcess('', "Don't panic.\n", -1) new MockProcessResult('OMG! OMG! an ERROR!\n', '', -1)
]; ];
_answerWithResults(); _answerWithResults();
expect(expectAsync2<Null, String, File>(preparer.createArchive)('master', new File('foo')), expect(() => preparer.checkoutFlutter('master'),
throwsA(const isInstanceOf<ProcessFailedException>())); throwsA(const isInstanceOf<ProcessFailedException>()));
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 MockProcessManager extends Mock implements ProcessManager {} class MockProcessRunner extends Mock implements Function {
ProcessResult call(
class MockProcess extends Mock implements Process { String executable,
MockProcess(this._stdout, [this._stderr, this._exitCode]); List<String> arguments, {
String workingDirectory,
Map<String, String> environment,
bool includeParentEnvironment,
bool runInShell,
Encoding stdoutEncoding,
Encoding stderrEncoding,
});
}
String _stdout; class MockProcessResult extends Mock implements ProcessResult {
String _stderr; MockProcessResult(this.stdout, [this.stderr = '', this.exitCode = 0]);
int _exitCode;
@override @override
Stream<List<int>> get stdout => dynamic stdout = '';
new Stream<List<int>>.fromIterable(<List<int>>[_stdout.codeUnits]);
@override @override
Stream<List<int>> get stderr => dynamic stderr;
new Stream<List<int>>.fromIterable(<List<int>>[_stderr.codeUnits]);
@override @override
Future<int> get exitCode => new Future<int>.value(_exitCode); int exitCode;
} }
...@@ -24,7 +24,7 @@ dev_dependencies: ...@@ -24,7 +24,7 @@ dev_dependencies:
archive: 1.0.33 # TRANSITIVE DEPENDENCY archive: 1.0.33 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
browser: 0.10.0+2 # TRANSITIVE DEPENDENCY browser: 0.10.0+2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
...@@ -34,7 +34,7 @@ dev_dependencies: ...@@ -34,7 +34,7 @@ dev_dependencies:
crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -9,7 +9,7 @@ dependencies: ...@@ -9,7 +9,7 @@ dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -19,7 +19,7 @@ dependencies: ...@@ -19,7 +19,7 @@ dependencies:
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
file: 2.3.5 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -9,7 +9,7 @@ dependencies: ...@@ -9,7 +9,7 @@ dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -19,7 +19,7 @@ dependencies: ...@@ -19,7 +19,7 @@ dependencies:
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
file: 2.3.5 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -9,7 +9,7 @@ dependencies: ...@@ -9,7 +9,7 @@ dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -19,7 +19,7 @@ dependencies: ...@@ -19,7 +19,7 @@ dependencies:
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
file: 2.3.5 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -9,7 +9,7 @@ dependencies: ...@@ -9,7 +9,7 @@ dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -19,7 +19,7 @@ dependencies: ...@@ -19,7 +19,7 @@ dependencies:
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
file: 2.3.5 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -16,7 +16,7 @@ dev_dependencies: ...@@ -16,7 +16,7 @@ dev_dependencies:
archive: 1.0.33 # TRANSITIVE DEPENDENCY archive: 1.0.33 # TRANSITIVE DEPENDENCY
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
browser: 0.10.0+2 # TRANSITIVE DEPENDENCY browser: 0.10.0+2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
...@@ -27,7 +27,7 @@ dev_dependencies: ...@@ -27,7 +27,7 @@ dev_dependencies:
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
file: 2.3.5 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -10,7 +10,7 @@ dev_dependencies: ...@@ -10,7 +10,7 @@ dev_dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -19,7 +19,7 @@ dev_dependencies: ...@@ -19,7 +19,7 @@ dev_dependencies:
crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -16,7 +16,7 @@ dev_dependencies: ...@@ -16,7 +16,7 @@ dev_dependencies:
test: 0.12.26 test: 0.12.26
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -25,7 +25,7 @@ dev_dependencies: ...@@ -25,7 +25,7 @@ dev_dependencies:
crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -13,7 +13,7 @@ dev_dependencies: ...@@ -13,7 +13,7 @@ dev_dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -23,7 +23,7 @@ dev_dependencies: ...@@ -23,7 +23,7 @@ dev_dependencies:
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
file: 2.3.5 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -25,7 +25,7 @@ dev_dependencies: ...@@ -25,7 +25,7 @@ dev_dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -34,7 +34,7 @@ dev_dependencies: ...@@ -34,7 +34,7 @@ dev_dependencies:
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
file: 2.3.5 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -7,7 +7,7 @@ dependencies: ...@@ -7,7 +7,7 @@ dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -16,7 +16,7 @@ dependencies: ...@@ -16,7 +16,7 @@ dependencies:
crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -10,7 +10,7 @@ dev_dependencies: ...@@ -10,7 +10,7 @@ dev_dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -19,7 +19,7 @@ dev_dependencies: ...@@ -19,7 +19,7 @@ dev_dependencies:
crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -9,7 +9,7 @@ dev_dependencies: ...@@ -9,7 +9,7 @@ dev_dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -18,7 +18,7 @@ dev_dependencies: ...@@ -18,7 +18,7 @@ dev_dependencies:
crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -12,7 +12,7 @@ dev_dependencies: ...@@ -12,7 +12,7 @@ dev_dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -22,7 +22,7 @@ dev_dependencies: ...@@ -22,7 +22,7 @@ dev_dependencies:
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
file: 2.3.5 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -12,7 +12,7 @@ dev_dependencies: ...@@ -12,7 +12,7 @@ dev_dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -22,7 +22,7 @@ dev_dependencies: ...@@ -22,7 +22,7 @@ dev_dependencies:
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
file: 2.3.5 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -6,7 +6,7 @@ dependencies: ...@@ -6,7 +6,7 @@ dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -15,7 +15,7 @@ dependencies: ...@@ -15,7 +15,7 @@ dependencies:
crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -17,7 +17,7 @@ dev_dependencies: ...@@ -17,7 +17,7 @@ dev_dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -28,7 +28,7 @@ dev_dependencies: ...@@ -28,7 +28,7 @@ dev_dependencies:
dart_style: 1.0.9 # TRANSITIVE DEPENDENCY dart_style: 1.0.9 # TRANSITIVE DEPENDENCY
file: 2.3.5 # TRANSITIVE DEPENDENCY file: 2.3.5 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
io: 0.3.1 # TRANSITIVE DEPENDENCY io: 0.3.1 # TRANSITIVE DEPENDENCY
......
...@@ -22,7 +22,7 @@ dev_dependencies: ...@@ -22,7 +22,7 @@ dev_dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -30,7 +30,7 @@ dev_dependencies: ...@@ -30,7 +30,7 @@ dev_dependencies:
crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
io: 0.3.1 # TRANSITIVE DEPENDENCY io: 0.3.1 # TRANSITIVE DEPENDENCY
......
...@@ -26,7 +26,7 @@ dev_dependencies: ...@@ -26,7 +26,7 @@ dev_dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -35,7 +35,7 @@ dev_dependencies: ...@@ -35,7 +35,7 @@ dev_dependencies:
crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -14,7 +14,7 @@ dev_dependencies: ...@@ -14,7 +14,7 @@ dev_dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -23,7 +23,7 @@ dev_dependencies: ...@@ -23,7 +23,7 @@ dev_dependencies:
crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http: 0.11.3+14 # TRANSITIVE DEPENDENCY http: 0.11.3+14 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
......
...@@ -27,7 +27,7 @@ dependencies: ...@@ -27,7 +27,7 @@ dependencies:
args: 0.13.7 # TRANSITIVE DEPENDENCY args: 0.13.7 # TRANSITIVE DEPENDENCY
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY cli_util: 0.1.2+1 # TRANSITIVE DEPENDENCY
...@@ -36,7 +36,7 @@ dependencies: ...@@ -36,7 +36,7 @@ dependencies:
crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY crypto: 2.0.2+1 # TRANSITIVE DEPENDENCY
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
io: 0.3.1 # TRANSITIVE DEPENDENCY io: 0.3.1 # TRANSITIVE DEPENDENCY
......
...@@ -48,13 +48,13 @@ dev_dependencies: ...@@ -48,13 +48,13 @@ dev_dependencies:
mockito: 2.2.1 mockito: 2.2.1
async: 1.13.3 # TRANSITIVE DEPENDENCY async: 1.13.3 # TRANSITIVE DEPENDENCY
barback: 0.15.2+14 # TRANSITIVE DEPENDENCY barback: 0.15.2+13 # TRANSITIVE DEPENDENCY
boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY boolean_selector: 1.0.2 # TRANSITIVE DEPENDENCY
charcode: 1.1.1 # TRANSITIVE DEPENDENCY charcode: 1.1.1 # TRANSITIVE DEPENDENCY
convert: 2.0.1 # TRANSITIVE DEPENDENCY convert: 2.0.1 # TRANSITIVE DEPENDENCY
csslib: 0.14.1 # TRANSITIVE DEPENDENCY csslib: 0.14.1 # TRANSITIVE DEPENDENCY
glob: 1.1.5 # TRANSITIVE DEPENDENCY glob: 1.1.5 # TRANSITIVE DEPENDENCY
html: 0.13.2+2 # TRANSITIVE DEPENDENCY html: 0.13.2+1 # TRANSITIVE DEPENDENCY
http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY http_multi_server: 2.0.4 # TRANSITIVE DEPENDENCY
http_parser: 3.1.1 # TRANSITIVE DEPENDENCY http_parser: 3.1.1 # TRANSITIVE DEPENDENCY
io: 0.3.1 # TRANSITIVE DEPENDENCY io: 0.3.1 # TRANSITIVE DEPENDENCY
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment