Skip to content

Commit

Permalink
Remove fs::canonicalize in walk_tree fix.
Browse files Browse the repository at this point in the history
* Remove ConfiFile struct, it is not needed without the fs::canonicalize
  call.
* Don't check if the file is in the stash when walking the tree,
  without "canonicalization" it is not necessary.
  • Loading branch information
jhbabon committed Sep 9, 2016
1 parent ec17212 commit 68d7823
Showing 1 changed file with 9 additions and 35 deletions.
44 changes: 9 additions & 35 deletions src/cargo/util/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,30 +22,6 @@ use util::toml as cargo_toml;

use self::ConfigValue as CV;

#[derive(PartialEq, Eq, Hash)]
struct ConfigFile {
path: Option<PathBuf>,
}

impl ConfigFile {
pub fn new(path: PathBuf) -> ConfigFile {
let canonical = match fs::canonicalize(path) {
Ok(p) => Some(p),
Err(_) => None,
};

ConfigFile { path: canonical }
}

pub fn exist(&self) -> bool {
self.path.is_some()
}

pub fn as_path_buf(&self) -> Option<PathBuf> {
self.path.clone()
}
}

pub struct Config {
home_path: Filesystem,
shell: RefCell<MultiShell>,
Expand Down Expand Up @@ -700,15 +676,14 @@ fn walk_tree<F>(pwd: &Path, mut walk: F) -> CargoResult<()>
where F: FnMut(File, &Path) -> CargoResult<()>
{
let mut current = pwd;
let mut stash: HashSet<ConfigFile> = HashSet::new();
let mut stash: HashSet<PathBuf> = HashSet::new();

loop {
let possible = ConfigFile::new(current.join(".cargo").join("config"));
if possible.exist() && stash.get(&possible).is_none() {
let name = possible.as_path_buf().unwrap();
let file = try!(File::open(&name));
let possible = current.join(".cargo").join("config");
if fs::metadata(&possible).is_ok() {
let file = try!(File::open(&possible));

try!(walk(file, &name));
try!(walk(file, &possible));

stash.insert(possible);
}
Expand All @@ -726,11 +701,10 @@ fn walk_tree<F>(pwd: &Path, mut walk: F) -> CargoResult<()>
human("Cargo couldn't find your home directory. \
This probably means that $HOME was not set.")
}));
let config = ConfigFile::new(home.join("config"));
if config.exist() && stash.get(&config).is_none() {
let name = config.as_path_buf().unwrap();
let file = try!(File::open(&name));
try!(walk(file, &name));
let config = home.join("config");
if !stash.contains(&config) && fs::metadata(&config).is_ok() {
let file = try!(File::open(&config));
try!(walk(file, &config));
}

Ok(())
Expand Down

0 comments on commit 68d7823

Please sign in to comment.