Chromium Code Reviews| Index: sdk/lib/_internal/pub/lib/src/command/global_activate.dart |
| diff --git a/sdk/lib/_internal/pub/lib/src/command/global_activate.dart b/sdk/lib/_internal/pub/lib/src/command/global_activate.dart |
| index 6fc25e3020d4978e9b1b39330ec8a50bd12be8e7..fbb0c5c1a859a6fed1773230043c001fbe2dddc4 100644 |
| --- a/sdk/lib/_internal/pub/lib/src/command/global_activate.dart |
| +++ b/sdk/lib/_internal/pub/lib/src/command/global_activate.dart |
| @@ -13,34 +13,63 @@ import '../version.dart'; |
| /// Handles the `global activate` pub command. |
| class GlobalActivateCommand extends PubCommand { |
| String get description => "Make a package's executables globally available."; |
| - String get usage => "pub global activate <package> [version]"; |
| + String get usage => "pub global activate [--source source] <package> [version]"; |
|
nweiz
2014/07/31 20:01:53
Long line. Also, normally we don't include options
Bob Nystrom
2014/08/04 23:41:50
Tweaked it a bit.
|
| bool get takesArguments => true; |
| + GlobalActivateCommand() { |
| + commandParser.addOption("source", |
| + abbr: "s", |
| + help: "The source used to find the package.", |
| + allowed: ["git", "hosted", "path"], |
| + defaultsTo: "hosted"); |
| + } |
| + |
| Future onRun() { |
| - // Make sure there is a package. |
| - if (commandOptions.rest.isEmpty) { |
| - usageError("No package to activate given."); |
| + var args = commandOptions.rest; |
| + |
| + readArg(String error) { |
| + if (args.isEmpty) usageError(error); |
| + var arg = args.first; |
| + args = args.skip(1); |
| + return arg; |
| } |
| - // Don't allow extra arguments. |
| - if (commandOptions.rest.length > 2) { |
| - var unexpected = commandOptions.rest.skip(2).map((arg) => '"$arg"'); |
| + validateNoExtraArgs() { |
| + if (args.isEmpty) return; |
| + var unexpected = args.map((arg) => '"$arg"'); |
| var arguments = pluralize("argument", unexpected.length); |
| usageError("Unexpected $arguments ${toSentence(unexpected)}."); |
| } |
| - var package = commandOptions.rest.first; |
| + var package = readArg("No package to activate given."); |
| + |
| + switch (commandOptions["source"]) { |
| + case "git": |
| + // Parse the git ref. |
| + // TODO(bob): Test. |
|
nweiz
2014/07/31 20:01:53
Remove this
Bob Nystrom
2014/08/04 23:41:50
Done.
|
| + var ref = readArg("Must provide a Git ref for the package."); |
|
nweiz
2014/07/31 20:01:53
Why does the user have to supply a ref for git? Gi
Bob Nystrom
2014/08/04 23:41:50
I think I just got my terminology confused here. T
|
| + validateNoExtraArgs(); |
| + return globals.activateGit(package, ref); |
| + |
| + case "hosted": |
| + // Parse the version constraint, if there is one. |
| + var constraint = VersionConstraint.any; |
| + if (args.isNotEmpty) { |
| + try { |
| + constraint = new VersionConstraint.parse(readArg("")); |
|
nweiz
2014/07/31 20:01:53
Passing an empty string to parseArg here reads wei
Bob Nystrom
2014/08/04 23:41:50
Done.
|
| + } on FormatException catch (error) { |
| + usageError(error.message); |
| + } |
| + } |
| + |
| + validateNoExtraArgs(); |
| + return globals.activateHosted(package, constraint); |
| - // Parse the version constraint, if there is one. |
| - var constraint = VersionConstraint.any; |
| - if (commandOptions.rest.length == 2) { |
| - try { |
| - constraint = new VersionConstraint.parse(commandOptions.rest[1]); |
| - } on FormatException catch (error) { |
| - usageError(error.message); |
| - } |
| + case "path": |
| + validateNoExtraArgs(); |
| + return globals.activatePath(package); |
| } |
| - return globals.activate(package, constraint); |
| + throw "unreachable"; |
| } |
| } |