From 2c9b6aab95e5ef7fc7b78a7ad106af08a1a9fb31 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Mar 2018 16:34:28 +0300 Subject: [PATCH] Introduce ArgMatchesExt trait --- src/bin/cli.rs | 6 +++--- src/bin/command_prelude.rs | 24 +++++++++++++++++------- src/cargo/util/important_paths.rs | 2 +- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/bin/cli.rs b/src/bin/cli.rs index 0b6242e59..b2bd8ec8f 100644 --- a/src/bin/cli.rs +++ b/src/bin/cli.rs @@ -224,7 +224,7 @@ fn execute_subcommand(config: &mut Config, args: ArgMatches) -> CliResult { Ok(()) } ("locate-project", Some(args)) => { - let root = root_manifest_from_args(config, args)?; + let root = args.root_manifest(config)?; let root = root.to_str() .ok_or_else(|| format_err!("your project path contains characters \ @@ -364,7 +364,7 @@ fn execute_subcommand(config: &mut Config, args: ArgMatches) -> CliResult { Ok(()) } ("read-manifest", Some(args)) => { - let root = root_manifest_from_args(config, args)?; + let root = args.root_manifest(config)?; let pkg = Package::for_path(&root, config)?; cargo::print_json(&pkg); Ok(()) @@ -512,7 +512,7 @@ fn execute_subcommand(config: &mut Config, args: ArgMatches) -> CliResult { } let mut contents = String::new(); - let filename = match root_manifest_from_args(config, args) { + let filename = match args.root_manifest(config) { Ok(filename) => filename, Err(e) => fail("invalid", &e.to_string()), }; diff --git a/src/bin/command_prelude.rs b/src/bin/command_prelude.rs index d8a5fa7eb..d9b28dcff 100644 --- a/src/bin/command_prelude.rs +++ b/src/bin/command_prelude.rs @@ -169,20 +169,30 @@ pub fn subcommand(name: &'static str) -> App { ]) } + +pub trait ArgMatchesExt: Sized { + fn root_manifest(&self, config: &Config) -> CargoResult { + let manifest_path = self._value_of("manifest-path"); + find_root_manifest_for_wd(manifest_path, config.cwd()) + } + + fn _value_of(&self, name: &str) -> Option<&str>; +} + +impl<'a> ArgMatchesExt for ArgMatches<'a> { + fn _value_of(&self, name: &str) -> Option<&str> { + self.value_of(name) + } +} + pub fn values(args: &ArgMatches, name: &str) -> Vec { args.values_of(name).unwrap_or_default() .map(|s| s.to_string()) .collect() } - -pub fn root_manifest_from_args(config: &Config, args: &ArgMatches) -> CargoResult { - let manifest_path = args.value_of("manifest-path").map(|s| s.to_string()); - find_root_manifest_for_wd(manifest_path, config.cwd()) -} - pub fn workspace_from_args<'a>(config: &'a Config, args: &ArgMatches) -> CargoResult> { - let root = root_manifest_from_args(config, args)?; + let root = args.root_manifest(config)?; Workspace::new(&root, config) } diff --git a/src/cargo/util/important_paths.rs b/src/cargo/util/important_paths.rs index faa5dfe9b..4371de4b9 100644 --- a/src/cargo/util/important_paths.rs +++ b/src/cargo/util/important_paths.rs @@ -35,7 +35,7 @@ pub fn find_project_manifest(pwd: &Path, file: &str) -> CargoResult { } /// Find the root Cargo.toml -pub fn find_root_manifest_for_wd(manifest_path: Option, cwd: &Path) +pub fn find_root_manifest_for_wd(manifest_path: Option<&str>, cwd: &Path) -> CargoResult { match manifest_path { Some(path) => { -- 2.30.2