Introduce command_prelude module
authorAleksey Kladov <aleksey.kladov@gmail.com>
Sat, 10 Mar 2018 13:13:51 +0000 (16:13 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Sat, 10 Mar 2018 13:13:51 +0000 (16:13 +0300)
30 files changed:
src/bin/cli/bench.rs
src/bin/cli/build.rs
src/bin/cli/check.rs
src/bin/cli/clean.rs
src/bin/cli/doc.rs
src/bin/cli/fetch.rs
src/bin/cli/generate_lockfile.rs
src/bin/cli/git_checkout.rs
src/bin/cli/init.rs
src/bin/cli/install.rs
src/bin/cli/locate_project.rs
src/bin/cli/login.rs
src/bin/cli/metadata.rs
src/bin/cli/mod.rs
src/bin/cli/new.rs
src/bin/cli/owner.rs
src/bin/cli/package.rs
src/bin/cli/pkgid.rs
src/bin/cli/publish.rs
src/bin/cli/read_manifest.rs
src/bin/cli/run.rs
src/bin/cli/rustc.rs
src/bin/cli/rustdoc.rs
src/bin/cli/search.rs
src/bin/cli/test.rs
src/bin/cli/uninstall.rs
src/bin/cli/update.rs
src/bin/cli/verify_project.rs
src/bin/cli/version.rs
src/bin/cli/yank.rs

index 5a84ff317c3486c4d0cad2facc520b7c9a9d20f4..58a73b4edec058075722865dfe54cad62a971779 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 use clap::AppSettings;
 
 pub fn cli() -> App {
index 99c66ae851b6529e97dd65785e954bb14a5d03fe..2d1bdd921325816d9544671222914eb754244240 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("build").alias("b")
index b77d7153d0256c45f156017532b0ff16de72f479..2777f2317a8239b57cabd172efcc60a1cfcc5356 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("check")
index eafdb98b69944f57a641deb69ae11eded22662ca..e23eac7adb64956d2d85a728c156498a6efb57c3 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("clean")
index 9a567464df7e69f865c5f51dd7081f7e3202d600..ddf76081a1ccd7f6acec73e3aea6688f7d522702 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("doc")
index 611a2eb378e6433bedf635cbde6c005c7d40e27a..39b08ab935afa831f8e8eb07f384cf6632fa3ca7 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("fetch")
index 438c43f2e15e09890870c936b1fd6c28747f8573..447aa023e6e382d69164526b4726f8913b49cace 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("generate-lockfile")
index 68250b9718c4d9e0cebac0bff71d519de36a5e7b..90719066e4188c86961818959ffe769d9666e63e 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("git-checkout")
index 0006ac04a7e5811c72d379abcd7c28f7ec3912dc..a7038e0e0ae5bd5ba5de022be4fc557b920aa2c4 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("init")
index 5735da1044ba90722a11bda8b2d1fb1023288857..237e819ca4c47c994f30348522ec01ad45edee17 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("install")
index c2cd7cd8b17fd16f75ef42cfb34cdc65916da8a9..ef18d30a6247de6ddd06f0dd341f0227cd3e292b 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("locate-project")
index 957bfe1c1ce078e306966841ef9108707cbf7b5e..c5d77b37338400e113560dd601ca0175bf17b788 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("login")
index 702339832fe953c2056ffd91a8177995881d231c..7b407a9f2ba040f366dc33937d340fa06c1fe77c 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("metadata")
index 411c289a03b97caebd909b715c4e9ad3d2b8abe0..78cf341841ce8f11476d1c435ca3dcf0130e9708 100644 (file)
@@ -2,9 +2,7 @@ extern crate clap;
 #[cfg(never)]
 extern crate cargo;
 
-use std::slice;
 use std::io::{self, Read, BufRead};
-use std::path::PathBuf;
 use std::cmp::min;
 use std::fs::File;
 use std::collections::HashMap;
@@ -13,15 +11,13 @@ use std::process;
 use clap::{AppSettings, Arg, ArgMatches};
 use toml;
 
-use cargo::{self, Config, CargoResult, CargoError, CliResult, CliError};
-use cargo::core::{Workspace, Source, SourceId, GitReference, Package};
+use cargo::{self, Config, CargoError, CliResult, CliError};
+use cargo::core::{Source, SourceId, GitReference, Package};
 use cargo::util::{ToUrl, CargoResultExt};
-use cargo::util::important_paths::find_root_manifest_for_wd;
-use cargo::ops::{self, MessageFormat, Packages, CompileOptions, CompileMode, VersionControl,
-                 OutputMetadataOptions, NewOptions};
+use cargo::ops::{self, CompileMode, OutputMetadataOptions};
 use cargo::sources::{GitSource, RegistrySource};
 
-use self::utils::*;
+use self::command_prelude::*;
 use std::collections::BTreeSet;
 use std::env;
 use std::fs;
@@ -732,8 +728,16 @@ mod verify_project;
 mod version;
 mod yank;
 
-mod utils {
-    use clap::{self, SubCommand, AppSettings};
+mod command_prelude {
+    use std::path::PathBuf;
+
+    use clap::{self, SubCommand, AppSettings, ArgMatches};
+    use cargo::{Config, CargoResult};
+    use cargo::core::Workspace;
+    use cargo::ops::{CompileMode, CompileOptions, CompileFilter, Packages, MessageFormat,
+                     VersionControl, NewOptions};
+    use cargo::util::important_paths::find_root_manifest_for_wd;
+
     pub use clap::Arg;
 
     pub type App = clap::App<'static, 'static>;
@@ -895,142 +899,141 @@ a global configuration.")
                 AppSettings::DontCollapseArgsInUsage,
             ])
     }
-}
 
