From: Aleksey Kladov Date: Wed, 7 Mar 2018 11:42:39 +0000 (+0300) Subject: Move locate-project to clap X-Git-Tag: archive/raspbian/0.35.0-2+rpi1~3^2^2^2^2^2^2^2~22^2~2^2~47^2~57 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=3c86dc195dcf52ae0eda8c700daf1ddd1ae36298;p=cargo.git Move locate-project to clap --- diff --git a/src/bin/cargo.rs b/src/bin/cargo.rs index d04731cc5..7b34fecee 100644 --- a/src/bin/cargo.rs +++ b/src/bin/cargo.rs @@ -90,7 +90,7 @@ fn main() { let is_clapified = ::std::env::args().any(|arg| match arg.as_ref() { "build" | "bench" | "check" | "clean" | "doc" | "fetch" | "generate-lockfile" | "git-checkout" | - "init" | "install" => true, + "init" | "install" | "locate-project" => true, _ => false }); @@ -129,7 +129,7 @@ macro_rules! each_subcommand{ $mac!(help); // $mac!(init); // $mac!(install); - $mac!(locate_project); +// $mac!(locate_project); $mac!(login); $mac!(metadata); $mac!(new); diff --git a/src/bin/cli/locate_project.rs b/src/bin/cli/locate_project.rs new file mode 100644 index 000000000..c2cd7cd8b --- /dev/null +++ b/src/bin/cli/locate_project.rs @@ -0,0 +1,7 @@ +use super::utils::*; + +pub fn cli() -> App { + subcommand("locate-project") + .about("Checkout a copy of a Git repository") + .arg_manifest_path() +} diff --git a/src/bin/cli/mod.rs b/src/bin/cli/mod.rs index 416c6b398..755f53077 100644 --- a/src/bin/cli/mod.rs +++ b/src/bin/cli/mod.rs @@ -60,9 +60,13 @@ pub fn do_main(config: &mut Config) -> Result<(), CliError> { ) } - fn workspace_from_args<'a>(config: &'a Config, args: &ArgMatches) -> CargoResult> { + fn root_manifest_from_args(config: &Config, args: &ArgMatches) -> CargoResult { let manifest_path = args.value_of("manifest-path").map(|s| s.to_string()); - let root = find_root_manifest_for_wd(manifest_path, config.cwd())?; + find_root_manifest_for_wd(manifest_path, config.cwd()) + } + + fn workspace_from_args<'a>(config: &'a Config, args: &ArgMatches) -> CargoResult> { + let root = root_manifest_from_args(config, args)?; Workspace::new(&root, config) } @@ -259,11 +263,31 @@ pub fn do_main(config: &mut Config) -> Result<(), CliError> { return Ok(()); } + ("locate-project", Some(args)) => { + let root = root_manifest_from_args(config, args)?; + + let root = root.to_str() + .ok_or_else(|| format_err!("your project path contains characters \ + not representable in Unicode")) + .map_err(|e| CliError::new(e, 1))? + .to_string(); + + #[derive(Serialize)] + pub struct ProjectLocation { + root: String + } + + let location = ProjectLocation { root }; + + cargo::print_json(&location); + return Ok(()); + } _ => return Ok(()) } } use self::utils::*; +use std::path::PathBuf; fn cli() -> App { let app = App::new("cargo") @@ -339,6 +363,7 @@ See 'cargo help ' for more information on a specific command. git_checkout::cli(), init::cli(), install::cli(), + locate_project::cli(), ]) ; app @@ -357,6 +382,7 @@ mod git_checkout; mod init; mod install; +mod locate_project; mod utils { use clap::{self, SubCommand, AppSettings};