cp: expand target path before checking (#11692)
# Description Fixes: #11683 # User-Facing Changes NaN # Tests + Formatting ~~I don't think we need to add a test, or else it'll copy some file to user's directory, it seems bad.~~ Done. # After Submitting NaN
This commit is contained in:
parent
3e0fa8ff85
commit
16f3d9b4e1
|
@ -172,6 +172,8 @@ impl Command for UCp {
|
||||||
let target_path = PathBuf::from(&nu_utils::strip_ansi_string_unlikely(
|
let target_path = PathBuf::from(&nu_utils::strip_ansi_string_unlikely(
|
||||||
target.item.to_string(),
|
target.item.to_string(),
|
||||||
));
|
));
|
||||||
|
let cwd = current_dir(engine_state, stack)?;
|
||||||
|
let target_path = nu_path::expand_path_with(&target_path, &cwd);
|
||||||
if target.item.as_ref().ends_with(PATH_SEPARATOR) && !target_path.is_dir() {
|
if target.item.as_ref().ends_with(PATH_SEPARATOR) && !target_path.is_dir() {
|
||||||
return Err(ShellError::GenericError {
|
return Err(ShellError::GenericError {
|
||||||
error: "is not a directory".into(),
|
error: "is not a directory".into(),
|
||||||
|
@ -184,7 +186,6 @@ impl Command for UCp {
|
||||||
|
|
||||||
// paths now contains the sources
|
// paths now contains the sources
|
||||||
|
|
||||||
let cwd = current_dir(engine_state, stack)?;
|
|
||||||
let mut sources: Vec<PathBuf> = Vec::new();
|
let mut sources: Vec<PathBuf> = Vec::new();
|
||||||
|
|
||||||
for mut p in paths {
|
for mut p in paths {
|
||||||
|
@ -227,8 +228,6 @@ impl Command for UCp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let target_path = nu_path::expand_path_with(&target_path, &cwd);
|
|
||||||
|
|
||||||
let attributes = make_attributes(preserve)?;
|
let attributes = make_attributes(preserve)?;
|
||||||
|
|
||||||
let options = uu_cp::Options {
|
let options = uu_cp::Options {
|
||||||
|
|
|
@ -1122,3 +1122,19 @@ fn test_cp_inside_glob_metachars_dir() {
|
||||||
assert!(files_exist_at(vec!["test_file.txt"], dirs.test()));
|
assert!(files_exist_at(vec!["test_file.txt"], dirs.test()));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(windows))]
|
||||||
|
#[test]
|
||||||
|
fn test_cp_to_customized_home_directory() {
|
||||||
|
Playground::setup("cp_to_home", |dirs, sandbox| {
|
||||||
|
std::env::set_var("HOME", dirs.test());
|
||||||
|
sandbox.with_files(vec![EmptyFile("test_file.txt")]);
|
||||||
|
let actual = nu!(cwd: dirs.test(), "mkdir test; cp test_file.txt ~/test/");
|
||||||
|
|
||||||
|
assert!(actual.err.is_empty());
|
||||||
|
assert!(files_exist_at(
|
||||||
|
vec!["test_file.txt"],
|
||||||
|
dirs.test().join("test")
|
||||||
|
));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user