From d8d1f13ba02a8e2adb30b28b02ecd38f597e4440 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Mar 2018 16:44:43 +0300 Subject: [PATCH] Make `target` option owned in various configs --- src/bin/cli.rs | 6 +++--- src/bin/command_prelude.rs | 6 +++++- src/cargo/ops/cargo_clean.rs | 6 +++--- src/cargo/ops/cargo_compile.rs | 6 +++--- src/cargo/ops/cargo_doc.rs | 2 +- src/cargo/ops/cargo_package.rs | 4 ++-- src/cargo/ops/registry.rs | 4 ++-- 7 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/bin/cli.rs b/src/bin/cli.rs index 46b4f4754..370316190 100644 --- a/src/bin/cli.rs +++ b/src/bin/cli.rs @@ -140,7 +140,7 @@ fn execute_subcommand(config: &mut Config, args: ArgMatches) -> CliResult { let opts = ops::CleanOptions { config, spec: values(args, "package"), - target: args.value_of("target"), + target: args.target(), release: args.is_present("release"), }; ops::clean(&ws, &opts)?; @@ -332,7 +332,7 @@ fn execute_subcommand(config: &mut Config, args: ArgMatches) -> CliResult { list: args.is_present("list"), check_metadata: !args.is_present("no-metadata"), allow_dirty: args.is_present("allow-dirty"), - target: args.value_of("target"), + target: args.target(), jobs: args.jobs()?, registry: None, })?; @@ -356,7 +356,7 @@ fn execute_subcommand(config: &mut Config, args: ArgMatches) -> CliResult { index, verify: !args.is_present("no-verify"), allow_dirty: args.is_present("allow-dirty"), - target: args.value_of("target"), + target: args.target(), jobs: args.jobs()?, dry_run: args.is_present("dry-run"), registry, diff --git a/src/bin/command_prelude.rs b/src/bin/command_prelude.rs index b01bc785c..b7df8522a 100644 --- a/src/bin/command_prelude.rs +++ b/src/bin/command_prelude.rs @@ -193,6 +193,10 @@ pub trait ArgMatchesExt { Ok(jobs) } + fn target(&self) -> Option { + self._value_of("target").map(|s| s.to_string()) + } + fn _value_of(&self, name: &str) -> Option<&str>; } @@ -235,7 +239,7 @@ pub fn compile_options_from_args<'a>( let opts = CompileOptions { config, jobs: args.jobs()?, - target: args.value_of("target"), + target: args.target(), features: values(args, "features"), all_features: args.is_present("all-features"), no_default_features: args.is_present("no-default-features"), diff --git a/src/cargo/ops/cargo_clean.rs b/src/cargo/ops/cargo_clean.rs index 287b1533a..7ba7757a2 100644 --- a/src/cargo/ops/cargo_clean.rs +++ b/src/cargo/ops/cargo_clean.rs @@ -9,9 +9,9 @@ use util::paths; use ops::{self, Context, BuildConfig, Kind, Unit}; pub struct CleanOptions<'a> { - pub spec: Vec, - pub target: Option<&'a str>, pub config: &'a Config, + pub spec: Vec, + pub target: Option, pub release: bool, } @@ -37,7 +37,7 @@ pub fn clean(ws: &Workspace, opts: &CleanOptions) -> CargoResult<()> { let mut cx = Context::new(ws, &resolve, &packages, opts.config, BuildConfig { host_triple, - requested_target: opts.target.map(|s| s.to_owned()), + requested_target: opts.target.clone(), release: opts.release, jobs: 1, ..BuildConfig::default() diff --git a/src/cargo/ops/cargo_compile.rs b/src/cargo/ops/cargo_compile.rs index 08be6ea75..ba2e05e00 100644 --- a/src/cargo/ops/cargo_compile.rs +++ b/src/cargo/ops/cargo_compile.rs @@ -41,7 +41,7 @@ pub struct CompileOptions<'a> { /// Number of concurrent jobs to use. pub jobs: Option, /// The target platform to compile for (example: `i686-unknown-linux-gnu`). - pub target: Option<&'a str>, + pub target: Option, /// Extra features to build for the root package pub features: Vec, /// Flag whether all available features should be built for the root package @@ -217,14 +217,14 @@ pub fn compile_ws<'a>(ws: &Workspace<'a>, options: &CompileOptions<'a>, exec: Arc) -> CargoResult> { - let CompileOptions { config, jobs, target, ref spec, ref features, + let CompileOptions { config, jobs, ref target, ref spec, ref features, all_features, no_default_features, release, mode, message_format, ref filter, ref target_rustdoc_args, ref target_rustc_args } = *options; - let target = target.map(|s| s.to_string()); + let target = target.clone(); if jobs == Some(0) { bail!("jobs must be at least 1") diff --git a/src/cargo/ops/cargo_doc.rs b/src/cargo/ops/cargo_doc.rs index 777cb9956..ced9140fe 100644 --- a/src/cargo/ops/cargo_doc.rs +++ b/src/cargo/ops/cargo_doc.rs @@ -68,7 +68,7 @@ pub fn doc(ws: &Workspace, options: &DocOptions) -> CargoResult<()> { // nothing we can do about it and otherwise if it's getting overwritten // then that's also ok! let mut target_dir = ws.target_dir(); - if let Some(triple) = options.compile_opts.target { + if let Some(ref triple) = options.compile_opts.target { target_dir.push(Path::new(triple).file_stem().unwrap()); } let path = target_dir.join("doc").join(&name).join("index.html"); diff --git a/src/cargo/ops/cargo_package.rs b/src/cargo/ops/cargo_package.rs index 4ed1c902b..c42c5dc03 100644 --- a/src/cargo/ops/cargo_package.rs +++ b/src/cargo/ops/cargo_package.rs @@ -23,7 +23,7 @@ pub struct PackageOpts<'cfg> { pub allow_dirty: bool, pub verify: bool, pub jobs: Option, - pub target: Option<&'cfg str>, + pub target: Option, pub registry: Option, } @@ -320,7 +320,7 @@ fn run_verify(ws: &Workspace, tar: &FileLock, opts: &PackageOpts) -> CargoResult ops::compile_ws(&ws, None, &ops::CompileOptions { config, jobs: opts.jobs, - target: opts.target, + target: opts.target.clone(), features: Vec::new(), no_default_features: false, all_features: false, diff --git a/src/cargo/ops/registry.rs b/src/cargo/ops/registry.rs index fb776d61b..88aba60be 100644 --- a/src/cargo/ops/registry.rs +++ b/src/cargo/ops/registry.rs @@ -34,7 +34,7 @@ pub struct PublishOpts<'cfg> { pub verify: bool, pub allow_dirty: bool, pub jobs: Option, - pub target: Option<&'cfg str>, + pub target: Option, pub dry_run: bool, pub registry: Option, } @@ -76,7 +76,7 @@ pub fn publish(ws: &Workspace, opts: &PublishOpts) -> CargoResult<()> { list: false, check_metadata: true, allow_dirty: opts.allow_dirty, - target: opts.target, + target: opts.target.clone(), jobs: opts.jobs, registry: opts.registry.clone(), })?.unwrap(); -- 2.30.2