rustfmt'd the codebase
This commit is contained in:
@@ -17,40 +17,58 @@ pub fn cd(node: Node) -> ShResult<()> {
|
||||
else {
|
||||
unreachable!()
|
||||
};
|
||||
let cd_span = argv.first().unwrap().span.clone();
|
||||
let cd_span = argv.first().unwrap().span.clone();
|
||||
|
||||
let mut argv = prepare_argv(argv)?;
|
||||
if !argv.is_empty() { argv.remove(0); }
|
||||
if !argv.is_empty() {
|
||||
argv.remove(0);
|
||||
}
|
||||
|
||||
let (new_dir,arg_span) = if let Some((arg, span)) = argv.into_iter().next() {
|
||||
(PathBuf::from(arg),Some(span))
|
||||
let (new_dir, arg_span) = if let Some((arg, span)) = argv.into_iter().next() {
|
||||
(PathBuf::from(arg), Some(span))
|
||||
} else {
|
||||
(PathBuf::from(env::var("HOME").unwrap()),None)
|
||||
(PathBuf::from(env::var("HOME").unwrap()), None)
|
||||
};
|
||||
|
||||
if !new_dir.exists() {
|
||||
let mut err = ShErr::new(
|
||||
ShErrKind::ExecFail,
|
||||
span.clone(),
|
||||
).labeled(cd_span.clone(), "Failed to change directory");
|
||||
if let Some(span) = arg_span {
|
||||
err = err.labeled(span, format!("No such file or directory '{}'", new_dir.display().fg(next_color())));
|
||||
}
|
||||
return Err(err);
|
||||
let mut err = ShErr::new(ShErrKind::ExecFail, span.clone())
|
||||
.labeled(cd_span.clone(), "Failed to change directory");
|
||||
if let Some(span) = arg_span {
|
||||
err = err.labeled(
|
||||
span,
|
||||
format!(
|
||||
"No such file or directory '{}'",
|
||||
new_dir.display().fg(next_color())
|
||||
),
|
||||
);
|
||||
}
|
||||
return Err(err);
|
||||
}
|
||||
|
||||
if !new_dir.is_dir() {
|
||||
return Err(ShErr::new(ShErrKind::ExecFail, span.clone())
|
||||
.labeled(cd_span.clone(), format!("cd: Not a directory '{}'", new_dir.display().fg(next_color()))));
|
||||
return Err(ShErr::new(ShErrKind::ExecFail, span.clone()).labeled(
|
||||
cd_span.clone(),
|
||||
format!(
|
||||
"cd: Not a directory '{}'",
|
||||
new_dir.display().fg(next_color())
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
if let Err(e) = state::change_dir(new_dir) {
|
||||
return Err(ShErr::new(ShErrKind::ExecFail, span.clone())
|
||||
.labeled(cd_span.clone(), format!("cd: Failed to change directory: '{}'", e.fg(Color::Red))));
|
||||
return Err(ShErr::new(ShErrKind::ExecFail, span.clone()).labeled(
|
||||
cd_span.clone(),
|
||||
format!("cd: Failed to change directory: '{}'", e.fg(Color::Red)),
|
||||
));
|
||||
}
|
||||
let new_dir = env::current_dir().map_err(|e| {
|
||||
ShErr::new(ShErrKind::ExecFail, span.clone())
|
||||
.labeled(cd_span.clone(), format!("cd: Failed to get current directory: '{}'", e.fg(Color::Red)))
|
||||
ShErr::new(ShErrKind::ExecFail, span.clone()).labeled(
|
||||
cd_span.clone(),
|
||||
format!(
|
||||
"cd: Failed to get current directory: '{}'",
|
||||
e.fg(Color::Red)
|
||||
),
|
||||
)
|
||||
})?;
|
||||
unsafe { env::set_var("PWD", new_dir) };
|
||||
|
||||
|
||||
Reference in New Issue
Block a user