Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | |
| 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. | |
| 4 | |
| 5 /** | |
| 6 * The main entrypoint for the pub command line application. | |
| 7 */ | |
| 8 #library('pub'); | |
| 9 | |
| 10 #import('utils.dart'); | |
| 11 | |
| 12 List<String, PubCommand> commands; | |
| 13 | |
| 14 main() { | |
| 15 final args = new Options().arguments; | |
| 16 | |
| 17 // TODO(rnystrom): In addition to explicit "help" and "version" commands, | |
| 18 // should also add special-case support for --help and --version arguments to | |
| 19 // be consistent with other Unix apps. | |
| 20 commands = { | |
| 21 'version': new PubCommand('print Pub version', showVersion) | |
| 22 }; | |
| 23 | |
| 24 if (args.length == 0) { | |
| 25 showUsage(); | |
| 26 return; | |
| 27 } | |
| 28 | |
| 29 // Select the command. | |
| 30 final command = commands[args[0]]; | |
| 31 if (command == null) { | |
| 32 print('Unknown command "${args[0]}".'); | |
| 33 print('Run "pub help" to see available commands.'); | |
| 34 exit(64); // see http://www.freebsd.org/cgi/man.cgi?query=sysexits. | |
|
kasperl
2012/04/11 07:17:03
see -> See
Bob Nystrom
2012/04/11 16:50:23
Done (in a forthcoming patch).
| |
| 35 return; | |
| 36 } | |
| 37 | |
| 38 args.removeRange(0, 1); | |
| 39 command.function(args); | |
| 40 } | |
| 41 | |
| 42 /** Displays usage information for the app. */ | |
| 43 void showUsage() { | |
| 44 print('Pub is a package manager for Dart.'); | |
|
kasperl
2012/04/11 07:17:03
Wouldn't this be nicer in a multiline string const
Bob Nystrom
2012/04/11 16:50:23
I did that at first, but the problem is multiline
| |
| 45 print(''); | |
| 46 print('Usage:'); | |
| 47 print(''); | |
| 48 print(' pub command [arguments]'); | |
| 49 print(''); | |
| 50 print('The commands are:'); | |
| 51 print(''); | |
| 52 | |
| 53 // Show the commands sorted. | |
| 54 // TODO(rnystrom): A sorted map would be nice. | |
| 55 int length = 0; | |
| 56 final names = <String>[]; | |
| 57 for (final command in commands.getKeys()) { | |
| 58 length = Math.max(length, command.length); | |
| 59 names.add(command); | |
| 60 } | |
| 61 | |
| 62 names.sort((a, b) => a.compareTo(b)); | |
| 63 | |
| 64 for (final name in names) { | |
| 65 print(' ${padRight(name, length)} ${commands[name].description}'); | |
| 66 } | |
| 67 | |
| 68 print(''); | |
| 69 print('Use "pub help [command]" for more information about a command.'); | |
| 70 } | |
| 71 | |
| 72 /** Displays pub version information. */ | |
| 73 void showVersion(List<String> args) { | |
| 74 // TODO(rnystrom): Store some place central. | |
| 75 print('Pub 0.0.0'); | |
| 76 } | |
| 77 | |
| 78 typedef void CommandFunction(List<String> args); | |
| 79 | |
| 80 class PubCommand { | |
| 81 final String description; | |
| 82 final CommandFunction function; | |
| 83 | |
| 84 PubCommand(this.description, this.function); | |
| 85 } | |
| OLD | NEW |