if parent dir
This commit is contained in:
parent
5dc5bb11aa
commit
352d3a03b9
|
@ -57,17 +57,6 @@ impl DirectorySpecificEnvironment {
|
||||||
Err(ShellError::untagged_runtime_error("No trusted directories"))
|
Err(ShellError::untagged_runtime_error("No trusted directories"))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_parent_or_same(&self, parent: &PathBuf, child: &PathBuf) -> bool {
|
|
||||||
let mut child = Some(child.as_path());
|
|
||||||
while let Some(c) = child {
|
|
||||||
if c == parent {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
child = child.expect("Can't be none").parent();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn env_vars_to_add(&mut self) -> Result<IndexMap<EnvKey, EnvVal>, ShellError> {
|
pub fn env_vars_to_add(&mut self) -> Result<IndexMap<EnvKey, EnvVal>, ShellError> {
|
||||||
let current_dir = std::env::current_dir()?;
|
let current_dir = std::env::current_dir()?;
|
||||||
let mut working_dir = Some(current_dir.as_path());
|
let mut working_dir = Some(current_dir.as_path());
|
||||||
|
@ -75,17 +64,15 @@ impl DirectorySpecificEnvironment {
|
||||||
|
|
||||||
//If we are in the last seen directory, do nothing
|
//If we are in the last seen directory, do nothing
|
||||||
//If we are in a parent directory to last_seen_directory, just return without applying .nu-env in the parent directory - they were already applied earlier.
|
//If we are in a parent directory to last_seen_directory, just return without applying .nu-env in the parent directory - they were already applied earlier.
|
||||||
if self.is_parent_or_same(¤t_dir, &self.last_seen_directory) {
|
//If current dir is parent to last_seen_directory, current.cmp(last) returns less
|
||||||
|
//if current dir is the same as last_seen, current.cmp(last) returns equal
|
||||||
|
if current_dir.cmp(&self.last_seen_directory) != std::cmp::Ordering::Greater {
|
||||||
|
self.last_seen_directory = current_dir;
|
||||||
return Ok(vars_to_add);
|
return Ok(vars_to_add);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Start in the current directory, then traverse towards the root with working_dir to see if we are in a subdirectory of a valid directory.
|
//Start in the current directory, then traverse towards the root with working_dir to see if we are in a subdirectory of a valid directory.
|
||||||
while let Some(wdir) = working_dir {
|
while let Some(wdir) = working_dir {
|
||||||
//If we are in a subdirectory to last_seen_directory, we should apply all .nu-envs up until last_seen_directory
|
|
||||||
if wdir == self.last_seen_directory {
|
|
||||||
self.last_seen_directory = current_dir;
|
|
||||||
return Ok(vars_to_add);
|
|
||||||
}
|
|
||||||
let wdirenv = wdir.join(".nu-env");
|
let wdirenv = wdir.join(".nu-env");
|
||||||
if wdirenv.exists() {
|
if wdirenv.exists() {
|
||||||
let toml_doc = self.toml_if_directory_is_trusted(&wdirenv)?;
|
let toml_doc = self.toml_if_directory_is_trusted(&wdirenv)?;
|
||||||
|
@ -119,6 +106,13 @@ impl DirectorySpecificEnvironment {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//If we are in a subdirectory to last_seen_directory, we should apply all .nu-envs up until last_seen_directory
|
||||||
|
if wdir == self.last_seen_directory {
|
||||||
|
self.last_seen_directory = current_dir;
|
||||||
|
return Ok(vars_to_add);
|
||||||
|
}
|
||||||
|
|
||||||
working_dir = working_dir //Keep going up in the directory structure with .parent()
|
working_dir = working_dir //Keep going up in the directory structure with .parent()
|
||||||
.expect("This should not be None because of the while condition")
|
.expect("This should not be None because of the while condition")
|
||||||
.parent();
|
.parent();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user