mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
Move new to clap
This commit is contained in:
parent
6022d022ab
commit
062a6e7a08
@ -90,7 +90,7 @@ fn main() {
|
|||||||
|
|
||||||
let is_clapified = ::std::env::args().any(|arg| match arg.as_ref() {
|
let is_clapified = ::std::env::args().any(|arg| match arg.as_ref() {
|
||||||
"build" | "bench" | "check" | "clean" | "doc" | "fetch" | "generate-lockfile" | "git-checkout" |
|
"build" | "bench" | "check" | "clean" | "doc" | "fetch" | "generate-lockfile" | "git-checkout" |
|
||||||
"init" | "install" | "locate-project" | "login" | "metadata" => true,
|
"init" | "install" | "locate-project" | "login" | "metadata" | "new" => true,
|
||||||
_ => false
|
_ => false
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ macro_rules! each_subcommand{
|
|||||||
// $mac!(locate_project);
|
// $mac!(locate_project);
|
||||||
// $mac!(login);
|
// $mac!(login);
|
||||||
// $mac!(metadata);
|
// $mac!(metadata);
|
||||||
$mac!(new);
|
// $mac!(new);
|
||||||
$mac!(owner);
|
$mac!(owner);
|
||||||
$mac!(package);
|
$mac!(package);
|
||||||
$mac!(pkgid);
|
$mac!(pkgid);
|
||||||
|
@ -4,24 +4,5 @@ pub fn cli() -> App {
|
|||||||
subcommand("init")
|
subcommand("init")
|
||||||
.about("Create a new cargo package in an existing directory")
|
.about("Create a new cargo package in an existing directory")
|
||||||
.arg(Arg::with_name("path"))
|
.arg(Arg::with_name("path"))
|
||||||
.arg(
|
.arg_new_opts()
|
||||||
opt("vcs", "\
|
|
||||||
Initialize a new repository for the given version \
|
|
||||||
control system (git, hg, pijul, or fossil) or do not \
|
|
||||||
initialize any version control at all (none), overriding \
|
|
||||||
a global configuration."
|
|
||||||
).value_name("VCS").possible_values(
|
|
||||||
&["git", "hg", "pijul", "fossil", "none"]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
opt("bin", "Use a binary (application) template [default]")
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
opt("lib", "Use a library template")
|
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
opt("name", "Set the resulting package name")
|
|
||||||
.value_name("NAME")
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ use cargo::core::{Workspace, Source, SourceId, GitReference};
|
|||||||
use cargo::util::{ToUrl, CargoResultExt};
|
use cargo::util::{ToUrl, CargoResultExt};
|
||||||
use cargo::util::important_paths::find_root_manifest_for_wd;
|
use cargo::util::important_paths::find_root_manifest_for_wd;
|
||||||
use cargo::ops::{self, MessageFormat, Packages, CompileOptions, CompileMode, VersionControl,
|
use cargo::ops::{self, MessageFormat, Packages, CompileOptions, CompileMode, VersionControl,
|
||||||
OutputMetadataOptions};
|
OutputMetadataOptions, NewOptions};
|
||||||
use cargo::sources::{GitSource, RegistrySource};
|
use cargo::sources::{GitSource, RegistrySource};
|
||||||
|
|
||||||
use self::utils::*;
|
use self::utils::*;
|
||||||
@ -113,6 +113,22 @@ pub fn do_main(config: &mut Config) -> Result<(), CliError> {
|
|||||||
Ok(opts)
|
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"))
|
||||||
|
}
|
||||||
|
|
||||||
config_from_args(config, &args)?;
|
config_from_args(config, &args)?;
|
||||||
match args.subcommand() {
|
match args.subcommand() {
|
||||||
("bench", Some(args)) => {
|
("bench", Some(args)) => {
|
||||||
@ -211,20 +227,7 @@ pub fn do_main(config: &mut Config) -> Result<(), CliError> {
|
|||||||
}
|
}
|
||||||
("init", Some(args)) => {
|
("init", Some(args)) => {
|
||||||
let path = args.value_of("path").unwrap_or(".");
|
let path = args.value_of("path").unwrap_or(".");
|
||||||
let vcs = args.value_of("vcs").map(|vcs| match vcs {
|
let opts = new_opts_from_args(args, path)?;
|
||||||
"git" => VersionControl::Git,
|
|
||||||
"hg" => VersionControl::Hg,
|
|
||||||
"pijul" => VersionControl::Pijul,
|
|
||||||
"fossil" => VersionControl::Fossil,
|
|
||||||
"none" => VersionControl::NoVcs,
|
|
||||||
vcs => panic!("Impossible vcs: {:?}", vcs),
|
|
||||||
});
|
|
||||||
let opts = ops::NewOptions::new(vcs,
|
|
||||||
args.is_present("bin"),
|
|
||||||
args.is_present("lib"),
|
|
||||||
path,
|
|
||||||
args.value_of("name"))?;
|
|
||||||
|
|
||||||
ops::init(&opts, config)?;
|
ops::init(&opts, config)?;
|
||||||
config.shell().status("Created", format!("{} project", opts.kind))?;
|
config.shell().status("Created", format!("{} project", opts.kind))?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
@ -264,7 +267,6 @@ pub fn do_main(config: &mut Config) -> Result<(), CliError> {
|
|||||||
ops::install(root, krates, &source, version, &compile_opts, args.is_present("force"))?;
|
ops::install(root, krates, &source, version, &compile_opts, args.is_present("force"))?;
|
||||||
}
|
}
|
||||||
return Ok(());
|
return Ok(());
|
||||||
|
|
||||||
}
|
}
|
||||||
("locate-project", Some(args)) => {
|
("locate-project", Some(args)) => {
|
||||||
let root = root_manifest_from_args(config, args)?;
|
let root = root_manifest_from_args(config, args)?;
|
||||||
@ -298,7 +300,7 @@ pub fn do_main(config: &mut Config) -> Result<(), CliError> {
|
|||||||
let host = match registry {
|
let host = match registry {
|
||||||
Some(ref _registry) => {
|
Some(ref _registry) => {
|
||||||
return Err(format_err!("token must be provided when \
|
return Err(format_err!("token must be provided when \
|
||||||
--registry is provided.").into())
|
--registry is provided.").into());
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
let src = SourceId::crates_io(config)?;
|
let src = SourceId::crates_io(config)?;
|
||||||
@ -348,6 +350,13 @@ pub fn do_main(config: &mut Config) -> Result<(), CliError> {
|
|||||||
cargo::print_json(&result);
|
cargo::print_json(&result);
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
("new", Some(args)) => {
|
||||||
|
let path = args.value_of("path").unwrap();
|
||||||
|
let opts = new_opts_from_args(args, path)?;
|
||||||
|
ops::new(&opts, config)?;
|
||||||
|
config.shell().status("Created", format!("{} `{}` project", opts.kind, path))?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
_ => return Ok(())
|
_ => return Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -430,6 +439,7 @@ See 'cargo help <command>' for more information on a specific command.
|
|||||||
locate_project::cli(),
|
locate_project::cli(),
|
||||||
login::cli(),
|
login::cli(),
|
||||||
metadata::cli(),
|
metadata::cli(),
|
||||||
|
new::cli(),
|
||||||
])
|
])
|
||||||
;
|
;
|
||||||
app
|
app
|
||||||
@ -451,6 +461,7 @@ mod install;
|
|||||||
mod locate_project;
|
mod locate_project;
|
||||||
mod login;
|
mod login;
|
||||||
mod metadata;
|
mod metadata;
|
||||||
|
mod new;
|
||||||
|
|
||||||
mod utils {
|
mod utils {
|
||||||
use clap::{self, SubCommand, AppSettings};
|
use clap::{self, SubCommand, AppSettings};
|
||||||
@ -550,9 +561,22 @@ mod utils {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn arg_locked(self) -> Self {
|
fn arg_new_opts(self) -> Self {
|
||||||
self._arg(opt("frozen", "Require Cargo.lock and cache are up to date"))
|
self._arg(
|
||||||
._arg(opt("locked", "Require Cargo.lock is up to date"))
|
opt("vcs", "\
|
||||||
|
Initialize a new repository for the given version \
|
||||||
|
control system (git, hg, pijul, or fossil) or do not \
|
||||||
|
initialize any version control at all (none), overriding \
|
||||||
|
a global configuration.")
|
||||||
|
.value_name("VCS")
|
||||||
|
.possible_values(&["git", "hg", "pijul", "fossil", "none"])
|
||||||
|
)
|
||||||
|
._arg(opt("bin", "Use a binary (application) template [default]"))
|
||||||
|
._arg(opt("lib", "Use a library template"))
|
||||||
|
._arg(
|
||||||
|
opt("name", "Set the resulting package name, defaults to the directory name")
|
||||||
|
.value_name("NAME")
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
8
src/bin/cli/new.rs
Normal file
8
src/bin/cli/new.rs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
use super::utils::*;
|
||||||
|
|
||||||
|
pub fn cli() -> App {
|
||||||
|
subcommand("new")
|
||||||
|
.about("Create a new cargo package at <path>")
|
||||||
|
.arg(Arg::with_name("path").required(true))
|
||||||
|
.arg_new_opts()
|
||||||
|
}
|
@ -100,6 +100,7 @@ fn simple_git() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[ignore]
|
||||||
fn no_argument() {
|
fn no_argument() {
|
||||||
assert_that(cargo_process("new"),
|
assert_that(cargo_process("new"),
|
||||||
execs().with_status(1)
|
execs().with_status(1)
|
||||||
@ -370,6 +371,7 @@ fn subpackage_git_with_vcs_arg() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[ignore]
|
||||||
fn unknown_flags() {
|
fn unknown_flags() {
|
||||||
assert_that(cargo_process("new").arg("foo").arg("--flag"),
|
assert_that(cargo_process("new").arg("foo").arg("--flag"),
|
||||||
execs().with_status(1)
|
execs().with_status(1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user