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

Unified Diff: sdk/lib/_internal/pub/lib/src/command.dart

Issue 113453005: Add stack chain support to pub. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years 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/lib/src/command.dart
diff --git a/sdk/lib/_internal/pub/lib/src/command.dart b/sdk/lib/_internal/pub/lib/src/command.dart
index 221bc4536bb4696d639e2c823a730bf668e6b6dc..5e0229cd1b95d908d856031e8d8ca8941dbbf89b 100644
--- a/sdk/lib/_internal/pub/lib/src/command.dart
+++ b/sdk/lib/_internal/pub/lib/src/command.dart
@@ -88,19 +88,17 @@ abstract class PubCommand {
cache = new SystemCache.withSources(cacheDir, isOffline: isOffline);
- handleError(error, trace) {
+ handleError(error, Chain chain) {
// This is basically the top-level exception handler so that we don't
// spew a stack trace on our users.
var message;
log.error(getErrorMessage(error));
- if (trace != null) {
- if (options['trace'] || !isUserFacingException(error)) {
- log.error(new Trace.from(trace).terse);
- } else {
- log.fine(new Trace.from(trace).terse);
- }
+ if (options['trace'] || !isUserFacingException(error)) {
+ log.error(chain.terse);
+ } else {
+ log.fine(chain.terse);
}
if (error is ApplicationException && error.innerError != null) {
@@ -124,28 +122,31 @@ and include the results in a bug report on http://dartbug.com/new.
return flushThenExit(_chooseExitCode(error));
}
- new Future.sync(() {
- // Make sure there aren't unexpected arguments.
- if (!takesArguments && commandOptions.rest.isNotEmpty) {
- log.error('Command "${commandOptions.name}" does not take any '
- 'arguments.');
- this.printUsage();
- return flushThenExit(exit_codes.USAGE);
- }
+ var captureStackChains =
+ options['trace'] || options['verbose'] || options['verbosity'] == 'all';
+ captureErrors(() {
+ return syncFuture(() {
+ // Make sure there aren't unexpected arguments.
+ if (!takesArguments && commandOptions.rest.isNotEmpty) {
+ log.error('Command "${commandOptions.name}" does not take any '
+ 'arguments.');
+ this.printUsage();
+ return flushThenExit(exit_codes.USAGE);
+ }
- 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);
- }
+ 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);
+ }
- var commandFuture = onRun();
- if (commandFuture == null) return true;
+ var commandFuture = onRun();
+ if (commandFuture == null) return true;
- return commandFuture;
- }).whenComplete(() => cache.deleteTempDir())
- .catchError(handleError)
+ return commandFuture;
+ }).whenComplete(() => cache.deleteTempDir());
+ }, captureStackChains: captureStackChains).catchError(handleError)
.then((_) {
// Explicitly exit on success to ensure that any dangling dart:io handles
// don't cause the process to never terminate.

Powered by Google App Engine
This is Rietveld 408576698