Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(363)

Unified Diff: sdk/lib/_internal/pub_generated/lib/src/barback/asset_environment.dart

Issue 887223007: Revert "Use native async/await support in pub." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/pub_generated/lib/src/barback/asset_environment.dart
diff --git a/sdk/lib/_internal/pub/lib/src/barback/asset_environment.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/asset_environment.dart
similarity index 63%
copy from sdk/lib/_internal/pub/lib/src/barback/asset_environment.dart
copy to sdk/lib/_internal/pub_generated/lib/src/barback/asset_environment.dart
index 035dbe6dda4f89d488db192e5b4c2b2d04ba3c88..8316d4e4e03c93f3c52c574755708e3c5216ae8d 100644
--- a/sdk/lib/_internal/pub/lib/src/barback/asset_environment.dart
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/asset_environment.dart
@@ -64,34 +64,55 @@ class AssetEnvironment {
/// transformers, and server are loaded and ready.
static Future<AssetEnvironment> create(Entrypoint entrypoint,
BarbackMode mode, {WatcherType watcherType, String hostname, int basePort,
- Iterable<String> packages, Iterable<AssetId> entrypoints,
- bool useDart2JS: true}) {
+ Iterable<String> packages, Iterable<AssetId> entrypoints, bool useDart2JS:
+ true}) {
if (watcherType == null) watcherType = WatcherType.NONE;
if (hostname == null) hostname = "localhost";
if (basePort == null) basePort = 0;
- return log.progress("Loading asset environment", () async {
- var graph = await entrypoint.loadPackageGraph();
- graph = _adjustPackageGraph(graph, mode, packages);
- var barback = new Barback(new PubPackageProvider(graph));
- barback.log.listen(_log);
-
- var environment = new AssetEnvironment._(graph, barback, mode,
- watcherType, hostname, basePort);
-
- await environment._load(entrypoints: entrypoints, useDart2JS: useDart2JS);
- return environment;
+ return log.progress("Loading asset environment", () {
+ final completer0 = new Completer();
+ scheduleMicrotask(() {
+ try {
+ new Future.value(entrypoint.loadPackageGraph()).then((x0) {
+ try {
+ var graph = x0;
+ graph = _adjustPackageGraph(graph, mode, packages);
+ var barback = new Barback(new PubPackageProvider(graph));
+ barback.log.listen(_log);
+ var environment =
+ new AssetEnvironment._(graph, barback, mode, watcherType, hostname, basePort);
+ new Future.value(
+ environment._load(entrypoints: entrypoints, useDart2JS: useDart2JS)).then((x1) {
+ try {
+ x1;
+ completer0.complete(environment);
+ } catch (e0, s0) {
+ completer0.completeError(e0, s0);
+ }
+ }, onError: completer0.completeError);
+ } catch (e1, s1) {
+ completer0.completeError(e1, s1);
+ }
+ }, onError: completer0.completeError);
+ } catch (e, s) {
+ completer0.completeError(e, s);
+ }
+ });
+ return completer0.future;
}, fine: true);
}
/// Return a version of [graph] that's restricted to [packages] (if passed)
/// and loads cached packages (if [mode] is [BarbackMode.DEBUG]).
- static PackageGraph _adjustPackageGraph(PackageGraph graph,
- BarbackMode mode, Iterable<String> packages) {
+ static PackageGraph _adjustPackageGraph(PackageGraph graph, BarbackMode mode,
+ Iterable<String> packages) {
if (mode != BarbackMode.DEBUG && packages == null) return graph;
packages = (packages == null ? graph.packages.keys : packages).toSet();
- return new PackageGraph(graph.entrypoint, graph.lockFile,
+ return new PackageGraph(
+ graph.entrypoint,
+ graph.lockFile,
new Map.fromIterable(packages, value: (packageName) {
var package = graph.packages[packageName];
if (mode != BarbackMode.DEBUG) return package;
@@ -157,8 +178,8 @@ class AssetEnvironment {
/// go to barback immediately.
Set<AssetId> _modifiedSources;
- AssetEnvironment._(this.graph, this.barback, this.mode,
- this._watcherType, this._hostname, this._basePort);
+ AssetEnvironment._(this.graph, this.barback, this.mode, this._watcherType,
+ this._hostname, this._basePort);
/// Gets the built-in [Transformer]s that should be added to [package].
///
@@ -185,8 +206,8 @@ class AssetEnvironment {
// it's ephemeral in which case the admin port is too.
if (port == null) port = _basePort == 0 ? 0 : _basePort - 1;
- return AdminServer.bind(this, _hostname, port)
- .then((server) => _adminServer = server);
+ return AdminServer.bind(this, _hostname, port).then((server) => _adminServer =
+ server);
}
/// Binds a new port to serve assets from within [rootDirectory] in the
@@ -207,9 +228,10 @@ class AssetEnvironment {
}
// See if the new directory overlaps any existing servers.
- var overlapping = _directories.keys.where((directory) =>
- path.isWithin(directory, rootDirectory) ||
- path.isWithin(rootDirectory, directory)).toList();
+ var overlapping = _directories.keys.where(
+ (directory) =>
+ path.isWithin(directory, rootDirectory) ||
+ path.isWithin(rootDirectory, directory)).toList();
if (overlapping.isNotEmpty) {
return new Future.error(
@@ -220,19 +242,20 @@ class AssetEnvironment {
// If not using an ephemeral port, find the lowest-numbered available one.
if (port != 0) {
- var boundPorts = _directories.values.map((directory) => directory.port)
- .toSet();
+ var boundPorts =
+ _directories.values.map((directory) => directory.port).toSet();
while (boundPorts.contains(port)) {
port++;
}
}
- var sourceDirectory = new SourceDirectory(
- this, rootDirectory, _hostname, port);
+ var sourceDirectory =
+ new SourceDirectory(this, rootDirectory, _hostname, port);
_directories[rootDirectory] = sourceDirectory;
- return _provideDirectorySources(rootPackage, rootDirectory)
- .then((subscription) {
+ return _provideDirectorySources(
+ rootPackage,
+ rootDirectory).then((subscription) {
sourceDirectory.watchSubscription = subscription;
return sourceDirectory.serve();
});
@@ -247,9 +270,11 @@ class AssetEnvironment {
///
/// Returns a [Future] that completes to the bound server.
Future<BarbackServer> servePackageBinDirectory(String package) {
- return _provideDirectorySources(graph.packages[package], "bin").then(
- (_) => BarbackServer.bind(this, _hostname, 0, package: package,
- rootDirectory: "bin"));
+ return _provideDirectorySources(
+ graph.packages[package],
+ "bin").then(
+ (_) =>
+ BarbackServer.bind(this, _hostname, 0, package: package, rootDirectory: "bin"));
}
/// Precompiles all of [packageName]'s executables to snapshots in
@@ -260,41 +285,104 @@ class AssetEnvironment {
/// Returns a map from executable name to path for the snapshots that were
/// successfully precompiled.
Future<Map<String, String>> precompileExecutables(String packageName,
- String directory, {Iterable<AssetId> executableIds}) async {
- if (executableIds == null) {
- executableIds = graph.packages[packageName].executableIds;
- }
-
- log.fine("Executables for $packageName: $executableIds");
- if (executableIds.isEmpty) return [];
-
- var package = graph.packages[packageName];
- var server = await servePackageBinDirectory(packageName);
- try {
- var precompiled = {};
- await waitAndPrintErrors(executableIds.map((id) async {
- var basename = path.url.basename(id.path);
- var snapshotPath = path.join(directory, "$basename.snapshot");
- var result = await runProcess(Platform.executable, [
- '--snapshot=$snapshotPath',
- server.url.resolve(basename).toString()
- ]);
- if (result.success) {
- log.message("Precompiled ${_formatExecutable(id)}.");
- precompiled[path.withoutExtension(basename)] = snapshotPath;
+ String directory, {Iterable<AssetId> executableIds}) {
+ final completer0 = new Completer();
+ scheduleMicrotask(() {
+ try {
+ join0() {
+ log.fine("Executables for ${packageName}: ${executableIds}");
+ join1() {
+ var package = graph.packages[packageName];
+ new Future.value(servePackageBinDirectory(packageName)).then((x0) {
+ try {
+ var server = x0;
+ join2() {
+ completer0.complete();
+ }
+ finally0(cont0) {
+ server.close();
+ cont0();
+ }
+ catch0(e1, s1) {
+ finally0(() => completer0.completeError(e1, s1));
+ }
+ try {
+ var precompiled = {};
+ new Future.value(waitAndPrintErrors(executableIds.map(((id) {
+ final completer0 = new Completer();
+ scheduleMicrotask(() {
+ try {
+ var basename = path.url.basename(id.path);
+ var snapshotPath =
+ path.join(directory, "${basename}.snapshot");
+ new Future.value(
+ runProcess(
+ Platform.executable,
+ [
+ '--snapshot=${snapshotPath}',
+ server.url.resolve(basename).toString()])).then((x0) {
+ try {
+ var result = x0;
+ join0() {
+ completer0.complete();
+ }
+ if (result.success) {
+ log.message(
+ "Precompiled ${_formatExecutable(id)}.");
+ precompiled[path.withoutExtension(basename)] =
+ snapshotPath;
+ join0();
+ } else {
+ throw new ApplicationException(
+ log.yellow("Failed to precompile ${_formatExecutable(id)}:\n") +
+ result.stderr.join('\n'));
+ join0();
+ }
+ } catch (e0, s0) {
+ completer0.completeError(e0, s0);
+ }
+ }, onError: completer0.completeError);
+ } catch (e, s) {
+ completer0.completeError(e, s);
+ }
+ });
+ return completer0.future;
+ })))).then((x1) {
+ try {
+ x1;
+ final v0 = precompiled;
+ finally0(() {
+ completer0.complete(v0);
+ });
+ } catch (e2, s2) {
+ catch0(e2, s2);
+ }
+ }, onError: catch0);
+ } catch (e3, s3) {
+ catch0(e3, s3);
+ }
+ } catch (e4, s4) {
+ completer0.completeError(e4, s4);
+ }
+ }, onError: completer0.completeError);
+ }
+ if (executableIds.isEmpty) {
+ completer0.complete([]);
+ } else {
+ join1();
+ }
+ }
+ if (executableIds == null) {
+ executableIds = graph.packages[packageName].executableIds;
+ join0();
} else {
- throw new ApplicationException(
- log.yellow("Failed to precompile ${_formatExecutable(id)}:\n") +
- result.stderr.join('\n'));
+ join0();
}
- }));
-
- return precompiled;
- } finally {
- // Don't await this future, since we have no need to wait for the server
- // to fully shut down.
- server.close();
- }
+ } catch (e, s) {
+ completer0.completeError(e, s);
+ }
+ });
+ return completer0.future;
}
/// Returns the executable name for [id].
@@ -329,9 +417,8 @@ class AssetEnvironment {
/// If [assetPath] is not contained within a source directory, this throws
/// an exception.
String getSourceDirectoryContaining(String assetPath) =>
- _directories.values
- .firstWhere((dir) => path.isWithin(dir.directory, assetPath))
- .directory;
+ _directories.values.firstWhere(
+ (dir) => path.isWithin(dir.directory, assetPath)).directory;
/// Return all URLs serving [assetPath] in this environment.
Future<List<Uri>> getUrlsForAssetPath(String assetPath) {
@@ -350,12 +437,12 @@ class AssetEnvironment {
Future<List<Uri>> _lookUpPathInServerRoot(String assetPath) {
// Find all of the servers whose root directories contain the asset and
// generate appropriate URLs for each.
- return Future.wait(_directories.values
- .where((dir) => path.isWithin(dir.directory, assetPath))
- .map((dir) {
+ return Future.wait(
+ _directories.values.where(
+ (dir) => path.isWithin(dir.directory, assetPath)).map((dir) {
var relativePath = path.relative(assetPath, from: dir.directory);
- return dir.server.then((server) =>
- server.url.resolveUri(path.toUri(relativePath)));
+ return dir.server.then(
+ (server) => server.url.resolveUri(path.toUri(relativePath)));
}));
}
@@ -365,8 +452,8 @@ class AssetEnvironment {
if (components.first != "packages") return new Future.value([]);
if (!graph.packages.containsKey(components[1])) return new Future.value([]);
return Future.wait(_directories.values.map((dir) {
- return dir.server.then((server) =>
- server.url.resolveUri(path.toUri(assetPath)));
+ return dir.server.then(
+ (server) => server.url.resolveUri(path.toUri(assetPath)));
}));
}
@@ -380,11 +467,11 @@ class AssetEnvironment {
var uri;
if (path.isWithin(libDir, assetPath)) {
- uri = path.toUri(path.join('packages', package.name,
- path.relative(assetPath, from: libDir)));
+ uri = path.toUri(
+ path.join('packages', package.name, path.relative(assetPath, from: libDir)));
} else if (path.isWithin(assetDir, assetPath)) {
- uri = path.toUri(path.join('assets', package.name,
- path.relative(assetPath, from: assetDir)));
+ uri = path.toUri(
+ path.join('assets', package.name, path.relative(assetPath, from: assetDir)));
} else {
continue;
}
@@ -402,8 +489,8 @@ class AssetEnvironment {
///
/// If no server can serve [url], completes to `null`.
Future<AssetId> getAssetIdForUrl(Uri url) {
- return Future.wait(_directories.values.map((dir) => dir.server))
- .then((servers) {
+ return Future.wait(
+ _directories.values.map((dir) => dir.server)).then((servers) {
var server = servers.firstWhere((server) {
if (server.port != url.port) return false;
return isLoopback(server.address.host) == isLoopback(url.host) ||
@@ -456,86 +543,163 @@ class AssetEnvironment {
/// Returns a [Future] that completes once all inputs and transformers are
/// loaded.
Future _load({Iterable<AssetId> entrypoints, bool useDart2JS}) {
- return log.progress("Initializing barback", () async {
- // If the entrypoint package manually configures the dart2js
- // transformer, don't include it in the built-in transformer list.
- //
- // TODO(nweiz): if/when we support more built-in transformers, make
- // this more general.
- var containsDart2JS = graph.entrypoint.root.pubspec.transformers
- .any((transformers) =>
- transformers.any((config) => config.id.package == '\$dart2js'));
-
- if (!containsDart2JS && useDart2JS) {
- _builtInTransformers.addAll([
- new Dart2JSTransformer(this, mode),
- new DartForwardingTransformer(mode)
- ]);
- }
-
- // Bind a server that we can use to load the transformers.
- var transformerServer = await BarbackServer.bind(this, _hostname, 0);
-
- var errorStream = barback.errors.map((error) {
- // Even most normally non-fatal barback errors should take down pub if
- // they happen during the initial load process.
- if (error is! AssetLoadException) throw error;
-
- log.error(log.red(error.message));
- log.fine(error.stackTrace.terse);
- });
-
- await _withStreamErrors(() {
- return log.progress("Loading source assets", _provideSources);
- }, [errorStream, barback.results]);
-
- log.fine("Provided sources.");
-
- errorStream = barback.errors.map((error) {
- // Now that we're loading transformers, errors they log shouldn't be
- // fatal, since we're starting to run them on real user assets which
- // may have e.g. syntax errors. If an error would cause a transformer
- // to fail to load, the load failure will cause us to exit.
- if (error is! TransformerException) throw error;
-
- var message = error.error.toString();
- if (error.stackTrace != null) {
- message += "\n" + error.stackTrace.terse.toString();
+ return log.progress("Initializing barback", () {
+ final completer0 = new Completer();
+ scheduleMicrotask(() {
+ try {
+ var containsDart2JS =
+ graph.entrypoint.root.pubspec.transformers.any(((transformers) {
+ return transformers.any(
+ (config) => config.id.package == '\$dart2js');
+ }));
+ join0() {
+ new Future.value(BarbackServer.bind(this, _hostname, 0)).then((x0) {
+ try {
+ var transformerServer = x0;
+ var errorStream = barback.errors.map(((error) {
+ if (error is! AssetLoadException) throw error;
+ log.error(log.red(error.message));
+ log.fine(error.stackTrace.terse);
+ }));
+ new Future.value(_withStreamErrors((() {
+ return log.progress("Loading source assets", _provideSources);
+ }), [errorStream, barback.results])).then((x1) {
+ try {
+ x1;
+ log.fine("Provided sources.");
+ errorStream = barback.errors.map(((error) {
+ if (error is! TransformerException) throw error;
+ var message = error.error.toString();
+ if (error.stackTrace != null) {
+ message += "\n" + error.stackTrace.terse.toString();
+ }
+ _log(
+ new LogEntry(
+ error.transform,
+ error.transform.primaryId,
+ LogLevel.ERROR,
+ message,
+ null));
+ }));
+ new Future.value(_withStreamErrors((() {
+ final completer0 = new Completer();
+ scheduleMicrotask(() {
+ try {
+ completer0.complete(
+ log.progress("Loading transformers", (() {
+ final completer0 = new Completer();
+ scheduleMicrotask(() {
+ try {
+ new Future.value(
+ loadAllTransformers(
+ this,
+ transformerServer,
+ entrypoints: entrypoints)).then((x0) {
+ try {
+ x0;
+ transformerServer.close();
+ completer0.complete();
+ } catch (e0, s0) {
+ completer0.completeError(e0, s0);
+ }
+ }, onError: completer0.completeError);
+ } catch (e, s) {
+ completer0.completeError(e, s);
+ }
+ });
+ return completer0.future;
+ }), fine: true));
+ } catch (e, s) {
+ completer0.completeError(e, s);
+ }
+ });
+ return completer0.future;
+ }),
+ [errorStream, barback.results, transformerServer.results])).then((x2) {
+ try {
+ x2;
+ completer0.complete();
+ } catch (e0, s0) {
+ completer0.completeError(e0, s0);
+ }
+ }, onError: completer0.completeError);
+ } catch (e1, s1) {
+ completer0.completeError(e1, s1);
+ }
+ }, onError: completer0.completeError);
+ } catch (e2, s2) {
+ completer0.completeError(e2, s2);
+ }
+ }, onError: completer0.completeError);
+ }
+ if (!containsDart2JS && useDart2JS) {
+ _builtInTransformers.addAll(
+ [new Dart2JSTransformer(this, mode), new DartForwardingTransformer(mode)]);
+ join0();
+ } else {
+ join0();
+ }
+ } catch (e, s) {
+ completer0.completeError(e, s);
}
-
- _log(new LogEntry(error.transform, error.transform.primaryId,
- LogLevel.ERROR, message, null));
});
-
- await _withStreamErrors(() async {
- return log.progress("Loading transformers", () async {
- await loadAllTransformers(this, transformerServer,
- entrypoints: entrypoints);
- transformerServer.close();
- }, fine: true);
- }, [errorStream, barback.results, transformerServer.results]);
+ return completer0.future;
}, fine: true);
}
/// Provides the public source assets in the environment to barback.
///
/// If [watcherType] is not [WatcherType.NONE], enables watching on them.
- Future _provideSources() async {
- // Just include the "lib" directory from each package. We'll add the
- // other build directories in the root package by calling
- // [serveDirectory].
- await Future.wait(graph.packages.values.map((package) async {
- if (graph.isPackageStatic(package.name)) return;
- await _provideDirectorySources(package, "lib");
- }));
+ Future _provideSources() {
+ final completer0 = new Completer();
+ scheduleMicrotask(() {
+ try {
+ new Future.value(Future.wait(graph.packages.values.map(((package) {
+ final completer0 = new Completer();
+ scheduleMicrotask(() {
+ try {
+ join0() {
+ new Future.value(
+ _provideDirectorySources(package, "lib")).then((x0) {
+ try {
+ x0;
+ completer0.complete();
+ } catch (e0, s0) {
+ completer0.completeError(e0, s0);
+ }
+ }, onError: completer0.completeError);
+ }
+ if (graph.isPackageStatic(package.name)) {
+ completer0.complete(null);
+ } else {
+ join0();
+ }
+ } catch (e, s) {
+ completer0.completeError(e, s);
+ }
+ });
+ return completer0.future;
+ })))).then((x0) {
+ try {
+ x0;
+ completer0.complete();
+ } catch (e0, s0) {
+ completer0.completeError(e0, s0);
+ }
+ }, onError: completer0.completeError);
+ } catch (e, s) {
+ completer0.completeError(e, s);
+ }
+ });
+ return completer0.future;
}
/// Provides all of the source assets within [dir] in [package] to barback.
///
/// If [watcherType] is not [WatcherType.NONE], enables watching on them.
/// Returns the subscription to the watcher, or `null` if none was created.
- Future<StreamSubscription<WatchEvent>> _provideDirectorySources(
- Package package, String dir) {
+ Future<StreamSubscription<WatchEvent>>
+ _provideDirectorySources(Package package, String dir) {
log.fine("Providing sources for ${package.name}|$dir.");
// TODO(rnystrom): Handle overlapping directories. If two served
// directories overlap like so:
@@ -603,8 +767,8 @@ class AssetEnvironment {
/// Adds a file watcher for [dir] within [package], if the directory exists
/// and the package needs watching.
- Future<StreamSubscription<WatchEvent>> _watchDirectorySources(
- Package package, String dir) {
+ Future<StreamSubscription<WatchEvent>> _watchDirectorySources(Package package,
+ String dir) {
// If this package comes from a cached source, its contents won't change so
// we don't need to monitor it. `packageId` will be null for the
// application package, since that's not locked.
@@ -665,8 +829,8 @@ class AssetEnvironment {
/// running.
Future _withStreamErrors(Future futureCallback(), List<Stream> streams) {
var completer = new Completer.sync();
- var subscriptions = streams.map((stream) =>
- stream.listen((_) {}, onError: completer.completeError)).toList();
+ var subscriptions = streams.map(
+ (stream) => stream.listen((_) {}, onError: completer.completeError)).toList();
new Future.sync(futureCallback).then((_) {
if (!completer.isCompleted) completer.complete();
@@ -693,7 +857,7 @@ void _log(LogEntry entry) {
messageMentionsAsset(id) =>
messageMentions(id.toString()) ||
- messageMentions(path.fromUri(entry.assetId.path));
+ messageMentions(path.fromUri(entry.assetId.path));
var prefixParts = [];
@@ -773,8 +937,7 @@ abstract class WatcherType {
class _AutoWatcherType implements WatcherType {
const _AutoWatcherType();
- DirectoryWatcher create(String directory) =>
- new DirectoryWatcher(directory);
+ DirectoryWatcher create(String directory) => new DirectoryWatcher(directory);
String toString() => "auto";
}
@@ -783,7 +946,7 @@ class _PollingWatcherType implements WatcherType {
const _PollingWatcherType();
DirectoryWatcher create(String directory) =>
- new PollingDirectoryWatcher(directory);
+ new PollingDirectoryWatcher(directory);
String toString() => "polling";
}

Powered by Google App Engine
This is Rietveld 408576698