-fn values(args: &ArgMatches, name: &str) -> Vec<String> {
-    args.values_of(name).unwrap_or_default()
-        .map(|s| s.to_string())
-        .collect()
-}
+    pub fn values(args: &ArgMatches, name: &str) -> Vec<String> {
+        args.values_of(name).unwrap_or_default()
+            .map(|s| s.to_string())
+            .collect()
+    }
 
 
-fn config_from_args(config: &mut Config, args: &ArgMatches) -> CargoResult<()> {
-    let color = args.value_of("color").map(|s| s.to_string());
-    config.configure(
-        args.occurrences_of("verbose") as u32,
-        if args.is_present("quite") { Some(true) } else { None },
-        &color,
-        args.is_present("frozen"),
-        args.is_present("locked"),
-        &args.values_of_lossy("unstable-features").unwrap_or_default(),
-    )
-}
+    pub fn config_from_args(config: &mut Config, args: &ArgMatches) -> CargoResult<()> {
+        let color = args.value_of("color").map(|s| s.to_string());
+        config.configure(
+            args.occurrences_of("verbose") as u32,
+            if args.is_present("quite") { Some(true) } else { None },
+            &color,
+            args.is_present("frozen"),
+            args.is_present("locked"),
+            &args.values_of_lossy("unstable-features").unwrap_or_default(),
+        )
+    }
 
-fn root_manifest_from_args(config: &Config, args: &ArgMatches) -> CargoResult<PathBuf> {
-    let manifest_path = args.value_of("manifest-path").map(|s| s.to_string());
-    find_root_manifest_for_wd(manifest_path, config.cwd())
-}
+    pub fn root_manifest_from_args(config: &Config, args: &ArgMatches) -> CargoResult<PathBuf> {
+        let manifest_path = args.value_of("manifest-path").map(|s| s.to_string());
+        find_root_manifest_for_wd(manifest_path, config.cwd())
+    }
 
-fn workspace_from_args<'a>(config: &'a Config, args: &ArgMatches) -> CargoResult<Workspace<'a>> {
-    let root = root_manifest_from_args(config, args)?;
-    Workspace::new(&root, config)
-}
+    pub fn workspace_from_args<'a>(config: &'a Config, args: &ArgMatches) -> CargoResult<Workspace<'a>> {
+        let root = root_manifest_from_args(config, args)?;
+        Workspace::new(&root, config)
+    }
 
