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 |