forked from extern/nushell
parent
7c9edbd9ee
commit
026335fff0
@ -184,7 +184,7 @@ impl Command for Cp {
|
||||
canonicalize_with(dst.as_path(), ¤t_dir_path).unwrap_or(dst);
|
||||
|
||||
// ignore when source file is not newer than target file
|
||||
if update_mode && super::util::is_older(&src, &dst) {
|
||||
if update_mode && super::util::is_older(&src, &dst).unwrap_or(false) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -313,7 +313,7 @@ fn move_file(
|
||||
}
|
||||
}
|
||||
|
||||
if update_mode && super::util::is_older(&from, &to) {
|
||||
if update_mode && super::util::is_older(&from, &to).unwrap_or(false) {
|
||||
Ok(false)
|
||||
} else {
|
||||
match move_item(&from, from_span, &to) {
|
||||
|
@ -133,9 +133,11 @@ fn get_interactive_confirmation(prompt: String) -> Result<bool, Box<dyn Error>>
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_older(src: &Path, dst: &Path) -> bool {
|
||||
if !dst.exists() {
|
||||
return true;
|
||||
/// Return `Some(true)` if the last change time of the `src` old than the `dst`,
|
||||
/// otherwisie return `Some(false)`. Return `None` if the `src` or `dst` doesn't exist.
|
||||
pub fn is_older(src: &Path, dst: &Path) -> Option<bool> {
|
||||
if !dst.exists() || !src.exists() {
|
||||
return None;
|
||||
}
|
||||
#[cfg(unix)]
|
||||
{
|
||||
@ -146,7 +148,7 @@ pub fn is_older(src: &Path, dst: &Path) -> bool {
|
||||
let dst_ctime = std::fs::metadata(dst)
|
||||
.map(|m| m.ctime())
|
||||
.unwrap_or(i64::MAX);
|
||||
src_ctime <= dst_ctime
|
||||
Some(src_ctime <= dst_ctime)
|
||||
}
|
||||
#[cfg(windows)]
|
||||
{
|
||||
@ -157,7 +159,7 @@ pub fn is_older(src: &Path, dst: &Path) -> bool {
|
||||
let dst_ctime = std::fs::metadata(dst)
|
||||
.map(|m| m.last_write_time())
|
||||
.unwrap_or(u64::MAX);
|
||||
src_ctime <= dst_ctime
|
||||
Some(src_ctime <= dst_ctime)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -607,5 +607,9 @@ fn copy_file_with_update_flag_impl(progress: bool) {
|
||||
sandbox.with_files(vec![FileWithContent("newest_valid.txt", "newest_body")]);
|
||||
let actual = nu!(cwd: sandbox.cwd(), "cp {} -u newest_valid.txt valid.txt; open valid.txt", progress_flag);
|
||||
assert_eq!(actual.out, "newest_body");
|
||||
|
||||
// when destination doesn't exist
|
||||
let actual = nu!(cwd: sandbox.cwd(), "cp {} -u newest_valid.txt des_missing.txt; open des_missing.txt", progress_flag);
|
||||
assert_eq!(actual.out, "newest_body");
|
||||
});
|
||||
}
|
||||
|
@ -484,5 +484,10 @@ fn mv_with_update_flag() {
|
||||
sandbox.with_files(vec![FileWithContent("newest_valid.txt", "newest_body")]);
|
||||
let actual = nu!(cwd: sandbox.cwd(), "mv -uf newest_valid.txt valid.txt; open valid.txt");
|
||||
assert_eq!(actual.out, "newest_body");
|
||||
|
||||
// when destination doesn't exist
|
||||
sandbox.with_files(vec![FileWithContent("newest_valid.txt", "newest_body")]);
|
||||
let actual = nu!(cwd: sandbox.cwd(), "mv -uf newest_valid.txt des_missing.txt; open des_missing.txt");
|
||||
assert_eq!(actual.out, "newest_body");
|
||||
});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user