Support aliases
authorAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 8 Mar 2018 20:06:29 +0000 (23:06 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 8 Mar 2018 20:31:56 +0000 (23:31 +0300)
src/bin/cli/mod.rs
tests/testsuite/cargo_alias_config.rs

index 775d077f4982d6bd2b8e19cfd411d94dc470678b..0c410e97857fec46a34bc7c7d0833313d9fe2e15 100644 (file)
@@ -13,7 +13,7 @@ use std::process;
 use clap::{AppSettings, Arg, ArgMatches};
 use toml;
 
-use cargo::{self, Config, CargoResult, CargoError, CliError};
+use cargo::{self, Config, CargoResult, CargoError, CliResult, CliError};
 use cargo::core::{Workspace, Source, SourceId, GitReference, Package};
 use cargo::util::{ToUrl, CargoResultExt};
 use cargo::util::important_paths::find_root_manifest_for_wd;
@@ -23,7 +23,7 @@ use cargo::sources::{GitSource, RegistrySource};
 
 use self::utils::*;
 
-pub fn do_main(config: &mut Config) -> Result<(), CliError> {
+pub fn do_main(config: &mut Config) -> CliResult {
     let args = cli().get_matches();
     if args.is_present("version") {
         let version = cargo::version();
@@ -43,7 +43,12 @@ pub fn do_main(config: &mut Config) -> Result<(), CliError> {
         return Ok(());
     }
 
+    execte_subcommand(config, args)
+}
+
+fn execte_subcommand(config: &mut Config, args: ArgMatches) -> CliResult {
     config_from_args(config, &args)?;
+
     match args.subcommand() {
         ("bench", Some(args)) => {
             let ws = workspace_from_args(config, args)?;
@@ -509,10 +514,17 @@ pub fn do_main(config: &mut Config) -> Result<(), CliError> {
                       registry)?;
             Ok(())
         }
-        (external, Some(args)) => {
-            let mut ext_args: Vec<&str> = vec![external];
+        (cmd, Some(args)) => {
+            if let Some(mut alias) = super::aliased_command(config, cmd)? {
+                alias.extend(args.values_of("").unwrap_or_default().map(|s| s.to_string()));
+                let args = cli()
+                    .setting(AppSettings::NoBinaryName)
+                    .get_matches_from(alias);
+                return execte_subcommand(config, args);
+            }
+            let mut ext_args: Vec<&str> = vec![cmd];
             ext_args.extend(args.values_of("").unwrap_or_default());
-            super::execute_external_subcommand(config, external, &ext_args)
+            super::execute_external_subcommand(config, cmd, &ext_args)
         }
         _ => Ok(())
     }
index 7eac7c63c80b071c14d6814cd71c16e922d777c4..6bd1633a9d0bb566bf89383ac4fee5f4bb878be0 100644 (file)
@@ -2,7 +2,6 @@ use cargotest::support::{project, execs, basic_bin_manifest};
 use hamcrest::{assert_that};
 
 #[test]
-#[ignore]
 fn alias_incorrect_config_type() {
     let p = project("foo")
         .file("Cargo.toml", &basic_bin_manifest("foo"))
@@ -42,7 +41,6 @@ fn alias_default_config_overrides_config() {
 }
 
 #[test]
-#[ignore]
 fn alias_config() {
     let p = project("foo")
         .file("Cargo.toml", &basic_bin_manifest("foo"))
@@ -62,7 +60,6 @@ fn alias_config() {
 }
 
 #[test]
-#[ignore]
 fn alias_list_test() {
     let p = project("foo")
         .file("Cargo.toml", &basic_bin_manifest("foo"))
@@ -83,7 +80,6 @@ fn alias_list_test() {
 }
 
 #[test]
-#[ignore]
 fn alias_with_flags_config() {
     let p = project("foo")
         .file("Cargo.toml", &basic_bin_manifest("foo"))