Index: sdk/lib/_internal/pub_generated/lib/src/command/build.dart |
diff --git a/sdk/lib/_internal/pub/lib/src/command/build.dart b/sdk/lib/_internal/pub_generated/lib/src/command/build.dart |
similarity index 58% |
copy from sdk/lib/_internal/pub/lib/src/command/build.dart |
copy to sdk/lib/_internal/pub_generated/lib/src/command/build.dart |
index 4b76909f9dae02de7ac68cd3b68556611a445909..80060c86f9d68ce43b5ac3cd50fa68bcc9246b00 100644 |
--- a/sdk/lib/_internal/pub/lib/src/command/build.dart |
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/build.dart |
@@ -35,111 +35,111 @@ class BuildCommand extends BarbackCommand { |
int builtFiles = 0; |
BuildCommand() { |
- argParser.addOption("format", |
+ argParser.addOption( |
+ "format", |
help: "How output should be displayed.", |
- allowed: ["text", "json"], defaultsTo: "text"); |
+ allowed: ["text", "json"], |
+ defaultsTo: "text"); |
- argParser.addOption("output", abbr: "o", |
+ argParser.addOption( |
+ "output", |
+ abbr: "o", |
help: "Directory to write build outputs to.", |
defaultsTo: "build"); |
} |
- Future onRunTransformerCommand() async { |
- cleanDir(outputDirectory); |
- |
- var errorsJson = []; |
- var logJson = []; |
- |
- // Since this server will only be hit by the transformer loader and isn't |
- // user-facing, just use an IPv4 address to avoid a weird bug on the |
- // OS X buildbots. |
- return AssetEnvironment.create(entrypoint, mode, useDart2JS: true) |
- .then((environment) { |
- // Show in-progress errors, but not results. Those get handled |
- // implicitly by getAllAssets(). |
- environment.barback.errors.listen((error) { |
- log.error(log.red("Build error:\n$error")); |
- |
- if (log.json.enabled) { |
- // Wrap the error in a map in case we end up decorating it with |
- // more properties later. |
- errorsJson.add({ |
- "error": error.toString() |
+ Future onRunTransformerCommand() { |
+ final completer0 = new Completer(); |
+ scheduleMicrotask(() { |
+ try { |
+ cleanDir(outputDirectory); |
+ var errorsJson = []; |
+ var logJson = []; |
+ completer0.complete( |
+ AssetEnvironment.create( |
+ entrypoint, |
+ mode, |
+ useDart2JS: true).then(((environment) { |
+ environment.barback.errors.listen((error) { |
+ log.error(log.red("Build error:\n$error")); |
+ if (log.json.enabled) { |
+ errorsJson.add({ |
+ "error": error.toString() |
+ }); |
+ } |
}); |
- } |
- }); |
- |
- // If we're using JSON output, the regular server logging is disabled. |
- // Instead, we collect it here to include in the final JSON result. |
- if (log.json.enabled) { |
- environment.barback.log.listen( |
- (entry) => logJson.add(_logEntryToJson(entry))); |
- } |
- |
- return log.progress("Building ${entrypoint.root.name}", () { |
- // Register all of the build directories. |
- // TODO(rnystrom): We don't actually need to bind servers for these, we |
- // just need to add them to barback's sources. Add support to |
- // BuildEnvironment for going the latter without the former. |
- return Future.wait(sourceDirectories.map( |
- (dir) => environment.serveDirectory(dir))).then((_) { |
- |
- return environment.barback.getAllAssets(); |
- }); |
- }).then((assets) { |
- // Find all of the JS entrypoints we built. |
- var dart2JSEntrypoints = assets |
- .where((asset) => asset.id.path.endsWith(".dart.js")) |
- .map((asset) => asset.id); |
- |
- return Future.wait(assets.map(_writeAsset)).then((_) { |
- builtFiles += _copyBrowserJsFiles(dart2JSEntrypoints); |
- log.message('Built $builtFiles ${pluralize('file', builtFiles)} ' |
- 'to "$outputDirectory".'); |
- |
+ if (log.json.enabled) { |
+ environment.barback.log.listen( |
+ (entry) => logJson.add(_logEntryToJson(entry))); |
+ } |
+ return log.progress("Building ${entrypoint.root.name}", () { |
+ return Future.wait( |
+ sourceDirectories.map((dir) => environment.serveDirectory(dir))).then((_) { |
+ return environment.barback.getAllAssets(); |
+ }); |
+ }).then((assets) { |
+ var dart2JSEntrypoints = assets.where( |
+ (asset) => asset.id.path.endsWith(".dart.js")).map((asset) => asset.id); |
+ return Future.wait(assets.map(_writeAsset)).then((_) { |
+ builtFiles += _copyBrowserJsFiles(dart2JSEntrypoints); |
+ log.message( |
+ 'Built $builtFiles ${pluralize('file', builtFiles)} ' 'to "$outputDirectory".'); |
+ log.json.message({ |
+ "buildResult": "success", |
+ "outputDirectory": outputDirectory, |
+ "numFiles": builtFiles, |
+ "log": logJson |
+ }); |
+ }); |
+ }); |
+ })).catchError(((error) { |
+ if (error is! BarbackException) throw error; |
+ log.error(log.red("Build failed.")); |
log.json.message({ |
- "buildResult": "success", |
- "outputDirectory": outputDirectory, |
- "numFiles": builtFiles, |
+ "buildResult": "failure", |
+ "errors": errorsJson, |
"log": logJson |
}); |
- }); |
- }); |
- }).catchError((error) { |
- // If [getAllAssets()] throws a BarbackException, the error has already |
- // been reported. |
- if (error is! BarbackException) throw error; |
- |
- log.error(log.red("Build failed.")); |
- log.json.message({ |
- "buildResult": "failure", |
- "errors": errorsJson, |
- "log": logJson |
- }); |
- |
- return flushThenExit(exit_codes.DATA); |
+ return flushThenExit(exit_codes.DATA); |
+ }))); |
+ } catch (e, s) { |
+ completer0.completeError(e, s); |
+ } |
}); |
+ return completer0.future; |
} |
/// Writes [asset] to the appropriate build directory. |
/// |
/// If [asset] is in the special "packages" directory, writes it to every |
/// build directory. |
- Future _writeAsset(Asset asset) async { |
- // In release mode, strip out .dart files since all relevant ones have been |
- // compiled to JavaScript already. |
- if (mode == BarbackMode.RELEASE && asset.id.extension == ".dart") return; |
- |
- var destPath = _idToPath(asset.id); |
- |
- // If the asset is from a public directory, copy it into all of the |
- // top-level build directories. |
- if (path.isWithin("packages", destPath)) { |
- return Future.wait(sourceDirectories.map((buildDir) => |
- _writeOutputFile(asset, path.join(buildDir, destPath)))); |
- } |
- |
- return _writeOutputFile(asset, destPath); |
+ Future _writeAsset(Asset asset) { |
+ final completer0 = new Completer(); |
+ scheduleMicrotask(() { |
+ try { |
+ join0() { |
+ var destPath = _idToPath(asset.id); |
+ join1() { |
+ completer0.complete(_writeOutputFile(asset, destPath)); |
+ } |
+ if (path.isWithin("packages", destPath)) { |
+ completer0.complete(Future.wait(sourceDirectories.map(((buildDir) { |
+ return _writeOutputFile(asset, path.join(buildDir, destPath)); |
+ })))); |
+ } else { |
+ join1(); |
+ } |
+ } |
+ if (mode == BarbackMode.RELEASE && asset.id.extension == ".dart") { |
+ completer0.complete(null); |
+ } else { |
+ join0(); |
+ } |
+ } catch (e, s) { |
+ completer0.completeError(e, s); |
+ } |
+ }); |
+ return completer0.future; |
} |
/// Converts [id] to a relative path in the output directory for that asset. |
@@ -198,14 +198,16 @@ class BuildCommand extends BarbackCommand { |
} |
// Get all of the subdirectories that contain Dart entrypoints. |
- var entrypointDirs = entrypoints |
- // Convert the asset path to a native-separated one and get the |
- // directory containing the entrypoint. |
- .map((id) => path.dirname(path.fromUri(id.path))) |
- // Don't copy files to the top levels of the build directories since |
- // the normal lib asset copying will take care of that. |
- .where((dir) => path.split(dir).length > 1) |
- .toSet(); |
+ var entrypointDirs = |
+ entrypoints// Convert the asset path to a native-separated one and get the |
+ // directory containing the entrypoint. |
+ .map( |
+ (id) => |
+ path.dirname( |
+ path.fromUri( |
+ id.path)))// Don't copy files to the top levels of the build directories since |
+ // the normal lib asset copying will take care of that. |
+ .where((dir) => path.split(dir).length > 1).toSet(); |
for (var dir in entrypointDirs) { |
// TODO(nweiz): we should put browser JS files next to any HTML file |
@@ -223,7 +225,11 @@ class BuildCommand extends BarbackCommand { |
/// under `packages/browser/`. |
void _addBrowserJs(String directory, String name) { |
var jsPath = entrypoint.root.path( |
- outputDirectory, directory, 'packages', 'browser', '$name.js'); |
+ outputDirectory, |
+ directory, |
+ 'packages', |
+ 'browser', |
+ '$name.js'); |
ensureDir(path.dirname(jsPath)); |
// TODO(rnystrom): This won't work if we get rid of symlinks and the top |