-fn jobs_from_args(args: &ArgMatches) -> CargoResult<Option<u32>> { //FIXME: validation
-    let jobs = match args.value_of("jobs") {
-        None => None,
-        Some(jobs) => Some(jobs.parse::<u32>().map_err(|_| {
-            clap::Error::value_validation_auto(
-                format!("could not parse `{}` as a number", jobs)
-            )
-        })?)
-    };
-    Ok(jobs)
-}
+    pub fn jobs_from_args(args: &ArgMatches) -> CargoResult<Option<u32>> { //FIXME: validation
+        let jobs = match args.value_of("jobs") {
+            None => None,
+            Some(jobs) => Some(jobs.parse::<u32>().map_err(|_| {
+                clap::Error::value_validation_auto(
+                    format!("could not parse `{}` as a number", jobs)
+                )
+            })?)
+        };
+        Ok(jobs)
+    }
 
-fn compile_options_from_args<'a>(
-    config: &'a Config,
-    args: &'a ArgMatches<'a>,
-    mode: CompileMode,
-) -> CargoResult<CompileOptions<'a>> {
-    let spec = Packages::from_flags(
-        args.is_present("all"),
-        values(args, "exclude"),
-        values(args, "package"),
-    )?;
-
-    let message_format = match args.value_of("message-format") {
-        None => MessageFormat::Human,
-        Some(f) => {
-            if f.eq_ignore_ascii_case("json") {
-                MessageFormat::Json
-            } else if f.eq_ignore_ascii_case("human") {
-                MessageFormat::Human
-            } else {
-                panic!("Impossible message format: {:?}", f)
+    pub fn compile_options_from_args<'a>(
+        config: &'a Config,
+        args: &'a ArgMatches<'a>,
+        mode: CompileMode,
+    ) -> CargoResult<CompileOptions<'a>> {
+        let spec = Packages::from_flags(
+            args.is_present("all"),
+            values(args, "exclude"),
+            values(args, "package"),
+        )?;
+
+        let message_format = match args.value_of("message-format") {
+            None => MessageFormat::Human,
+            Some(f) => {
+                if f.eq_ignore_ascii_case("json") {
+                    MessageFormat::Json
+                } else if f.eq_ignore_ascii_case("human") {
+                    MessageFormat::Human
+                } else {
+                    panic!("Impossible message format: {:?}", f)
+                }
             }
-        }
-    };
-
-    let opts = CompileOptions {
-        config,
-        jobs: jobs_from_args(args)?,
-        target: args.value_of("target"),
-        features: values(args, "features"),
-        all_features: args.is_present("all-features"),
-        no_default_features: args.is_present("no-default-features"),
-        spec,
-        mode,
-        release: args.is_present("release"),
-        filter: ops::CompileFilter::new(args.is_present("lib"),
-                                        values(args, "bin"), args.is_present("bins"),
-                                        values(args, "test"), args.is_present("tests"),
-                                        values(args, "example"), args.is_present("examples"),
-                                        values(args, "bench"), args.is_present("benches"),
-                                        args.is_present("all-targets")),
-        message_format,
-        target_rustdoc_args: None,
-        target_rustc_args: None,
-    };
-    Ok(opts)
-}
+        };
 
