Index: sdk/lib/_internal/pub_generated/lib/src/entrypoint.dart |
diff --git a/sdk/lib/_internal/pub_generated/lib/src/entrypoint.dart b/sdk/lib/_internal/pub_generated/lib/src/entrypoint.dart |
index 128734492b88ebeba577699ddaed802bde3db276..3f15c401d7fed3194a882f2723c29217e2c0b63b 100644 |
--- a/sdk/lib/_internal/pub_generated/lib/src/entrypoint.dart |
+++ b/sdk/lib/_internal/pub_generated/lib/src/entrypoint.dart |
@@ -40,40 +40,251 @@ class Entrypoint { |
String get lockFilePath => path.join(root.dir, 'pubspec.lock'); |
Future acquireDependencies(SolveType type, {List<String> useLatest, |
bool dryRun: false}) { |
- return syncFuture(() { |
- return resolveVersions( |
- type, |
- cache.sources, |
- root, |
- lockFile: lockFile, |
- useLatest: useLatest); |
- }).then((result) { |
- if (!result.succeeded) throw result.error; |
- result.showReport(type); |
- if (dryRun) { |
- result.summarizeChanges(type, dryRun: dryRun); |
- return null; |
+ final completer0 = new Completer(); |
+ scheduleMicrotask(() { |
+ try { |
+ resolveVersions( |
+ type, |
+ cache.sources, |
+ root, |
+ lockFile: lockFile, |
+ useLatest: useLatest).then((x0) { |
+ try { |
+ var result = x0; |
+ join0() { |
+ result.showReport(type); |
+ join1() { |
+ join2() { |
+ Future.wait(result.packages.map(_get)).then((x1) { |
+ try { |
+ var ids = x1; |
+ _saveLockFile(ids); |
+ join3() { |
+ _linkOrDeleteSecondaryPackageDirs(); |
+ result.summarizeChanges(type, dryRun: dryRun); |
+ loadPackageGraph(result).then((x2) { |
+ try { |
+ var packageGraph = x2; |
+ packageGraph.loadTransformerCache().clearIfOutdated( |
+ result.changedPackages); |
+ completer0.complete( |
+ precompileDependencies(changed: result.changedPackages).then(((_) { |
+ return precompileExecutables( |
+ changed: result.changedPackages); |
+ })).catchError(((error, stackTrace) { |
+ log.exception(error, stackTrace); |
+ }))); |
+ } catch (e2) { |
+ completer0.completeError(e2); |
+ } |
+ }, onError: (e3) { |
+ completer0.completeError(e3); |
+ }); |
+ } |
+ if (_packageSymlinks) { |
+ _linkSelf(); |
+ join3(); |
+ } else { |
+ join3(); |
+ } |
+ } catch (e1) { |
+ completer0.completeError(e1); |
+ } |
+ }, onError: (e4) { |
+ completer0.completeError(e4); |
+ }); |
+ } |
+ if (_packageSymlinks) { |
+ cleanDir(packagesDir); |
+ join2(); |
+ } else { |
+ deleteEntry(packagesDir); |
+ join2(); |
+ } |
+ } |
+ if (dryRun) { |
+ result.summarizeChanges(type, dryRun: dryRun); |
+ completer0.complete(null); |
+ } else { |
+ join1(); |
+ } |
+ } |
+ if (!result.succeeded) { |
+ completer0.completeError(result.error); |
+ } else { |
+ join0(); |
+ } |
+ } catch (e0) { |
+ completer0.completeError(e0); |
+ } |
+ }, onError: (e5) { |
+ completer0.completeError(e5); |
+ }); |
+ } catch (e6) { |
+ completer0.completeError(e6); |
} |
- if (_packageSymlinks) { |
- cleanDir(packagesDir); |
- } else { |
- deleteEntry(packagesDir); |
+ }); |
+ return completer0.future; |
+ } |
+ Future precompileDependencies({Iterable<String> changed}) { |
+ final completer0 = new Completer(); |
+ scheduleMicrotask(() { |
+ try { |
+ join0() { |
+ loadPackageGraph().then((x0) { |
+ try { |
+ var graph = x0; |
+ var depsDir = path.join('.pub', 'deps', 'debug'); |
+ var dependenciesToPrecompile = |
+ graph.packages.values.where(((package) { |
+ if (package.pubspec.transformers.isEmpty) return false; |
+ if (graph.isPackageMutable(package.name)) return false; |
+ if (!dirExists(path.join(depsDir, package.name))) return true; |
+ if (changed == null) return true; |
+ return overlaps( |
+ graph.transitiveDependencies( |
+ package.name).map((package) => package.name).toSet(), |
+ changed); |
+ })).map(((package) => package.name)).toSet(); |
+ log.fine( |
+ "dependencies to precompile: ${dependenciesToPrecompile}"); |
+ log.fine("changed: ${changed}"); |
+ join1() { |
+ log.progress("Precompiling dependencies", (() { |
+ final completer0 = new Completer(); |
+ scheduleMicrotask(() { |
+ try { |
+ var packagesToLoad = unionAll( |
+ dependenciesToPrecompile.map( |
+ graph.transitiveDependencies)).map(((package) => package.name)).toSet(); |
+ AssetEnvironment.create( |
+ this, |
+ BarbackMode.DEBUG, |
+ packages: packagesToLoad, |
+ useDart2JS: false).then((x0) { |
+ try { |
+ var environment = x0; |
+ environment.barback.errors.listen(((_) {})); |
+ var it0 = dependenciesToPrecompile.iterator; |
+ break0(x4) { |
+ environment.barback.getAllAssets().then((x1) { |
+ try { |
+ var assets = x1; |
+ waitAndPrintErrors(assets.map(((asset) { |
+ final completer0 = new Completer(); |
+ scheduleMicrotask(() { |
+ try { |
+ join0() { |
+ var destPath = |
+ path.join(depsDir, asset.id.package, path.fromUri(asset.id.path)); |
+ ensureDir(path.dirname(destPath)); |
+ createFileFromStream( |
+ asset.read(), |
+ destPath).then((x0) { |
+ try { |
+ x0; |
+ completer0.complete(null); |
+ } catch (e0) { |
+ completer0.completeError(e0); |
+ } |
+ }, onError: (e1) { |
+ completer0.completeError(e1); |
+ }); |
+ } |
+ if (!dependenciesToPrecompile.contains( |
+ asset.id.package)) { |
+ completer0.complete(null); |
+ } else { |
+ join0(); |
+ } |
+ } catch (e2) { |
+ completer0.completeError(e2); |
+ } |
+ }); |
+ return completer0.future; |
+ }))).then((x2) { |
+ try { |
+ x2; |
+ log.message( |
+ "Precompiled " + |
+ toSentence(ordered(dependenciesToPrecompile).map(log.bold)) + |
+ "."); |
+ completer0.complete(null); |
+ } catch (e2) { |
+ completer0.completeError(e2); |
+ } |
+ }, onError: (e3) { |
+ completer0.completeError(e3); |
+ }); |
+ } catch (e1) { |
+ completer0.completeError(e1); |
+ } |
+ }, onError: (e4) { |
+ completer0.completeError(e4); |
+ }); |
+ } |
+ continue0(x5) { |
+ if (it0.moveNext()) { |
+ Future.wait([]).then((x3) { |
+ var package = it0.current; |
+ cleanDir(path.join(depsDir, package)); |
+ continue0(null); |
+ }); |
+ } else { |
+ break0(null); |
+ } |
+ } |
+ continue0(null); |
+ } catch (e0) { |
+ completer0.completeError(e0); |
+ } |
+ }, onError: (e5) { |
+ completer0.completeError(e5); |
+ }); |
+ } catch (e6) { |
+ completer0.completeError(e6); |
+ } |
+ }); |
+ return completer0.future; |
+ })).catchError(((error) { |
+ for (var package in dependenciesToPrecompile) { |
+ deleteEntry(path.join(depsDir, package)); |
+ } |
+ throw error; |
+ })).then((x1) { |
+ try { |
+ x1; |
+ completer0.complete(null); |
+ } catch (e1) { |
+ completer0.completeError(e1); |
+ } |
+ }, onError: (e2) { |
+ completer0.completeError(e2); |
+ }); |
+ } |
+ if (dependenciesToPrecompile.isEmpty) { |
+ completer0.complete(null); |
+ } else { |
+ join1(); |
+ } |
+ } catch (e0) { |
+ completer0.completeError(e0); |
+ } |
+ }, onError: (e3) { |
+ completer0.completeError(e3); |
+ }); |
+ } |
+ if (changed != null) { |
+ changed = changed.toSet(); |
+ join0(); |
+ } else { |
+ join0(); |
+ } |
+ } catch (e4) { |
+ completer0.completeError(e4); |
} |
- return Future.wait(result.packages.map(_get)).then((ids) { |
- _saveLockFile(ids); |
- if (_packageSymlinks) _linkSelf(); |
- _linkOrDeleteSecondaryPackageDirs(); |
- result.summarizeChanges(type, dryRun: dryRun); |
- return loadPackageGraph(result); |
- }).then((packageGraph) { |
- packageGraph.loadTransformerCache().clearIfOutdated( |
- result.changedPackages); |
- return precompileExecutables( |
- changed: result.changedPackages).catchError((error, stackTrace) { |
- log.exception(error, stackTrace); |
- }); |
- }); |
}); |
+ return completer0.future; |
} |
Future precompileExecutables({Iterable<String> changed}) { |
if (changed != null) changed = changed.toSet(); |
@@ -124,15 +335,11 @@ class Entrypoint { |
var package = graph.packages[packageName]; |
var binDir = path.join(package.dir, 'bin'); |
if (!dirExists(binDir)) return []; |
- var deps = graph.transitiveDependencies(packageName); |
- var hasUncachedDependency = deps.any((package) { |
- var source = cache.sources[graph.lockFile.packages[package.name].source]; |
- return source is! CachedSource; |
- }); |
- if (hasUncachedDependency) return []; |
+ if (graph.isPackageMutable(packageName)) return []; |
var executables = package.executableIds; |
if (changed == null) return executables; |
- if (deps.any((package) => changed.contains(package.name))) { |
+ if (graph.transitiveDependencies( |
+ packageName).any((package) => changed.contains(package.name))) { |
return executables; |
} |
var executablesExist = executables.every( |