Skip to content

Commit

Permalink
cp: expand target path before checking (nushell#11692)
Browse files Browse the repository at this point in the history
# Description
Fixes: nushell#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
  • Loading branch information
WindSoilder authored and dmatos2012 committed Feb 20, 2024
1 parent 9340c6c commit 811ddd3
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
5 changes: 2 additions & 3 deletions crates/nu-command/src/filesystem/ucp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ impl Command for UCp {
let target_path = PathBuf::from(&nu_utils::strip_ansi_string_unlikely(
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() {
return Err(ShellError::GenericError {
error: "is not a directory".into(),
Expand All @@ -184,7 +186,6 @@ impl Command for UCp {

// paths now contains the sources

let cwd = current_dir(engine_state, stack)?;
let mut sources: Vec<PathBuf> = Vec::new();

for mut p in paths {
Expand Down Expand Up @@ -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 options = uu_cp::Options {
Expand Down
16 changes: 16 additions & 0 deletions crates/nu-command/tests/commands/ucp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1122,3 +1122,19 @@ fn test_cp_inside_glob_metachars_dir() {
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")
));
})
}

0 comments on commit 811ddd3

Please sign in to comment.