Make `target` option owned in various configs
authorAleksey Kladov <aleksey.kladov@gmail.com>
Sat, 10 Mar 2018 13:44:43 +0000 (16:44 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Sat, 10 Mar 2018 13:44:43 +0000 (16:44 +0300)
src/bin/cli.rs
src/bin/command_prelude.rs
src/cargo/ops/cargo_clean.rs
src/cargo/ops/cargo_compile.rs
src/cargo/ops/cargo_doc.rs
src/cargo/ops/cargo_package.rs
src/cargo/ops/registry.rs

index 46b4f4754c9087aeeaca2b292af52c02e8ce63b3..3703161903351e72296b6b62bc3bf2444d7c2014 100644 (file)
@@ -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,
index b01bc785c80ee7a276f4594e6cdf8f37fc5bbfff..b7df8522af148556a8261eaae74fc52e7ce87eb3 100644 (file)
@@ -193,6 +193,10 @@ pub trait ArgMatchesExt {
         Ok(jobs)
     }
 
+    fn target(&self) -> Option<String> {
+        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"),
index 287b1533aa104af4ac4d4acf569eae84e20b1751..7ba7757a218e3919ba939a11a70f30f7ec0eecdc 100644 (file)
@@ -9,9 +9,9 @@ use util::paths;
 use ops::{self, Context, BuildConfig, Kind, Unit};
 
 pub struct CleanOptions<'a> {
-    pub spec: Vec<String>,
-    pub target: Option<&'a str>,
     pub config: &'a Config,
+    pub spec: Vec<String>,
+    pub target: Option<String>,
     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()
index 08be6ea75eeec01bdb2e01060ae8e27f4ac30af0..ba2e05e00db57b576a4ef08ae4a0bdb665300316 100644 (file)
@@ -41,7 +41,7 @@ pub struct CompileOptions<'a> {
     /// Number of concurrent jobs to use.
     pub jobs: Option<u32>,
     /// The target platform to compile for (example: `i686-unknown-linux-gnu`).
-    pub target: Option<&'a str>,
+    pub target: Option<String>,
     /// Extra features to build for the root package
     pub features: Vec<String>,
     /// 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<Executor>)
                       -> CargoResult<ops::Compilation<'a>> {
-    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")
index 777cb99568bdaf92da221f2fce3de8506e14b889..ced9140fe1f633da56d19581ef7245024ade5c70 100644 (file)
@@ -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");
index 4ed1c902b3d4988173b0e68475763435f6b606f8..c42c5dc03564603bb69b290327ce5da3ad13f244 100644 (file)
@@ -23,7 +23,7 @@ pub struct PackageOpts<'cfg> {
     pub allow_dirty: bool,
     pub verify: bool,
     pub jobs: Option<u32>,
-    pub target: Option<&'cfg str>,
+    pub target: Option<String>,
     pub registry: Option<String>,
 }
 
@@ -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,
index fb776d61bf85d9f06db9943afefa20b6db13bed0..88aba60be0dea7dcd0e74dd2b71d0848c8bb1a93 100644 (file)
@@ -34,7 +34,7 @@ pub struct PublishOpts<'cfg> {
     pub verify: bool,
     pub allow_dirty: bool,
     pub jobs: Option<u32>,
-    pub target: Option<&'cfg str>,
+    pub target: Option<String>,
     pub dry_run: bool,
     pub registry: Option<String>,
 }
@@ -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();