1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 11:37:44 +00:00

touch: support @<timestamp> date format

parse `@<seconds since epoch>` as a valid date.
This commit is contained in:
Michael Debertol 2021-06-15 21:52:47 +02:00
parent 83a8ec1a67
commit 84affa2137
2 changed files with 22 additions and 0 deletions

View file

@ -268,6 +268,10 @@ fn parse_date(str: &str) -> FileTime {
return local_tm_to_filetime(to_local(tm));
}
}
if let Ok(tm) = time::strptime(str, "@%s") {
// Don't convert to local time in this case - seconds since epoch are not time-zone dependent
return local_tm_to_filetime(tm);
}
show_error!("Unable to parse date: {}\n", str);
process::exit(1);
}

View file

@ -375,6 +375,24 @@ fn test_touch_set_date2() {
assert_eq!(mtime, start_of_year);
}
#[test]
fn test_touch_set_date3() {
let (at, mut ucmd) = at_and_ucmd!();
let file = "test_touch_set_date";
ucmd.args(&["-d", "@1623786360", file])
.succeeds()
.no_stderr();
assert!(at.file_exists(file));
let expected = FileTime::from_unix_time(1623786360, 0);
let (atime, mtime) = get_file_times(&at, file);
assert_eq!(atime, mtime);
assert_eq!(atime, expected);
assert_eq!(mtime, expected);
}
#[test]
fn test_touch_set_date_wrong_format() {
let (_at, mut ucmd) = at_and_ucmd!();