Support external subcommands
authorAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 8 Mar 2018 19:24:16 +0000 (22:24 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 8 Mar 2018 20:31:56 +0000 (23:31 +0300)
src/bin/cargo.rs
src/bin/cli/mod.rs
tests/testsuite/cargo_command.rs

index 716fddec2136fbb1829058c0eda515e971cd699d..725339037c07524e8721e6dd938b6362cb57f006 100644 (file)
@@ -223,8 +223,8 @@ fn execute(flags: Flags, config: &mut Config) -> CliResult {
         }
         None => args,
     };
-
-    execute_external_subcommand(config, &args[1], &args)
+    unimplemented!()
+//    execute_external_subcommand(config, &args[1], &args)
 }
 
 fn try_execute_builtin_command(config: &mut Config, args: &[String]) -> Option<CliResult> {
@@ -283,7 +283,7 @@ fn find_closest(config: &Config, cmd: &str) -> Option<String> {
     filtered.get(0).map(|slot| slot.1.clone())
 }
 
-fn execute_external_subcommand(config: &Config, cmd: &str, args: &[String]) -> CliResult {
+fn execute_external_subcommand(config: &Config, cmd: &str, args: &[&str]) -> CliResult {
     let command_exe = format!("cargo-{}{}", cmd, env::consts::EXE_SUFFIX);
     let path = search_directories(config)
         .iter()
index 23b76fb23bf0f2a232e277967bea95f1657dc85f..40bfe09b8143a346f15f89dc3dc99f84c9099180 100644 (file)
@@ -506,6 +506,11 @@ pub fn do_main(config: &mut Config) -> Result<(), CliError> {
                       registry)?;
             Ok(())
         }
+        (external, Some(args)) => {
+            let mut ext_args: Vec<&str> = vec![external];
+            ext_args.extend(args.values_of("").unwrap_or_default());
+            super::execute_external_subcommand(config, external, &ext_args)
+        }
         _ => Ok(())
     }
 }
@@ -518,6 +523,7 @@ fn cli() -> App {
             AppSettings::UnifiedHelpMessage,
             AppSettings::DeriveDisplayOrder,
             AppSettings::VersionlessSubcommands,
+            AppSettings::AllowExternalSubcommands,
         ])
         .about("Rust's package manager")
         .arg(
index 58c842a4a5686c68b2c19fa047f24692df260b41..59c5c5d2467966c6ea6cb2df1307743cfe74c4d5 100644 (file)
@@ -164,7 +164,6 @@ fn override_cargo_home() {
 }
 
 #[test]
-#[ignore]
 fn cargo_subcommand_env() {
     use cargotest::support::cargo_exe;