match args.subcommand() {
("bench", Some(args)) => {
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
let mut compile_opts = compile_options_from_args(config, args, CompileMode::Bench)?;
compile_opts.release = true;
}
}
("build", Some(args)) => {
- let mut ws = workspace_from_args(config, args)?;
+ let mut ws = args.workspace(config)?;
if config.cli_unstable().avoid_dev_deps {
ws.set_require_optional_deps(false);
}
Ok(())
}
("check", Some(args)) => {
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
let test = match args.value_of("profile") {
Some("test") => true,
None => false,
Ok(())
}
("clean", Some(args)) => {
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
let opts = ops::CleanOptions {
config,
spec: values(args, "package"),
Ok(())
}
("doc", Some(args)) => {
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
let mode = ops::CompileMode::Doc { deps: !args.is_present("no-deps") };
let compile_opts = compile_options_from_args(config, args, mode)?;
let doc_opts = ops::DocOptions {
Ok(())
}
("fetch", Some(args)) => {
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
ops::fetch(&ws)?;
Ok(())
}
("generate-lockfile", Some(args)) => {
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
ops::generate_lockfile(&ws)?;
Ok(())
}
Ok(())
}
("metadata", Some(args)) => {
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
let version = match args.value_of("format-version") {
None => {
Ok(())
}
("package", Some(args)) => {
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
ops::package(&ws, &ops::PackageOpts {
config,
verify: !args.is_present("no-verify"),
check_metadata: !args.is_present("no-metadata"),
allow_dirty: args.is_present("allow-dirty"),
target: args.value_of("target"),
- jobs: jobs_from_args(args)?,
+ jobs: args.jobs()?,
registry: None,
})?;
Ok(())
}
("pkgid", Some(args)) => {
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
let spec = args.value_of("spec").or(args.value_of("package"));
let spec = ops::pkgid(&ws, spec)?;
println!("{}", spec);
}
("publish", Some(args)) => {
let registry = registry_from_args(config, args)?;
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
let index = index_from_args(config, args)?;
ops::publish(&ws, &ops::PublishOpts {
verify: !args.is_present("no-verify"),
allow_dirty: args.is_present("allow-dirty"),
target: args.value_of("target"),
- jobs: jobs_from_args(args)?,
+ jobs: args.jobs()?,
dry_run: args.is_present("dry-run"),
registry,
})?;
Ok(())
}
("run", Some(args)) => {
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
let mut compile_opts = compile_options_from_args_for_single_package(
config, args, CompileMode::Build,
}
}
("rustc", Some(args)) => {
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
let mode = match args.value_of("profile") {
Some("dev") | None => CompileMode::Build,
Some("test") => CompileMode::Test,
Ok(())
}
("rustdoc", Some(args)) => {
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
let mut compile_opts = compile_options_from_args_for_single_package(
config, args, CompileMode::Doc { deps: false },
)?;
Ok(())
}
("test", Some(args)) => {
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
let mut compile_opts = compile_options_from_args(config, args, CompileMode::Test)?;
let doc = args.is_present("doc");
Ok(())
}
("update", Some(args)) => {
- let ws = workspace_from_args(config, args)?;
+ let ws = args.workspace(config)?;
let update_opts = ops::UpdateOptions {
aggressive: args.is_present("aggressive"),
}
-pub trait ArgMatchesExt: Sized {
+pub trait ArgMatchesExt {
fn root_manifest(&self, config: &Config) -> CargoResult<PathBuf> {
let manifest_path = self._value_of("manifest-path");
find_root_manifest_for_wd(manifest_path, config.cwd())
}
+ fn workspace<'a>(&self, config: &'a Config) -> CargoResult<Workspace<'a>> {
+ let root = self.root_manifest(config)?;
+ Workspace::new(&root, config)
+ }
+
+ fn jobs(&self) -> CargoResult<Option<u32>> {
+ let jobs = match self._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 _value_of(&self, name: &str) -> Option<&str>;
}
.collect()
}
-pub fn workspace_from_args<'a>(config: &'a Config, args: &ArgMatches) -> CargoResult<Workspace<'a>> {
- let root = args.root_manifest(config)?;
- Workspace::new(&root, config)
-}
-
-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)
-}
-
pub fn compile_options_from_args<'a>(
config: &'a Config,
args: &'a ArgMatches<'a>,
let opts = CompileOptions {
config,
- jobs: jobs_from_args(args)?,
+ jobs: args.jobs()?,
target: args.value_of("target"),
features: values(args, "features"),
all_features: args.is_present("all-features"),