-fn compile_options_from_args_for_single_package<'a>(
-    config: &'a Config,
-    args: &'a ArgMatches<'a>,
-    mode: CompileMode,
-) -> CargoResult<CompileOptions<'a>> {
-    let mut compile_opts = compile_options_from_args(config, args, mode)?;
-    compile_opts.spec = Packages::Packages(values(args, "package"));
-    Ok(compile_opts)
-}
+        let opts = CompileOptions {
+            config,
+            jobs: jobs_from_args(args)?,
+            target: args.value_of("target"),
+            features: values(args, "features"),
+            all_features: args.is_present("all-features"),
+            no_default_features: args.is_present("no-default-features"),
+            spec,
+            mode,
+            release: args.is_present("release"),
+            filter: CompileFilter::new(args.is_present("lib"),
+                                       values(args, "bin"), args.is_present("bins"),
+                                       values(args, "test"), args.is_present("tests"),
+                                       values(args, "example"), args.is_present("examples"),
+                                       values(args, "bench"), args.is_present("benches"),
+                                       args.is_present("all-targets")),
+            message_format,
+            target_rustdoc_args: None,
+            target_rustc_args: None,
+        };
+        Ok(opts)
+    }
 
-fn new_opts_from_args<'a>(args: &'a ArgMatches<'a>, path: &'a str) -> CargoResult<NewOptions<'a>> {
-    let vcs = args.value_of("vcs").map(|vcs| match vcs {
-        "git" => VersionControl::Git,
-        "hg" => VersionControl::Hg,
-        "pijul" => VersionControl::Pijul,
-        "fossil" => VersionControl::Fossil,
-        "none" => VersionControl::NoVcs,
-        vcs => panic!("Impossible vcs: {:?}", vcs),
-    });
-    NewOptions::new(vcs,
-                    args.is_present("bin"),
-                    args.is_present("lib"),
-                    path,
-                    args.value_of("name"))
-}
+    pub fn compile_options_from_args_for_single_package<'a>(
+        config: &'a Config,
+        args: &'a ArgMatches<'a>,
+        mode: CompileMode,
+    ) -> CargoResult<CompileOptions<'a>> {
+        let mut compile_opts = compile_options_from_args(config, args, mode)?;
+        compile_opts.spec = Packages::Packages(values(args, "package"));
+        Ok(compile_opts)
+    }
+
+    pub fn new_opts_from_args<'a>(args: &'a ArgMatches<'a>, path: &'a str) -> CargoResult<NewOptions<'a>> {
+        let vcs = args.value_of("vcs").map(|vcs| match vcs {
+            "git" => VersionControl::Git,
+            "hg" => VersionControl::Hg,
+            "pijul" => VersionControl::Pijul,
+            "fossil" => VersionControl::Fossil,
+            "none" => VersionControl::NoVcs,
+            vcs => panic!("Impossible vcs: {:?}", vcs),
+        });
+        NewOptions::new(vcs,
+                        args.is_present("bin"),
+                        args.is_present("lib"),
+                        path,
+                        args.value_of("name"))
+    }
 
