forked from extern/nushell
Send only absolute paths to uu_cp (#11080)
# Description Fixes https://github.com/nushell/nushell/issues/10832 Replaces: https://github.com/nushell/nushell/pull/10843
This commit is contained in:
parent
b8e9293c45
commit
68211dea3e
@ -201,6 +201,14 @@ impl Command for UCp {
|
|||||||
sources.append(&mut app_vals);
|
sources.append(&mut app_vals);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure to send absolute paths to avoid uu_cp looking for cwd in std::env which is not
|
||||||
|
// supported in Nushell
|
||||||
|
for src in sources.iter_mut() {
|
||||||
|
if !src.is_absolute() {
|
||||||
|
*src = nu_path::expand_path_with(&src, &cwd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let options = uu_cp::Options {
|
let options = uu_cp::Options {
|
||||||
overwrite,
|
overwrite,
|
||||||
reflink_mode,
|
reflink_mode,
|
||||||
|
@ -50,11 +50,11 @@ impl Command for UMkdir {
|
|||||||
call: &Call,
|
call: &Call,
|
||||||
_input: PipelineData,
|
_input: PipelineData,
|
||||||
) -> Result<PipelineData, ShellError> {
|
) -> Result<PipelineData, ShellError> {
|
||||||
let path = current_dir(engine_state, stack)?;
|
let cwd = current_dir(engine_state, stack)?;
|
||||||
let mut directories = call
|
let mut directories = call
|
||||||
.rest::<String>(engine_state, stack, 0)?
|
.rest::<String>(engine_state, stack, 0)?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|dir| path.join(dir))
|
.map(|dir| nu_path::expand_path_with(dir, &cwd))
|
||||||
.peekable();
|
.peekable();
|
||||||
|
|
||||||
let is_verbose = call.has_flag("verbose");
|
let is_verbose = call.has_flag("verbose");
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
use std::path::Path;
|
||||||
|
|
||||||
use nu_test_support::fs::file_contents;
|
use nu_test_support::fs::file_contents;
|
||||||
use nu_test_support::fs::{
|
use nu_test_support::fs::{
|
||||||
files_exist_at, AbsoluteFile,
|
files_exist_at, AbsoluteFile,
|
||||||
@ -5,7 +7,6 @@ use nu_test_support::fs::{
|
|||||||
};
|
};
|
||||||
use nu_test_support::nu;
|
use nu_test_support::nu;
|
||||||
use nu_test_support::playground::Playground;
|
use nu_test_support::playground::Playground;
|
||||||
use std::path::Path;
|
|
||||||
|
|
||||||
fn get_file_hash<T: std::fmt::Display>(file: T) -> String {
|
fn get_file_hash<T: std::fmt::Display>(file: T) -> String {
|
||||||
nu!("open -r {} | to text | hash md5", file).out
|
nu!("open -r {} | to text | hash md5", file).out
|
||||||
@ -127,9 +128,9 @@ fn copies_the_directory_inside_directory_if_path_to_copy_is_directory_and_with_r
|
|||||||
vec![
|
vec![
|
||||||
Path::new("yehuda.txt"),
|
Path::new("yehuda.txt"),
|
||||||
Path::new("jttxt"),
|
Path::new("jttxt"),
|
||||||
Path::new("andres.txt")
|
Path::new("andres.txt"),
|
||||||
],
|
],
|
||||||
&expected_dir
|
&expected_dir,
|
||||||
));
|
));
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -175,15 +176,15 @@ fn deep_copies_with_recursive_flag_impl(progress: bool) {
|
|||||||
assert!(expected_dir.exists());
|
assert!(expected_dir.exists());
|
||||||
assert!(files_exist_at(
|
assert!(files_exist_at(
|
||||||
vec![Path::new("errors.txt"), Path::new("multishells.txt")],
|
vec![Path::new("errors.txt"), Path::new("multishells.txt")],
|
||||||
jts_expected_copied_dir
|
jts_expected_copied_dir,
|
||||||
));
|
));
|
||||||
assert!(files_exist_at(
|
assert!(files_exist_at(
|
||||||
vec![Path::new("coverage.txt"), Path::new("commands.txt")],
|
vec![Path::new("coverage.txt"), Path::new("commands.txt")],
|
||||||
andres_expected_copied_dir
|
andres_expected_copied_dir,
|
||||||
));
|
));
|
||||||
assert!(files_exist_at(
|
assert!(files_exist_at(
|
||||||
vec![Path::new("defer-evaluation.txt")],
|
vec![Path::new("defer-evaluation.txt")],
|
||||||
yehudas_expected_copied_dir
|
yehudas_expected_copied_dir,
|
||||||
));
|
));
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -221,7 +222,7 @@ fn copies_using_path_with_wildcard_impl(progress: bool) {
|
|||||||
Path::new("sgml_description.json"),
|
Path::new("sgml_description.json"),
|
||||||
Path::new("utf16.ini"),
|
Path::new("utf16.ini"),
|
||||||
],
|
],
|
||||||
dirs.test()
|
dirs.test(),
|
||||||
));
|
));
|
||||||
|
|
||||||
// Check integrity after the copy is done
|
// Check integrity after the copy is done
|
||||||
@ -266,7 +267,7 @@ fn copies_using_a_glob_impl(progress: bool) {
|
|||||||
Path::new("sgml_description.json"),
|
Path::new("sgml_description.json"),
|
||||||
Path::new("utf16.ini"),
|
Path::new("utf16.ini"),
|
||||||
],
|
],
|
||||||
dirs.test()
|
dirs.test(),
|
||||||
));
|
));
|
||||||
|
|
||||||
// Check integrity after the copy is done
|
// Check integrity after the copy is done
|
||||||
@ -340,7 +341,7 @@ fn copy_files_using_glob_two_parents_up_using_multiple_dots_imp(progress: bool)
|
|||||||
"kevin.txt",
|
"kevin.txt",
|
||||||
"many_more.ppl",
|
"many_more.ppl",
|
||||||
],
|
],
|
||||||
dirs.test()
|
dirs.test(),
|
||||||
));
|
));
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -615,3 +616,18 @@ fn copy_file_with_update_flag_impl(progress: bool) {
|
|||||||
assert_eq!(actual.out, "newest_body");
|
assert_eq!(actual.out, "newest_body");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn cp_with_cd() {
|
||||||
|
Playground::setup("cp_test_20", |_dirs, sandbox| {
|
||||||
|
sandbox
|
||||||
|
.mkdir("tmp_dir")
|
||||||
|
.with_files(vec![FileWithContent("tmp_dir/file.txt", "body")]);
|
||||||
|
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: sandbox.cwd(),
|
||||||
|
r#"do { cd tmp_dir; let f = 'file.txt'; cp $f .. }; open file.txt"#,
|
||||||
|
);
|
||||||
|
assert!(actual.out.contains("body"));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user