Index: utils/pub/pub.dart |
diff --git a/utils/pub/pub.dart b/utils/pub/pub.dart |
index dcd76c68c4d8895399ab7c5702362109e6c6775f..db628d03157cdb811e2d28078b7397952053c0fa 100644 |
--- a/utils/pub/pub.dart |
+++ b/utils/pub/pub.dart |
@@ -235,43 +235,34 @@ abstract class PubCommand { |
exit(_chooseExitCode(error)); |
} |
- var future = new Future.immediate(null); |
- if (requiresEntrypoint) { |
- // TODO(rnystrom): Will eventually need better logic to walk up |
- // subdirectories until we hit one that looks package-like. For now, just |
- // assume the cwd is it. |
- future = Entrypoint.load(path.current, cache); |
- } |
- |
- future = future.then((entrypoint) { |
- this.entrypoint = entrypoint; |
- try { |
- var commandFuture = onRun(); |
- if (commandFuture == null) return true; |
+ defer(() { |
+ if (requiresEntrypoint) { |
+ // TODO(rnystrom): Will eventually need better logic to walk up |
+ // subdirectories until we hit one that looks package-like. For now, |
+ // just assume the cwd is it. |
+ entrypoint = new Entrypoint(path.current, cache); |
+ } |
- return commandFuture; |
- } catch (error, trace) { |
- handleError(error, trace); |
+ var commandFuture = onRun(); |
+ if (commandFuture == null) return true; |
+ |
+ return commandFuture; |
+ }).whenComplete(() => cache_.deleteTempDir()).catchError((asyncError) { |
+ var e = asyncError.error; |
+ if (e is PubspecNotFoundException && e.name == null) { |
+ e = 'Could not find a file named "pubspec.yaml" in the directory ' |
+ '${path.current}.'; |
+ } else if (e is PubspecHasNoNameException && e.name == null) { |
+ e = 'pubspec.yaml is missing the required "name" field (e.g. "name: ' |
+ '${basename(path.current)}").'; |
} |
- }); |
- future |
- .then((_) => cache_.deleteTempDir()) |
- .catchError((asyncError) { |
- var e = asyncError.error; |
- if (e is PubspecNotFoundException && e.name == null) { |
- e = 'Could not find a file named "pubspec.yaml" in the directory ' |
- '${path.current}.'; |
- } else if (e is PubspecHasNoNameException && e.name == null) { |
- e = 'pubspec.yaml is missing the required "name" field (e.g. "name: ' |
- '${basename(path.current)}").'; |
- } |
- |
- handleError(e, asyncError.stackTrace); |
- }) |
+ handleError(e, asyncError.stackTrace); |
+ }).then((_) { |
// Explicitly exit on success to ensure that any dangling dart:io handles |
// don't cause the process to never terminate. |
- .then((_) => exit(0)); |
+ exit(0); |
+ }); |
} |
/// Override this to perform the specific command. Return a future that |