Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library pub.command; | 5 library pub.command; |
| 6 | 6 |
| 7 import 'dart:async'; | |
| 7 import 'dart:io'; | 8 import 'dart:io'; |
| 8 import 'dart:async'; | 9 import 'dart:math' as math; |
| 9 | 10 |
| 10 import 'package:args/args.dart'; | 11 import 'package:args/args.dart'; |
| 11 import 'package:path/path.dart' as path; | 12 import 'package:path/path.dart' as path; |
| 12 import 'package:stack_trace/stack_trace.dart'; | 13 import 'package:stack_trace/stack_trace.dart'; |
| 13 | 14 |
| 14 import 'command/build.dart'; | 15 import 'command/build.dart'; |
| 15 import 'command/cache.dart'; | 16 import 'command/cache.dart'; |
| 16 import 'command/get.dart'; | 17 import 'command/get.dart'; |
| 17 import 'command/help.dart'; | 18 import 'command/help.dart'; |
| 18 import 'command/lish.dart'; | 19 import 'command/lish.dart'; |
| 19 import 'command/list_package_dirs.dart'; | 20 import 'command/list_package_dirs.dart'; |
| 20 import 'command/serve.dart'; | 21 import 'command/serve.dart'; |
| 21 import 'command/upgrade.dart'; | 22 import 'command/upgrade.dart'; |
| 22 import 'command/uploader.dart'; | 23 import 'command/uploader.dart'; |
| 23 import 'command/version.dart'; | 24 import 'command/version.dart'; |
| 24 import 'entrypoint.dart'; | 25 import 'entrypoint.dart'; |
| 25 import 'exit_codes.dart' as exit_codes; | 26 import 'exit_codes.dart' as exit_codes; |
| 26 import 'http.dart'; | 27 import 'http.dart'; |
| 27 import 'io.dart'; | 28 import 'io.dart'; |
| 28 import 'log.dart' as log; | 29 import 'log.dart' as log; |
| 29 import 'system_cache.dart'; | 30 import 'system_cache.dart'; |
| 30 import 'utils.dart'; | 31 import 'utils.dart'; |
| 31 | 32 |
| 32 /// The base class for commands for the pub executable. | 33 /// The base class for commands for the pub executable. |
| 33 abstract class PubCommand { | 34 abstract class PubCommand { |
| 34 /// The commands that pub understands. | 35 /// The commands that pub understands. |
| 35 static final Map<String, PubCommand> commands = _initCommands(); | 36 static final Map<String, PubCommand> commands = _initCommands(); |
| 36 | 37 |
| 38 /// The top-level [ArgParser] used to parse the pub command line. | |
| 39 static final pubArgParser = _initArgParser(); | |
| 40 | |
| 41 /// Displays usage information for the app. | |
| 42 static void printGlobalUsage() { | |
| 43 // Build up a buffer so it shows up as a single log entry. | |
| 44 var buffer = new StringBuffer(); | |
| 45 buffer.writeln('Pub is a package manager for Dart.'); | |
| 46 buffer.writeln(); | |
| 47 buffer.writeln('Usage: pub command [arguments]'); | |
| 48 buffer.writeln(); | |
| 49 buffer.writeln('Global options:'); | |
| 50 buffer.writeln('${pubArgParser.getUsage()}'); | |
|
nweiz
2014/01/06 23:43:20
'${}' is unnecessary here.
Bob Nystrom
2014/01/07 19:37:05
Done.
| |
| 51 buffer.writeln(); | |
| 52 | |
| 53 // Show the public commands alphabetically. | |
| 54 var names = ordered(commands.keys.where((name) => | |
| 55 !commands[name].aliases.contains(name) && | |
| 56 !commands[name].hidden)); | |
| 57 | |
| 58 var length = names.map((name) => name.length).reduce(math.max); | |
| 59 | |
| 60 buffer.writeln('Available commands:'); | |
| 61 for (var name in names) { | |
| 62 buffer.writeln(' ${padRight(name, length)} ' | |
| 63 '${commands[name].description}'); | |
| 64 } | |
| 65 | |
| 66 buffer.writeln(); | |
| 67 buffer.write( | |
| 68 'Use "pub help [command]" for more information about a command.'); | |
| 69 log.message(buffer.toString()); | |
| 70 } | |
| 71 | |
| 37 SystemCache cache; | 72 SystemCache cache; |
| 38 | 73 |
| 39 /// The parsed options for this command. | 74 /// The parsed options for this command. |
| 40 ArgResults commandOptions; | 75 ArgResults commandOptions; |
| 41 | 76 |
| 42 Entrypoint entrypoint; | 77 Entrypoint entrypoint; |
| 43 | 78 |
| 44 /// A one-line description of this command. | 79 /// A one-line description of this command. |
| 45 String get description; | 80 String get description; |
| 46 | 81 |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 204 }; | 239 }; |
| 205 | 240 |
| 206 for (var command in commands.values.toList()) { | 241 for (var command in commands.values.toList()) { |
| 207 for (var alias in command.aliases) { | 242 for (var alias in command.aliases) { |
| 208 commands[alias] = command; | 243 commands[alias] = command; |
| 209 } | 244 } |
| 210 } | 245 } |
| 211 | 246 |
| 212 return commands; | 247 return commands; |
| 213 } | 248 } |
| 249 | |
| 250 /// Creates the top-level [ArgParser] used to parse the pub command line. | |
| 251 ArgParser _initArgParser() { | |
| 252 var argParser = new ArgParser(); | |
| 253 | |
| 254 // Add the global options. | |
| 255 argParser.addFlag('help', abbr: 'h', negatable: false, | |
| 256 help: 'Print this usage information.'); | |
| 257 argParser.addFlag('version', negatable: false, | |
| 258 help: 'Print pub version.'); | |
| 259 argParser.addFlag('trace', | |
| 260 help: 'Print debugging information when an error occurs.'); | |
| 261 argParser.addOption('verbosity', | |
| 262 help: 'Control output verbosity.', | |
| 263 allowed: ['normal', 'io', 'solver', 'all'], | |
| 264 allowedHelp: { | |
| 265 'normal': 'Show errors, warnings, and user messages.', | |
| 266 'io': 'Also show IO operations.', | |
| 267 'solver': 'Show steps during version resolution.', | |
| 268 'all': 'Show all output including internal tracing messages.' | |
| 269 }); | |
| 270 argParser.addFlag('verbose', abbr: 'v', negatable: false, | |
| 271 help: 'Shortcut for "--verbosity=all".'); | |
| 272 | |
| 273 // Register the commands. | |
| 274 PubCommand.commands.forEach((name, command) { | |
| 275 argParser.addCommand(name, command.commandParser); | |
| 276 }); | |
| 277 | |
| 278 return argParser; | |
| 279 } | |
| OLD | NEW |