/// root and all member packages. It will then validate the workspace
/// before returning it, so `Ok` is only returned for valid workspaces.
pub fn new(manifest_path: &Path, config: &'cfg Config) -> CargoResult<Workspace<'cfg>> {
- let target_dir = config.target_dir();
+ let target_dir = config.target_dir()?;
let mut ws = Workspace {
config,
ws.target_dir = if let Some(dir) = target_dir {
Some(dir)
} else {
- ws.config.target_dir()
+ ws.config.target_dir()?
};
ws.members.push(ws.current_manifest.clone());
ws.default_members.push(ws.current_manifest.clone());
let mut needs_cleanup = false;
let overidden_target_dir = if source_id.is_path() {
None
- } else if let Some(dir) = config.target_dir() {
+ } else if let Some(dir) = config.target_dir()? {
Some(dir)
} else if let Ok(td) = TempFileBuilder::new().prefix("cargo-install").tempdir() {
let p = td.path().to_owned();
&self.cwd
}
- pub fn target_dir(&self) -> Option<Filesystem> {
- self.target_dir.clone()
+ pub fn target_dir(&self) -> CargoResult<Option<Filesystem>> {
+ if let Some(ref dir) = self.target_dir {
+ Ok(Some(dir.clone()))
+ } else if let Some(dir) = env::var_os("CARGO_TARGET_DIR") {
+ Ok(Some(Filesystem::new(self.cwd.join(dir))))
+ } else if let Some(val) = self.get_path("build.target-dir")? {
+ let val = self.cwd.join(val.val);
+ Ok(Some(Filesystem::new(val)))
+ } else {
+ Ok(None)
+ }
}
fn get(&self, key: &str) -> CargoResult<Option<ConfigValue>> {
| (None, None, None) => Verbosity::Normal,
};
- let target_dir = if let Some(dir) = target_dir.as_ref() {
- Some(Filesystem::new(self.cwd.join(dir)))
- } else if let Some(dir) = env::var_os("CARGO_TARGET_DIR") {
- Some(Filesystem::new(self.cwd.join(dir)))
- } else if let Ok(Some(val)) = self.get_path("build.target-dir") {
- let val = self.cwd.join(val.val);
- Some(Filesystem::new(val))
- } else {
- None
+ let cli_target_dir = match target_dir.as_ref() {
+ Some(dir) => Some(Filesystem::new(dir.clone())),
+ None => None,
};
self.shell().set_verbosity(verbosity);
self.extra_verbose = extra_verbose;
self.frozen = frozen;
self.locked = locked;
- self.target_dir = target_dir;
+ self.target_dir = cli_target_dir;
self.cli_flags.parse(unstable_flags)?;
Ok(())