Ok(())
}
("locate-project", Some(args)) => {
- let root = root_manifest_from_args(config, args)?;
+ let root = args.root_manifest(config)?;
let root = root.to_str()
.ok_or_else(|| format_err!("your project path contains characters \
Ok(())
}
("read-manifest", Some(args)) => {
- let root = root_manifest_from_args(config, args)?;
+ let root = args.root_manifest(config)?;
let pkg = Package::for_path(&root, config)?;
cargo::print_json(&pkg);
Ok(())
}
let mut contents = String::new();
- let filename = match root_manifest_from_args(config, args) {
+ let filename = match args.root_manifest(config) {
Ok(filename) => filename,
Err(e) => fail("invalid", &e.to_string()),
};
])
}
+
+pub trait ArgMatchesExt: Sized {
+ 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 _value_of(&self, name: &str) -> Option<&str>;
+}
+
+impl<'a> ArgMatchesExt for ArgMatches<'a> {
+ fn _value_of(&self, name: &str) -> Option<&str> {
+ self.value_of(name)
+ }
+}
+
pub fn values(args: &ArgMatches, name: &str) -> Vec<String> {
args.values_of(name).unwrap_or_default()
.map(|s| s.to_string())
.collect()
}
-
-pub fn root_manifest_from_args(config: &Config, args: &ArgMatches) -> CargoResult<PathBuf> {
- let manifest_path = args.value_of("manifest-path").map(|s| s.to_string());
- find_root_manifest_for_wd(manifest_path, config.cwd())
-}
-
pub fn workspace_from_args<'a>(config: &'a Config, args: &ArgMatches) -> CargoResult<Workspace<'a>> {
- let root = root_manifest_from_args(config, args)?;
+ let root = args.root_manifest(config)?;
Workspace::new(&root, config)
}
}
/// Find the root Cargo.toml
-pub fn find_root_manifest_for_wd(manifest_path: Option<String>, cwd: &Path)
+pub fn find_root_manifest_for_wd(manifest_path: Option<&str>, cwd: &Path)
-> CargoResult<PathBuf> {
match manifest_path {
Some(path) => {