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" => true,
+ "init" | "install" | "locate-project" | "login" | "metadata" => true,
_ => false
});
// $mac!(install);
// $mac!(locate_project);
// $mac!(login);
- $mac!(metadata);
+// $mac!(metadata);
$mac!(new);
$mac!(owner);
$mac!(package);
--- /dev/null
+use super::utils::*;
+
+pub fn cli() -> App {
+ subcommand("metadata")
+ .about("Output the resolved dependencies of a project, \
+ the concrete used versions including overrides, \
+ in machine-readable format")
+ .arg_features()
+ .arg(
+ opt("no-deps", "Output information only about the root package \
+ and don't fetch dependencies")
+ )
+ .arg_manifest_path()
+ .arg(
+ opt("format-version", "Format version")
+ .value_name("VERSION").possible_value("1")
+ )
+}
use cargo::core::{Workspace, Source, SourceId, GitReference};
use cargo::util::{ToUrl, CargoResultExt};
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};
use cargo::sources::{GitSource, RegistrySource};
use self::utils::*;
ops::registry_login(config, token, registry)?;
return Ok(());
}
+ ("metadata", Some(args)) => {
+ let ws = workspace_from_args(config, args)?;
+
+ let version = match args.value_of("format-version") {
+ None => {
+ config.shell().warn("\
+ please specify `--format-version` flag explicitly \
+ to avoid compatibility problems"
+ )?;
+ 1
+ }
+ Some(version) => version.parse().unwrap(),
+ };
+
+ let options = OutputMetadataOptions {
+ features: values(args, "features").to_vec(),
+ all_features: args.is_present("all-features"),
+ no_default_features: args.is_present("no-default-features"),
+ no_deps: args.is_present("no-deps"),
+ version,
+ };
+
+ let result = ops::output_metadata(&ws, &options)?;
+ cargo::print_json(&result);
+ return Ok(());
+ }
_ => return Ok(())
}
}
install::cli(),
locate_project::cli(),
login::cli(),
+ metadata::cli(),
])
;
app
mod install;
mod locate_project;
mod login;
+mod metadata;
mod utils {
use clap::{self, SubCommand, AppSettings};