blob: c9a352453f23b936aee3ed82124ccd47be20c805 [file] [log] [blame] [edit]
use cargo::util::{CliResult, CliError, human, ChainError, Config};
use cargo::util::important_paths::{find_root_manifest_for_wd};
#[derive(RustcDecodable)]
pub struct LocateProjectFlags {
flag_manifest_path: Option<String>,
}
pub const USAGE: &'static str = "
Print a JSON representation of a Cargo.toml file's location
Usage:
cargo locate-project [options]
Options:
--manifest-path PATH Path to the manifest to locate
-h, --help Print this message
";
#[derive(RustcEncodable)]
pub struct ProjectLocation {
root: String
}
pub fn execute(flags: LocateProjectFlags,
config: &Config) -> CliResult<Option<ProjectLocation>> {
let root = find_root_manifest_for_wd(flags.flag_manifest_path, config.cwd())?;
let string = root.to_str()
.chain_error(|| human("Your project path contains \
characters not representable in \
Unicode"))
.map_err(|e| CliError::new(e, 1))?;
Ok(Some(ProjectLocation { root: string.to_string() }))
}