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 \
+ requires -Zunstable-options to use.").into());
+ }
+ Ok(Some(registry.to_string()))
+ }
+ None => Ok(None),
+ }
+ }
+
config_from_args(config, &args)?;
match args.subcommand() {
("bench", Some(args)) => {
return Ok(());
}
("login", Some(args)) => {
- let registry = args.value_of("registry").map(|s| s.to_string());
- if registry.is_some() && !config.cli_unstable().unstable_options {
- return Err(format_err!("registry option is an unstable feature and \
- requires -Zunstable-options to use.").into());
- }
+ let registry = registry_from_args(config, args)?;
let token = match args.value_of("token") {
Some(token) => token.to_string(),
config.shell().status("Created", format!("{} `{}` project", opts.kind, path))?;
Ok(())
}
+ ("owner", Some(args)) => {
+ let registry = registry_from_args(config, args)?;
+ let opts = ops::OwnersOptions {
+ krate: args.value_of("crate").map(|s| s.to_string()),
+ token: args.value_of("token").map(|s| s.to_string()),
+ index: args.value_of("index").map(|s| s.to_string()),
+ to_add: args.values_of("add")
+ .map(|xs| xs.map(|s| s.to_string()).collect()),
+ 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()),
+ };
+ ops::modify_owners(config, &opts)?;
+ return Ok(());
+ }
_ => return Ok(())
}
}
login::cli(),
metadata::cli(),
new::cli(),
+ owner::cli(),
])
;
app
mod login;
mod metadata;
mod new;
+mod owner;
mod utils {
use clap::{self, SubCommand, AppSettings};
--- /dev/null
+use super::utils::*;
+
+pub fn cli() -> App {
+ subcommand("owner")
+ .about("Manage the owners of a crate on the registry")
+ .arg(Arg::with_name("crate"))
+ .arg(
+ opt("add", "Name of a user or team to add as an owner")
+ .short("a").value_name("LOGIN").multiple(true)
+ )
+ .arg(
+ opt("remove", "Name of a user or team to remove as an owner")
+ .short("r").value_name("LOGIN").multiple(true)
+ )
+ .arg(opt("list", "List owners of a crate").short("l"))
+ .arg(opt("index", "Registry index to modify owners for").value_name("INDEX"))
+ .arg(opt("token", "API token to use when authenticating").value_name("TOKEN"))
+ .arg(opt("registry", "Registry to use").value_name("REGISTRY"))
+ .after_help("\
+ This command will modify the owners for a package
+ on the specified registry(or
+ default).Note that owners of a package can upload new versions, yank old
+ versions.Explicitly named owners can also modify the set of owners, so take
+ caution!
+
+ See http://doc.crates.io/crates-io.html#cargo-owner for detailed documentation
+ and troubleshooting.")
+}