Move cd
out of Config::from_matches (#513)
Move `env::set_current_dir` outside of `Config::from_matches()` and into `run()`. It's a bit cleaner this way, and sets us up to make the just process not change its own directory at all, instead explicitly changing the working directory of its child processes.
This commit is contained in:
parent
2ff33de5a1
commit
33ba66dbb6
@ -17,6 +17,7 @@ pub(crate) struct Config<'a> {
|
|||||||
pub(crate) justfile: Option<&'a Path>,
|
pub(crate) justfile: Option<&'a Path>,
|
||||||
pub(crate) working_directory: Option<&'a Path>,
|
pub(crate) working_directory: Option<&'a Path>,
|
||||||
pub(crate) invocation_directory: Result<PathBuf, String>,
|
pub(crate) invocation_directory: Result<PathBuf, String>,
|
||||||
|
pub(crate) search_directory: Option<&'a Path>,
|
||||||
}
|
}
|
||||||
|
|
||||||
mod cmd {
|
mod cmd {
|
||||||
@ -248,6 +249,8 @@ impl<'a> Config<'a> {
|
|||||||
overrides.insert(name, value);
|
overrides.insert(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut search_directory = None;
|
||||||
|
|
||||||
let arguments = raw_arguments
|
let arguments = raw_arguments
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.skip_while(is_override)
|
.skip_while(is_override)
|
||||||
@ -261,9 +264,7 @@ impl<'a> Config<'a> {
|
|||||||
|
|
||||||
let (dir, recipe) = argument.split_at(i + 1);
|
let (dir, recipe) = argument.split_at(i + 1);
|
||||||
|
|
||||||
if let Err(error) = env::set_current_dir(dir) {
|
search_directory = Some(Path::new(dir));
|
||||||
die!("Error changing directory: {}", error);
|
|
||||||
}
|
|
||||||
|
|
||||||
if recipe.is_empty() {
|
if recipe.is_empty() {
|
||||||
return None;
|
return None;
|
||||||
@ -300,6 +301,7 @@ impl<'a> Config<'a> {
|
|||||||
shell: matches.value_of(arg::SHELL).unwrap(),
|
shell: matches.value_of(arg::SHELL).unwrap(),
|
||||||
justfile: matches.value_of(arg::JUSTFILE).map(Path::new),
|
justfile: matches.value_of(arg::JUSTFILE).map(Path::new),
|
||||||
working_directory: matches.value_of(arg::WORKING_DIRECTORY).map(Path::new),
|
working_directory: matches.value_of(arg::WORKING_DIRECTORY).map(Path::new),
|
||||||
|
search_directory,
|
||||||
invocation_directory,
|
invocation_directory,
|
||||||
subcommand,
|
subcommand,
|
||||||
verbosity,
|
verbosity,
|
||||||
@ -326,6 +328,7 @@ impl<'a> Default for Config<'a> {
|
|||||||
working_directory: None,
|
working_directory: None,
|
||||||
invocation_directory: env::current_dir()
|
invocation_directory: env::current_dir()
|
||||||
.map_err(|e| format!("Error getting current directory: {}", e)),
|
.map_err(|e| format!("Error getting current directory: {}", e)),
|
||||||
|
search_directory: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
10
src/run.rs
10
src/run.rs
@ -55,6 +55,16 @@ pub fn run() -> Result<(), i32> {
|
|||||||
|
|
||||||
let justfile = config.justfile;
|
let justfile = config.justfile;
|
||||||
|
|
||||||
|
if let Some(directory) = config.search_directory {
|
||||||
|
if let Err(error) = env::set_current_dir(&directory) {
|
||||||
|
die!(
|
||||||
|
"Error changing directory to {}: {}",
|
||||||
|
directory.display(),
|
||||||
|
error
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let mut working_directory = config.working_directory.map(PathBuf::from);
|
let mut working_directory = config.working_directory.map(PathBuf::from);
|
||||||
|
|
||||||
if let (Some(justfile), None) = (justfile, working_directory.as_ref()) {
|
if let (Some(justfile), None) = (justfile, working_directory.as_ref()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user