Index: utils/pub/pub.dart |
diff --git a/utils/pub/pub.dart b/utils/pub/pub.dart |
index 1daf20d4613c2ffe833b161b393fdf620f8952c8..625b5df2e0a6b71d74bbb8c3b7a46dc8cbc8dfbc 100644 |
--- a/utils/pub/pub.dart |
+++ b/utils/pub/pub.dart |
@@ -18,6 +18,9 @@ import 'command_update.dart'; |
import 'command_version.dart'; |
import 'entrypoint.dart'; |
import 'exit_codes.dart' as exit_codes; |
+import 'git_source.dart'; |
+import 'hosted_source.dart'; |
+import 'log.dart' as log; |
import 'package.dart'; |
import 'pubspec.dart'; |
import 'source.dart'; |
@@ -54,10 +57,21 @@ Map<String, PubCommand> get pubCommands { |
ArgParser get pubArgParser { |
var parser = new ArgParser(); |
parser.addFlag('help', abbr: 'h', negatable: false, |
- help: 'Prints this usage information'); |
+ help: 'print this usage information'); |
parser.addFlag('version', negatable: false, |
- help: 'Prints the version of Pub'); |
- parser.addFlag('trace', help: 'Prints a stack trace when an error occurs'); |
+ help: 'print the version of pub'); |
+ parser.addFlag('trace', |
+ help: 'print debugging information when an error occurs'); |
+ parser.addOption('verbosity', |
+ help: 'control output verbosity', |
+ allowed: ['normal', 'io', 'all'], |
+ allowedHelp: { |
+ 'normal': 'errors, warnings, and user messages are shown', |
+ 'io': 'IO operations are also shown', |
+ 'all': 'all output including internal tracing messages are shown' |
+ }); |
+ parser.addFlag('verbose', abbr: 'v', negatable: false, |
+ help: 'shortcut for "--verbosity=all"'); |
return parser; |
} |
@@ -66,8 +80,8 @@ main() { |
try { |
globalOptions = pubArgParser.parse(new Options().arguments); |
} on FormatException catch (e) { |
- printError(e.message); |
- printError('Run "pub help" to see available options.'); |
+ log.error(e.message); |
+ log.error('Run "pub help" to see available options.'); |
exit(exit_codes.USAGE); |
} |
@@ -81,6 +95,24 @@ main() { |
return; |
} |
+ if (globalOptions['trace']) { |
+ log.recordTranscript(); |
+ } |
+ |
+ switch (globalOptions['verbosity']) { |
+ case 'normal': log.showNormal(); break; |
+ case 'io': log.showIO(); break; |
+ case 'all': log.showAll(); break; |
+ default: |
+ // No specific verbosity given, so check for the shortcut. |
+ if (globalOptions['verbose']) { |
+ log.showAll(); |
+ } else { |
+ log.showNormal(); |
+ } |
+ break; |
+ } |
+ |
// TODO(nweiz): Have a fallback for this this out automatically once 1145 is |
// fixed. |
var sdkDir = Platform.environment['DART_SDK']; |
@@ -99,8 +131,8 @@ main() { |
// Select the command. |
var command = pubCommands[globalOptions.rest[0]]; |
if (command == null) { |
- printError('Could not find a command named "${globalOptions.rest[0]}".'); |
- printError('Run "pub help" to see available commands.'); |
+ log.error('Could not find a command named "${globalOptions.rest[0]}".'); |
+ log.error('Run "pub help" to see available commands.'); |
exit(exit_codes.USAGE); |
return; |
} |
@@ -112,16 +144,16 @@ main() { |
/** Displays usage information for the app. */ |
void printUsage([String description = 'Pub is a package manager for Dart.']) { |
- print(description); |
- print(''); |
- print('Usage: pub command [arguments]'); |
- print(''); |
- print('Global options:'); |
- print(pubArgParser.getUsage()); |
- print(''); |
+ // Build up a buffer so it shows up as a single log entry. |
+ var buffer = new StringBuffer(); |
+ buffer.add(description); |
+ buffer.add('\n\n'); |
+ buffer.add('Usage: pub command [arguments]\n\n'); |
+ buffer.add('Global options:\n'); |
+ buffer.add('${pubArgParser.getUsage()}\n\n'); |
// Show the commands sorted. |
- print('Available commands:'); |
+ buffer.add('Available commands:\n'); |
// TODO(rnystrom): A sorted map would be nice. |
int length = 0; |
@@ -136,15 +168,17 @@ void printUsage([String description = 'Pub is a package manager for Dart.']) { |
names.sort((a, b) => a.compareTo(b)); |
for (var name in names) { |
- print(' ${padRight(name, length)} ${pubCommands[name].description}'); |
+ buffer.add(' ${padRight(name, length)} ' |
+ '${pubCommands[name].description}\n'); |
} |
- print(''); |
- print('Use "pub help [command]" for more information about a command.'); |
+ buffer.add('\n'); |
+ buffer.add('Use "pub help [command]" for more information about a command.'); |
+ log.message(buffer.toString()); |
} |
void printVersion() { |
- print('Pub $pubVersion'); |
+ log.message('Pub $pubVersion'); |
} |
abstract class PubCommand { |
@@ -187,8 +221,8 @@ abstract class PubCommand { |
try { |
commandOptions = commandParser.parse(commandArgs); |
} on FormatException catch (e) { |
- printError(e.message); |
- printError('Use "pub help" for more information.'); |
+ log.error(e.message); |
+ log.error('Use "pub help" for more information.'); |
exit(exit_codes.USAGE); |
} |
@@ -203,9 +237,10 @@ abstract class PubCommand { |
message = message.substring("Exception: ".length); |
} |
- printError(message); |
+ log.error(message); |
if (globalOptions['trace'] && trace != null) { |
- printError(trace); |
+ log.error(trace); |
+ log.dumpTranscript(); |
} |
exit(_chooseExitCode(error)); |
@@ -261,14 +296,14 @@ abstract class PubCommand { |
/** Displays usage information for this command. */ |
void printUsage([String description]) { |
if (description == null) description = this.description; |
- print(description); |
- print(''); |
- print('Usage: $usage'); |
+ log.message(description); |
+ log.message(''); |
+ log.message('Usage: $usage'); |
var commandUsage = commandParser.getUsage(); |
if (!commandUsage.isEmpty) { |
- print(''); |
- print(commandUsage); |
+ log.message(''); |
+ log.message(commandUsage); |
} |
} |