| OLD | NEW |
| 1 library pub.command.global_activate; | 1 library pub.command.global_activate; |
| 2 import 'dart:async'; | 2 import 'dart:async'; |
| 3 import '../command.dart'; | 3 import '../command.dart'; |
| 4 import '../utils.dart'; | 4 import '../utils.dart'; |
| 5 import '../version.dart'; | 5 import '../version.dart'; |
| 6 class GlobalActivateCommand extends PubCommand { | 6 class GlobalActivateCommand extends PubCommand { |
| 7 String get description => "Make a package's executables globally available."; | 7 String get description => "Make a package's executables globally available."; |
| 8 String get usage => "pub global activate <package...>"; | 8 String get usage => "pub global activate <package...>"; |
| 9 bool get takesArguments => true; | 9 bool get takesArguments => true; |
| 10 GlobalActivateCommand() { | 10 GlobalActivateCommand() { |
| 11 commandParser.addOption( | 11 commandParser.addOption( |
| 12 "source", | 12 "source", |
| 13 abbr: "s", | 13 abbr: "s", |
| 14 help: "The source used to find the package.", | 14 help: "The source used to find the package.", |
| 15 allowed: ["git", "hosted", "path"], | 15 allowed: ["git", "hosted", "path"], |
| 16 defaultsTo: "hosted"); | 16 defaultsTo: "hosted"); |
| 17 commandParser.addFlag( |
| 18 "no-executables", |
| 19 negatable: false, |
| 20 help: "Do not put executables on PATH."); |
| 21 commandParser.addOption( |
| 22 "executable", |
| 23 abbr: "x", |
| 24 help: "Executable(s) to place on PATH.", |
| 25 allowMultiple: true); |
| 26 commandParser.addFlag( |
| 27 "overwrite-executables", |
| 28 negatable: false, |
| 29 help: "Overwrite executables from other packages with the same name."); |
| 17 } | 30 } |
| 18 Future onRun() { | 31 Future onRun() { |
| 32 var executables; |
| 33 if (commandOptions.wasParsed("executable")) { |
| 34 if (commandOptions.wasParsed("no-executables")) { |
| 35 usageError("Cannot pass both --no-executables and --executable."); |
| 36 } |
| 37 executables = commandOptions["executable"]; |
| 38 } else if (commandOptions["no-executables"]) { |
| 39 executables = []; |
| 40 } |
| 41 var overwrite = commandOptions["overwrite-executables"]; |
| 19 var args = commandOptions.rest; | 42 var args = commandOptions.rest; |
| 20 readArg([String error]) { | 43 readArg([String error]) { |
| 21 if (args.isEmpty) usageError(error); | 44 if (args.isEmpty) usageError(error); |
| 22 var arg = args.first; | 45 var arg = args.first; |
| 23 args = args.skip(1); | 46 args = args.skip(1); |
| 24 return arg; | 47 return arg; |
| 25 } | 48 } |
| 26 validateNoExtraArgs() { | 49 validateNoExtraArgs() { |
| 27 if (args.isEmpty) return; | 50 if (args.isEmpty) return; |
| 28 var unexpected = args.map((arg) => '"$arg"'); | 51 var unexpected = args.map((arg) => '"$arg"'); |
| 29 var arguments = pluralize("argument", unexpected.length); | 52 var arguments = pluralize("argument", unexpected.length); |
| 30 usageError("Unexpected $arguments ${toSentence(unexpected)}."); | 53 usageError("Unexpected $arguments ${toSentence(unexpected)}."); |
| 31 } | 54 } |
| 32 switch (commandOptions["source"]) { | 55 switch (commandOptions["source"]) { |
| 33 case "git": | 56 case "git": |
| 34 var repo = readArg("No Git repository given."); | 57 var repo = readArg("No Git repository given."); |
| 35 validateNoExtraArgs(); | 58 validateNoExtraArgs(); |
| 36 return globals.activateGit(repo); | 59 return globals.activateGit( |
| 60 repo, |
| 61 executables, |
| 62 overwriteBinStubs: overwrite); |
| 37 case "hosted": | 63 case "hosted": |
| 38 var package = readArg("No package to activate given."); | 64 var package = readArg("No package to activate given."); |
| 39 var constraint = VersionConstraint.any; | 65 var constraint = VersionConstraint.any; |
| 40 if (args.isNotEmpty) { | 66 if (args.isNotEmpty) { |
| 41 try { | 67 try { |
| 42 constraint = new VersionConstraint.parse(readArg()); | 68 constraint = new VersionConstraint.parse(readArg()); |
| 43 } on FormatException catch (error) { | 69 } on FormatException catch (error) { |
| 44 usageError(error.message); | 70 usageError(error.message); |
| 45 } | 71 } |
| 46 } | 72 } |
| 47 validateNoExtraArgs(); | 73 validateNoExtraArgs(); |
| 48 return globals.activateHosted(package, constraint); | 74 return globals.activateHosted( |
| 75 package, |
| 76 constraint, |
| 77 executables, |
| 78 overwriteBinStubs: overwrite); |
| 49 case "path": | 79 case "path": |
| 50 var path = readArg("No package to activate given."); | 80 var path = readArg("No package to activate given."); |
| 51 validateNoExtraArgs(); | 81 validateNoExtraArgs(); |
| 52 return globals.activatePath(path); | 82 return globals.activatePath( |
| 83 path, |
| 84 executables, |
| 85 overwriteBinStubs: overwrite); |
| 53 } | 86 } |
| 54 throw "unreachable"; | 87 throw "unreachable"; |
| 55 } | 88 } |
| 56 } | 89 } |
| OLD | NEW |