Move package to clap
authorAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 7 Mar 2018 14:54:10 +0000 (17:54 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 8 Mar 2018 20:30:46 +0000 (23:30 +0300)
src/bin/cargo.rs
src/bin/cli/mod.rs
src/bin/cli/package.rs [new file with mode: 0644]

index a85c0e5c6c634df47169881a22258a6083656d9b..bb7e9319e2acc5b0fbfc1e85b2d24443f3dacf4f 100644 (file)
@@ -91,7 +91,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" | "locate-project" | "login" | "metadata" | "new" |
-        "owner" => true,
+        "owner" | "package" => true,
         _ => false
     });
 
@@ -135,7 +135,7 @@ macro_rules! each_subcommand{
 //        $mac!(metadata);
 //        $mac!(new);
 //        $mac!(owner);
-        $mac!(package);
+//        $mac!(package);
         $mac!(pkgid);
         $mac!(publish);
         $mac!(read_manifest);
index f394b3ae886e52085f225aa9b6d17ecc65660334..e2dbbb1fd87ea7037db8e9bad552c5e7a015a019 100644 (file)
@@ -73,6 +73,10 @@ pub fn do_main(config: &mut Config) -> Result<(), CliError> {
         Workspace::new(&root, config)
     }
 
+    fn jobs_from_args(args: &ArgMatches) -> Option<u32> { //FIXME: validation
+        args.value_of("jobs").and_then(|v| v.parse().ok())
+    }
+
     fn compile_options_from_args<'a>(
         config: &'a Config,
         args: &'a ArgMatches<'a>,
@@ -92,7 +96,7 @@ pub fn do_main(config: &mut Config) -> Result<(), CliError> {
 
         let opts = CompileOptions {
             config,
-            jobs: args.value_of("jobs").and_then(|v| v.parse().ok()),
+            jobs: jobs_from_args(args),
             target: args.value_of("target"),
             features: &values(args, "features"),
             all_features: args.is_present("all-features"),
@@ -377,11 +381,25 @@ pub fn do_main(config: &mut Config) -> Result<(), CliError> {
                 to_remove: args.values_of("remove")
                     .map(|xs| xs.map(|s| s.to_string()).collect()),
                 list: args.is_present("list"),
-                registry: args.value_of("registry").map(|s| s.to_string()),
+                registry,
             };
             ops::modify_owners(config, &opts)?;
             return Ok(());
         }
+        ("package", Some(args)) => {
+            let ws = workspace_from_args(config, args)?;
+            ops::package(&ws, &ops::PackageOpts {
+                config,
+                verify: !args.is_present("no-verify"),
+                list: args.is_present("list"),
+                check_metadata: !args.is_present("no-metadata"),
+                allow_dirty: args.is_present("allow-dirty"),
+                target: args.value_of("target"),
+                jobs: jobs_from_args(args),
+                registry: None,
+            })?;
+            return Ok(());
+        }
         _ => return Ok(())
     }
 }
@@ -466,6 +484,7 @@ See 'cargo help <command>' for more information on a specific command.
             metadata::cli(),
             new::cli(),
             owner::cli(),
+            package::cli(),
         ])
     ;
     app
@@ -489,6 +508,7 @@ mod login;
 mod metadata;
 mod new;
 mod owner;
+mod package;
 
 mod utils {
     use clap::{self, SubCommand, AppSettings};
diff --git a/src/bin/cli/package.rs b/src/bin/cli/package.rs
new file mode 100644 (file)
index 0000000..83f4e81
--- /dev/null
@@ -0,0 +1,13 @@
+use super::utils::*;
+
+pub fn cli() -> App {
+    subcommand("package")
+        .about("Assemble the local package into a distributable tarball")
+        .arg(opt("list", "Print files included in a package without making one").short("l"))
+        .arg(opt("no-verify", "Don't verify the contents by building them"))
+        .arg(opt("no-metadata", "Ignore warnings about a lack of human-usable metadata"))
+        .arg(opt("allow-dirty", "Allow dirty working directories to be packaged"))
+        .arg_target_triple("Build for the target triple")
+        .arg_manifest_path()
+        .arg_jobs()
+}