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

Unified Diff: sdk/lib/_internal/pub_generated/lib/src/global_packages.dart

Issue 586173002: Make binstubs run snapshots directly when possible. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Revise! Created 6 years, 3 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/global_packages.dart
diff --git a/sdk/lib/_internal/pub_generated/lib/src/global_packages.dart b/sdk/lib/_internal/pub_generated/lib/src/global_packages.dart
index f3f618af13d842d965113b6a973473bf406e7ea0..95198f60aeafd8722646ec34f2484f7ef06e9b1f 100644
--- a/sdk/lib/_internal/pub_generated/lib/src/global_packages.dart
+++ b/sdk/lib/_internal/pub_generated/lib/src/global_packages.dart
@@ -36,13 +36,11 @@ class GlobalPackages {
var name = x0;
_describeActive(name);
_installInCache(
- new PackageDep(name, "git", VersionConstraint.any, repo)).then((x1) {
+ new PackageDep(name, "git", VersionConstraint.any, repo),
+ executables,
+ overwriteBinStubs: overwriteBinStubs).then((x1) {
try {
- var package = x1;
- _updateBinStubs(
- package,
- executables,
- overwriteBinStubs: overwriteBinStubs);
+ x1;
completer0.complete(null);
} catch (e1) {
completer0.completeError(e1);
@@ -69,13 +67,11 @@ class GlobalPackages {
try {
_describeActive(name);
_installInCache(
- new PackageDep(name, "hosted", constraint, name)).then((x0) {
+ new PackageDep(name, "hosted", constraint, name),
+ executables,
+ overwriteBinStubs: overwriteBinStubs).then((x0) {
try {
- var package = x0;
- _updateBinStubs(
- package,
- executables,
- overwriteBinStubs: overwriteBinStubs);
+ x0;
completer0.complete(null);
} catch (e0) {
completer0.completeError(e0);
@@ -133,7 +129,8 @@ class GlobalPackages {
});
return completer0.future;
}
- Future<Package> _installInCache(PackageDep dep) {
+ Future _installInCache(PackageDep dep, List<String> executables,
+ {bool overwriteBinStubs}) {
final completer0 = new Completer();
scheduleMicrotask(() {
try {
@@ -162,9 +159,14 @@ class GlobalPackages {
graph.entrypoint,
dep.name).then((x3) {
try {
- x3;
+ var snapshots = x3;
_writeLockFile(dep.name, lockFile);
- completer0.complete(graph.packages[dep.name]);
+ _updateBinStubs(
+ graph.packages[dep.name],
+ executables,
+ overwriteBinStubs: overwriteBinStubs,
+ snapshots: snapshots);
+ completer0.complete(null);
} catch (e3) {
completer0.completeError(e3);
}
@@ -216,19 +218,36 @@ class GlobalPackages {
});
return completer0.future;
}
- Future _precompileExecutables(Entrypoint entrypoint, String package) {
+ Future<Map<String, String>> _precompileExecutables(Entrypoint entrypoint,
+ String package) {
return log.progress("Precompiling executables", () {
- var binDir = p.join(_directory, package, 'bin');
- cleanDir(binDir);
- return AssetEnvironment.create(
- entrypoint,
- BarbackMode.RELEASE,
- useDart2JS: false).then((environment) {
- environment.barback.errors.listen((error) {
- log.error(log.red("Build error:\n$error"));
- });
- return environment.precompileExecutables(package, binDir);
+ final completer0 = new Completer();
+ scheduleMicrotask(() {
+ try {
+ var binDir = p.join(_directory, package, 'bin');
+ cleanDir(binDir);
+ AssetEnvironment.create(
+ entrypoint,
+ BarbackMode.RELEASE,
+ useDart2JS: false).then((x0) {
+ try {
+ var environment = x0;
+ environment.barback.errors.listen(((error) {
+ log.error(log.red("Build error:\n$error"));
+ }));
+ completer0.complete(
+ environment.precompileExecutables(package, binDir));
+ } catch (e0) {
+ completer0.completeError(e0);
+ }
+ }, onError: (e1) {
+ completer0.completeError(e1);
+ });
+ } catch (e2) {
+ completer0.completeError(e2);
+ }
});
+ return completer0.future;
});
}
Future<PackageId> _cacheDependency(PackageId id) {
@@ -393,7 +412,8 @@ class GlobalPackages {
}
}
void _updateBinStubs(Package package, List<String> executables,
- {bool overwriteBinStubs}) {
+ {bool overwriteBinStubs, Map<String, String> snapshots}) {
+ if (snapshots == null) snapshots = const {};
_deleteBinStubs(package.name);
if ((executables != null && executables.isEmpty) ||
package.pubspec.executables.isEmpty) {
@@ -406,8 +426,12 @@ class GlobalPackages {
for (var executable in allExecutables) {
if (executables != null && !executables.contains(executable)) continue;
var script = package.pubspec.executables[executable];
- var previousPackage =
- _createBinStub(package, executable, script, overwrite: overwriteBinStubs);
+ var previousPackage = _createBinStub(
+ package,
+ executable,
+ script,
+ overwrite: overwriteBinStubs,
+ snapshot: snapshots[script]);
if (previousPackage != null) {
collided[executable] = previousPackage;
if (!overwriteBinStubs) continue;
@@ -457,7 +481,7 @@ class GlobalPackages {
}
}
String _createBinStub(Package package, String executable, String script,
- {bool overwrite}) {
+ {bool overwrite, String snapshot}) {
var binStubPath = p.join(_binStubDir, executable);
var previousPackage;
if (fileExists(binStubPath)) {
@@ -470,6 +494,12 @@ class GlobalPackages {
log.fine("Could not parse binstub $binStubPath:\n$contents");
}
}
+ var invocation;
+ if (snapshot != null) {
+ invocation = 'dart "$snapshot"';
+ } else {
+ invocation = "pub global run ${package.name}:$script";
+ }
if (Platform.operatingSystem == "windows") {
var batch = """
@echo off
@@ -478,7 +508,7 @@ rem Package: ${package.name}
rem Version: ${package.version}
rem Executable: ${executable}
rem Script: ${script}
-pub global run ${package.name}:$script "%*"
+$invocation "%*"
""";
writeTextFile(binStubPath, batch);
} else {
@@ -488,7 +518,7 @@ pub global run ${package.name}:$script "%*"
# Version: ${package.version}
# Executable: ${executable}
# Script: ${script}
-pub global run ${package.name}:$script "\$@"
+$invocation "\$@"
""";
writeTextFile(binStubPath, bash);
var result = Process.runSync('chmod', ['+x', binStubPath]);

Powered by Google App Engine
This is Rietveld 408576698