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

Side by Side Diff: sdk/lib/_internal/pub/bin/pub.dart

Issue 122483003: Make "pub help" show global help. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 11 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:io'; 6 import 'dart:io';
7 import 'dart:math' as math;
8 7
9 import 'package:args/args.dart'; 8 import 'package:args/args.dart';
10 import 'package:path/path.dart' as path; 9 import 'package:path/path.dart' as path;
11 10
12 import '../lib/src/command.dart'; 11 import '../lib/src/command.dart';
13 import '../lib/src/exit_codes.dart' as exit_codes; 12 import '../lib/src/exit_codes.dart' as exit_codes;
14 import '../lib/src/io.dart'; 13 import '../lib/src/io.dart';
15 import '../lib/src/log.dart' as log; 14 import '../lib/src/log.dart' as log;
16 import '../lib/src/sdk.dart' as sdk; 15 import '../lib/src/sdk.dart' as sdk;
17 import '../lib/src/utils.dart'; 16 import '../lib/src/utils.dart';
18 17
19 final pubArgParser = initArgParser();
20
21 void main(List<String> arguments) { 18 void main(List<String> arguments) {
22 ArgResults options; 19 ArgResults options;
23 20
24 try { 21 try {
25 options = pubArgParser.parse(arguments); 22 options = PubCommand.pubArgParser.parse(arguments);
26 } on FormatException catch (e) { 23 } on FormatException catch (e) {
27 log.error(e.message); 24 log.error(e.message);
28 log.error('Run "pub help" to see available options.'); 25 log.error('Run "pub help" to see available options.');
29 flushThenExit(exit_codes.USAGE); 26 flushThenExit(exit_codes.USAGE);
30 return; 27 return;
31 } 28 }
32 29
33 if (options['version']) { 30 if (options['version']) {
34 log.message('Pub ${sdk.version}'); 31 log.message('Pub ${sdk.version}');
35 return; 32 return;
36 } 33 }
37 34
38 if (options['help']) { 35 if (options['help']) {
39 printUsage(); 36 PubCommand.printGlobalUsage();
40 return; 37 return;
41 } 38 }
42 39
43 if (options.command == null) { 40 if (options.command == null) {
44 if (options.rest.isEmpty) { 41 if (options.rest.isEmpty) {
45 // No command was chosen. 42 // No command was chosen.
46 printUsage(); 43 PubCommand.printGlobalUsage();
47 } else { 44 } else {
48 log.error('Could not find a command named "${options.rest[0]}".'); 45 log.error('Could not find a command named "${options.rest[0]}".');
49 log.error('Run "pub help" to see available commands.'); 46 log.error('Run "pub help" to see available commands.');
50 flushThenExit(exit_codes.USAGE); 47 flushThenExit(exit_codes.USAGE);
51 } 48 }
52 return; 49 return;
53 } 50 }
54 51
55 if (options['trace']) { 52 if (options['trace']) {
56 log.recordTranscript(); 53 log.recordTranscript();
(...skipping 24 matching lines...) Expand all
81 cacheDir = path.join(appData, 'Pub', 'Cache'); 78 cacheDir = path.join(appData, 'Pub', 'Cache');
82 } else { 79 } else {
83 cacheDir = '${Platform.environment['HOME']}/.pub-cache'; 80 cacheDir = '${Platform.environment['HOME']}/.pub-cache';
84 } 81 }
85 82
86 validatePlatform().then((_) { 83 validatePlatform().then((_) {
87 PubCommand.commands[options.command.name].run(cacheDir, options, arguments); 84 PubCommand.commands[options.command.name].run(cacheDir, options, arguments);
88 }); 85 });
89 } 86 }
90 87
91 ArgParser initArgParser() {
92 var argParser = new ArgParser();
93
94 // Add the global options.
95 argParser.addFlag('help', abbr: 'h', negatable: false,
96 help: 'Print this usage information.');
97 argParser.addFlag('version', negatable: false,
98 help: 'Print pub version.');
99 argParser.addFlag('trace',
100 help: 'Print debugging information when an error occurs.');
101 argParser.addOption('verbosity',
102 help: 'Control output verbosity.',
103 allowed: ['normal', 'io', 'solver', 'all'],
104 allowedHelp: {
105 'normal': 'Show errors, warnings, and user messages.',
106 'io': 'Also show IO operations.',
107 'solver': 'Show steps during version resolution.',
108 'all': 'Show all output including internal tracing messages.'
109 });
110 argParser.addFlag('verbose', abbr: 'v', negatable: false,
111 help: 'Shortcut for "--verbosity=all".');
112
113 // Register the commands.
114 PubCommand.commands.forEach((name, command) {
115 argParser.addCommand(name, command.commandParser);
116 });
117
118 return argParser;
119 }
120
121 /// Checks that pub is running on a supported platform. If it isn't, it prints 88 /// Checks that pub is running on a supported platform. If it isn't, it prints
122 /// an error message and exits. Completes when the validation is done. 89 /// an error message and exits. Completes when the validation is done.
123 Future validatePlatform() { 90 Future validatePlatform() {
124 return syncFuture(() { 91 return syncFuture(() {
125 if (Platform.operatingSystem != 'windows') return null; 92 if (Platform.operatingSystem != 'windows') return null;
126 93
127 return runProcess('ver', []).then((result) { 94 return runProcess('ver', []).then((result) {
128 if (result.stdout.join('\n').contains('XP')) { 95 if (result.stdout.join('\n').contains('XP')) {
129 log.error('Sorry, but pub is not supported on Windows XP.'); 96 log.error('Sorry, but pub is not supported on Windows XP.');
130 return flushThenExit(exit_codes.USAGE); 97 return flushThenExit(exit_codes.USAGE);
131 } 98 }
132 }); 99 });
133 }); 100 });
134 } 101 }
135
136 /// Displays usage information for the app.
137 void printUsage([String description = 'Pub is a package manager for Dart.']) {
138 // Build up a buffer so it shows up as a single log entry.
139 var buffer = new StringBuffer();
140 buffer.write(description);
141 buffer.write('\n\n');
142 buffer.write('Usage: pub command [arguments]\n\n');
143 buffer.write('Global options:\n');
144 buffer.write('${pubArgParser.getUsage()}\n\n');
145
146 // Show the commands sorted.
147 buffer.write('Available commands:\n');
148
149 // TODO(rnystrom): A sorted map would be nice.
150 int length = 0;
151 var names = <String>[];
152 for (var command in PubCommand.commands.keys) {
153 // Hide aliases.
154 if (PubCommand.commands[command].aliases.indexOf(command) >= 0) continue;
155
156 // Hide undocumented commands.
157 if (PubCommand.commands[command].hidden) continue;
158
159 length = math.max(length, command.length);
160 names.add(command);
161 }
162
163 names.sort((a, b) => a.compareTo(b));
164
165 for (var name in names) {
166 buffer.write(' ${padRight(name, length)} '
167 '${PubCommand.commands[name].description}\n');
168 }
169
170 buffer.write('\n');
171 buffer.write(
172 'Use "pub help [command]" for more information about a command.');
173 log.message(buffer.toString());
174 }
OLDNEW
« no previous file with comments | « no previous file | sdk/lib/_internal/pub/lib/src/command.dart » ('j') | sdk/lib/_internal/pub/lib/src/command.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698