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};
+ OutputMetadataOptions, NewOptions};
use cargo::sources::{GitSource, RegistrySource};
use self::utils::*;
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)?;
match args.subcommand() {
("bench", Some(args)) => {
}
("init", Some(args)) => {
let path = args.value_of("path").unwrap_or(".");
- 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),
- });
- let opts = ops::NewOptions::new(vcs,
- args.is_present("bin"),
- args.is_present("lib"),
- path,
- args.value_of("name"))?;
-
+ let opts = new_opts_from_args(args, path)?;
ops::init(&opts, config)?;
config.shell().status("Created", format!("{} project", opts.kind))?;
return Ok(());
ops::install(root, krates, &source, version, &compile_opts, args.is_present("force"))?;
}
return Ok(());
-
}
("locate-project", Some(args)) => {
let root = root_manifest_from_args(config, args)?;
let host = match registry {
Some(ref _registry) => {
return Err(format_err!("token must be provided when \
- --registry is provided.").into())
+ --registry is provided.").into());
}
None => {
let src = SourceId::crates_io(config)?;
cargo::print_json(&result);
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(())
}
}
locate_project::cli(),
login::cli(),
metadata::cli(),
+ new::cli(),
])
;
app
mod locate_project;
mod login;
mod metadata;
+mod new;
mod utils {
use clap::{self, SubCommand, AppSettings};
)
}
- fn arg_locked(self) -> Self {
- self._arg(opt("frozen", "Require Cargo.lock and cache are up to date"))
- ._arg(opt("locked", "Require Cargo.lock is up to date"))
+ fn arg_new_opts(self) -> Self {
+ self._arg(
+ 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")
+ )
}
}