From 93875b88da25f9981169198dfcd63d366fe660f0 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 8 Mar 2018 23:06:29 +0300 Subject: [PATCH] Support aliases --- src/bin/cli/mod.rs | 22 +++++++++++++++++----- tests/testsuite/cargo_alias_config.rs | 4 ---- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/bin/cli/mod.rs b/src/bin/cli/mod.rs index 775d077f4..0c410e978 100644 --- a/src/bin/cli/mod.rs +++ b/src/bin/cli/mod.rs @@ -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(()) } diff --git a/tests/testsuite/cargo_alias_config.rs b/tests/testsuite/cargo_alias_config.rs index 7eac7c63c..6bd1633a9 100644 --- a/tests/testsuite/cargo_alias_config.rs +++ b/tests/testsuite/cargo_alias_config.rs @@ -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"))