-fn registry_from_args(config: &Config, args: &ArgMatches) -> CargoResult<Option<String>> {
-    match args.value_of("registry") {
-        Some(registry) => {
-            if !config.cli_unstable().unstable_options {
-                return Err(format_err!("registry option is an unstable feature and \
+    pub fn registry_from_args(config: &Config, args: &ArgMatches) -> CargoResult<Option<String>> {
+        match args.value_of("registry") {
+            Some(registry) => {
+                if !config.cli_unstable().unstable_options {
+                    return Err(format_err!("registry option is an unstable feature and \
                                 requires -Zunstable-options to use.").into());
+                }
+                Ok(Some(registry.to_string()))
             }
-            Ok(Some(registry.to_string()))
+            None => Ok(None),
         }
-        None => Ok(None),
     }
-}
 
-fn index_from_args(config: &Config, args: &ArgMatches) -> CargoResult<Option<String>> {
-    // TODO: Deprecated
-    // remove once it has been decided --host can be removed
-    // We may instead want to repurpose the host flag, as
-    // mentioned in this issue
-    // https://github.com/rust-lang/cargo/issues/4208
-    let msg = "The flag '--host' is no longer valid.
+    pub fn index_from_args(config: &Config, args: &ArgMatches) -> CargoResult<Option<String>> {
+        // TODO: Deprecated
+        // remove once it has been decided --host can be removed
+        // We may instead want to repurpose the host flag, as
+        // mentioned in this issue
+        // https://github.com/rust-lang/cargo/issues/4208
+        let msg = "The flag '--host' is no longer valid.
 
 Previous versions of Cargo accepted this flag, but it is being
 deprecated. The flag is being renamed to 'index', as the flag
@@ -1040,12 +1043,13 @@ This will soon become a hard error, so it's either recommended
 to update to a fixed version or contact the upstream maintainer
 about this warning.";
 
-    let index = match args.value_of("host") {
-        Some(host) => {
-            config.shell().warn(&msg)?;
-            Some(host.to_string())
-        }
-        None => args.value_of("index").map(|s| s.to_string())
-    };
-    Ok(index)
+        let index = match args.value_of("host") {
+            Some(host) => {
+                config.shell().warn(&msg)?;
+                Some(host.to_string())
+            }
+            None => args.value_of("index").map(|s| s.to_string())
+        };
+        Ok(index)
+    }
 }
index 48a8fdf6ee7845003a429fba4dfd54afc8fc8eba..f912c958180ab188ff932ac9c80c4ee0f29c2fd0 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("new")
index a65d0f290ed506d48ff1ad9f6997965b082e6a0f..4f1b87003ed1798c07bfabe6521f41009c36809b 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("owner")
index 83f4e8143228b02f60a14c7fed7424490fb03860..e8215c77c2099a03639ad0bac5c45dfe22310fb5 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("package")
index 81ade796a33f38f68f3cc69c12c004165a0d81fd..764a5cb4b02018d00285b6282b712c82127fb74a 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("pkgid")
index f52f0ee598db6eb6be110def3081c8b03d7a011c..0b0d08546a1c23d6f943946fb5406e7f4a2995ce 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("publish")
index 29d3aa5de8d02332bc53e373f2df299694372e77..c13e7e180e0bc180878a54148edbd67235aeb49a 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("read-manifest")
index f9145b33e6fd286025a82d2dcb9ff63400fbfbc1..85ad63dbd1cc816f57c4efa079cc6b9b04ad063a 100644 (file)
@@ -1,6 +1,6 @@
 use clap::AppSettings;
 
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("run").alias("r")
index 01315415b400e1d7ee09c85b863591fe4d3b5871..bdc5aa1851936df3c6397b535fda21885c2fdf89 100644 (file)
@@ -1,6 +1,6 @@
 use clap::AppSettings;
 
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("rustc")
index 8570b029eda8e138fe230374b0eb07e46b027f5c..9f8d164bf14b4c932e15748933696c842f5d5637 100644 (file)
@@ -1,6 +1,6 @@
 use clap::AppSettings;
 
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("rustdoc")
index 2bcfe193ce824a659c248590d82afab496a67904..9e9f727f1e968ddcdc74244fb41f618bafcb83ee 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("search")
index 7a6dd3a6aabb38ed72ab7d902d606587dd906ebc..d4ae77fa9bcab09e1eaff3ca65bf40608d837031 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 use clap::AppSettings;
 
 pub fn cli() -> App {
index 2c407326de2157a72eef959402ccf68086a32ceb..0ad50d3f51a860c2226b6b61657145c2bda284c6 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("uninstall")
index e5ae0b230096aa586ca168727d50bfbf85d72d24..2b2e82ed510d5f92c80df149a2317e3a9837281e 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("update")
index 530ce844d49ec5dd7b30283e576c774e08593101..890de1154d430121dfd40a6bd44c3b67da6f3131 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("verify-project")
index 535228a0d9713bd2d9515e67573e4a37729a5fae..75c2a9f06ffe2e7f5ddb4923db7892f9bd0484c9 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("version")
index d5e12356bb2ef267e89e7586f87a7e02b7a157d0..41a418554d7fd8525524716e2337b30705dfa429 100644 (file)
@@ -1,4 +1,4 @@
-use super::utils::*;
+use super::command_prelude::*;
 
 pub fn cli() -> App {
     subcommand("yank")