diff --git a/crates/nu-command/src/filesystem/touch.rs b/crates/nu-command/src/filesystem/touch.rs index b5070c97c6..f212c15a7f 100644 --- a/crates/nu-command/src/filesystem/touch.rs +++ b/crates/nu-command/src/filesystem/touch.rs @@ -1,7 +1,7 @@ use std::fs::OpenOptions; use std::path::Path; -use chrono::{DateTime, Datelike, Local}; +use chrono::{DateTime, Local}; use filetime::FileTime; use nu_engine::CallExt; @@ -9,13 +9,6 @@ use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{Category, Example, PipelineData, ShellError, Signature, Spanned, SyntaxShape}; -use crate::parse_date_from_string; - -enum AddYear { - Full, - FirstDigits, -} - #[derive(Clone)] pub struct Touch; @@ -35,18 +28,6 @@ impl Command for Touch { SyntaxShape::Filepath, "the path of the file you want to create", ) - .named( - "timestamp", - SyntaxShape::String, - "change the file or directory time to a timestamp. Format: [[CC]YY]MMDDhhmm[.ss]\n\n If neither YY or CC is given, the current year will be assumed. If YY is specified, but CC is not, CC will be derived as follows:\n \tIf YY is between [69, 99], CC is 19\n \tIf YY is between [00, 68], CC is 20\n Note: It is expected that in a future version of this standard the default century inferred from a 2-digit year will change", - Some('t'), - ) - .named( - "date", - SyntaxShape::String, - "change the file or directory time to a date", - Some('d'), - ) .named( "reference", SyntaxShape::String, @@ -85,8 +66,6 @@ impl Command for Touch { ) -> Result { let mut change_mtime: bool = call.has_flag("modified"); let mut change_atime: bool = call.has_flag("access"); - let use_stamp: bool = call.has_flag("timestamp"); - let use_date: bool = call.has_flag("date"); let use_reference: bool = call.has_flag("reference"); let no_create: bool = call.has_flag("no-create"); let target: String = call.req(engine_state, stack, 0)?; @@ -105,111 +84,6 @@ impl Command for Touch { date = Some(Local::now()); } - if use_stamp || use_date { - let (val, span) = if use_stamp { - let stamp: Option> = - call.get_flag(engine_state, stack, "timestamp")?; - let (stamp, span) = match stamp { - Some(stamp) => (stamp.item, stamp.span), - None => { - return Err(ShellError::MissingParameter( - "timestamp".to_string(), - call.head, - )); - } - }; - - // Checks for the seconds stamp and removes the '.' delimiter if any - let (val, has_sec): (String, bool) = match stamp.split_once('.') { - Some((dtime, sec)) => match sec.parse::() { - Ok(sec) if sec < 60 => (format!("{}{}", dtime, sec), true), - _ => { - return Err(ShellError::UnsupportedInput( - "input has an invalid timestamp".to_string(), - span, - )) - } - }, - None => (stamp.to_string(), false), - }; - - let size = val.len(); - - // Each stamp is a 2 digit number and the whole stamp must not be less than 4 or greater than 7 pairs - if (size % 2 != 0 || !(8..=14).contains(&size)) || val.parse::().is_err() { - return Err(ShellError::UnsupportedInput( - "input has an invalid timestamp".to_string(), - span, - )); - } - - let add_year: Option = if has_sec { - match size { - 10 => Some(AddYear::Full), - 12 => Some(AddYear::FirstDigits), - 14 => None, - _ => { - return Err(ShellError::UnsupportedInput( - "input has an invalid timestamp".to_string(), - span, - )) - } - } - } else { - match size { - 8 => Some(AddYear::Full), - 10 => Some(AddYear::FirstDigits), - 12 => None, - _ => { - return Err(ShellError::UnsupportedInput( - "input has an invalid timestamp".to_string(), - span, - )) - } - } - }; - - if let Some(add_year) = add_year { - let year = Local::now().year(); - match add_year { - AddYear::Full => (format!("{}{}", year, val), span), - AddYear::FirstDigits => { - // Compliance with the Unix version of touch - let yy = val[0..2] - .parse::() - .expect("should be a valid 2 digit number"); - let mut year = 20; - if (69..=99).contains(&yy) { - year = 19; - } - (format!("{}{}", year, val), span) - } - } - } else { - (val, span) - } - } else { - let date_string: Option> = - call.get_flag(engine_state, stack, "date")?; - match date_string { - Some(date_string) => (date_string.item, date_string.span), - None => { - return Err(ShellError::MissingParameter("date".to_string(), call.head)); - } - } - }; - - date = if let Ok(parsed_date) = parse_date_from_string(&val, span) { - Some(parsed_date.into()) - } else { - let flag = if use_stamp { "timestamp" } else { "date" }; - return Err(ShellError::UnsupportedInput( - format!("input has an invalid {}", flag), - span, - )); - }; - } - if use_reference { let reference: Option> = call.get_flag(engine_state, stack, "reference")?; @@ -336,11 +210,6 @@ impl Command for Touch { example: "touch -m fixture.json", result: None, }, - Example { - description: "Creates files d and e and set its last modified time to a timestamp", - example: "touch -m -t 201908241230.30 d e", - result: None, - }, Example { description: "Changes the last modified time of files a, b and c to a date", example: r#"touch -m -d "yesterday" a b c"#, @@ -356,11 +225,6 @@ impl Command for Touch { example: r#"touch -a -d "August 24, 2019; 12:30:30" fixture.json"#, result: None, }, - Example { - description: "Changes both last modified and accessed time of a, b and c to a timestamp only if they exist", - example: r#"touch -c -t 201908241230.30 a b c"#, - result: None, - }, ] } } diff --git a/crates/nu-command/tests/commands/touch.rs b/crates/nu-command/tests/commands/touch.rs index 220ebd688f..fc64f31fd3 100644 --- a/crates/nu-command/tests/commands/touch.rs +++ b/crates/nu-command/tests/commands/touch.rs @@ -1,4 +1,4 @@ -use chrono::{Date, DateTime, Local, TimeZone}; +use chrono::{Date, DateTime, Local}; use nu_test_support::fs::Stub; use nu_test_support::nu; use nu_test_support::playground::Playground; @@ -32,185 +32,6 @@ fn creates_two_files() { }) } -#[test] -fn change_modified_time_of_file() { - Playground::setup("change_time_test_3", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - nu!( - cwd: dirs.test(), - "touch -m -t 201908241230.30 file.txt" - ); - - let path = dirs.test().join("file.txt"); - - let time = Local.ymd(2019, 8, 24).and_hms(12, 30, 30); - let actual_time: DateTime = - DateTime::from(path.metadata().unwrap().modified().unwrap()); - - assert_eq!(time, actual_time); - }) -} - -#[test] -fn create_and_change_modified_time_of_file() { - Playground::setup("change_time_test_4", |dirs, _sandbox| { - nu!( - cwd: dirs.test(), - "touch -m -t 201908241230 i_will_be_created.txt" - ); - - let path = dirs.test().join("i_will_be_created.txt"); - assert!(path.exists()); - let time = Local.ymd(2019, 8, 24).and_hms(12, 30, 0); - - let actual_time: DateTime = - DateTime::from(path.metadata().unwrap().modified().unwrap()); - - assert_eq!(time, actual_time); - }) -} - -#[test] -fn change_modified_time_of_file_no_year() { - Playground::setup("change_time_test_5", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - nu!( - cwd: dirs.test(), - "touch -m -t 08241230.12 file.txt" - ); - - let path = dirs.test().join("file.txt"); - - let time = Local.ymd(2022, 8, 24).and_hms(12, 30, 12); - let actual_time: DateTime = - DateTime::from(path.metadata().unwrap().modified().unwrap()); - - assert_eq!(time, actual_time); - }) -} - -#[test] -fn change_modified_time_of_file_no_year_no_second() { - Playground::setup("change_time_test_6", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - nu!( - cwd: dirs.test(), - "touch -m -t 08241230 file.txt" - ); - - let path = dirs.test().join("file.txt"); - - let time = Local.ymd(2022, 8, 24).and_hms(12, 30, 0); - let actual_time: DateTime = - DateTime::from(path.metadata().unwrap().modified().unwrap()); - - assert_eq!(time, actual_time); - }) -} - -#[test] -fn change_modified_time_of_files() { - Playground::setup("change_time_test_7", |dirs, sandbox| { - sandbox.with_files(vec![ - Stub::EmptyFile("file.txt"), - Stub::EmptyFile("file2.txt"), - ]); - - nu!( - cwd: dirs.test(), - "touch -m -t 1908241230.30 file.txt file2.txt" - ); - - let path = dirs.test().join("file.txt"); - - let time = Local.ymd(2019, 8, 24).and_hms(12, 30, 30); - let actual_time: DateTime = - DateTime::from(path.metadata().unwrap().modified().unwrap()); - - assert_eq!(time, actual_time); - - let path = dirs.test().join("file2.txt"); - - let actual_time: DateTime = - DateTime::from(path.metadata().unwrap().modified().unwrap()); - - assert_eq!(time, actual_time); - }) -} - -#[test] -fn errors_if_change_modified_time_of_file_with_invalid_timestamp() { - Playground::setup("change_time_test_8", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - let mut outcome = nu!( - cwd: dirs.test(), - "touch -m -t 1908241230.3030 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -m -t 1908241230.3O file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -m -t 08241230.3 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -m -t 8241230 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -m -t 01908241230 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -m -t 082412.3012 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -m -t 0824.123012 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -m -t 08.24123012 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -m -t 0.824123012 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - }) -} - #[test] fn change_modified_time_of_file_to_today() { Playground::setup("change_time_test_9", |dirs, sandbox| { @@ -232,234 +53,6 @@ fn change_modified_time_of_file_to_today() { }) } -#[test] -fn change_modified_time_to_date() { - Playground::setup("change_time_test_10", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - nu!( - cwd: dirs.test(), - r#"touch -m -d "August 24, 2019; 12:30:30" file.txt"# - ); - - let path = dirs.test().join("file.txt"); - - let time = Local.ymd(2019, 8, 24).and_hms(12, 30, 30); - let actual_time: DateTime = - DateTime::from(path.metadata().unwrap().modified().unwrap()); - - assert_eq!(time, actual_time); - }) -} - -#[test] -fn change_modified_time_to_time_of_reference() { - Playground::setup("change_time_test_11", |dirs, sandbox| { - sandbox.with_files(vec![ - Stub::EmptyFile("file.txt"), - Stub::EmptyFile("reference.txt"), - ]); - - nu!( - cwd: dirs.test(), - r#"touch -m -t 201908241230.30 reference.txt"# - ); - - nu!( - cwd: dirs.test(), - r#"touch -m -r reference.txt file.txt"# - ); - - let path = dirs.test().join("file.txt"); - let ref_path = dirs.test().join("reference.txt"); - - let time: DateTime = DateTime::from(path.metadata().unwrap().modified().unwrap()); - let ref_time: DateTime = - DateTime::from(ref_path.metadata().unwrap().modified().unwrap()); - - assert_eq!(time, ref_time); - }) -} - -#[test] -fn change_access_time_of_file() { - Playground::setup("change_time_test_12", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - nu!( - cwd: dirs.test(), - "touch -a -t 201908241230.30 file.txt" - ); - - let path = dirs.test().join("file.txt"); - - let time = Local.ymd(2019, 8, 24).and_hms(12, 30, 30); - let actual_time: DateTime = - DateTime::from(path.metadata().unwrap().accessed().unwrap()); - - assert_eq!(time, actual_time); - }) -} - -#[test] -fn create_and_change_access_time_of_file() { - Playground::setup("change_time_test_13", |dirs, _sandbox| { - nu!( - cwd: dirs.test(), - "touch -a -t 201908241230 i_will_be_created.txt" - ); - - let path = dirs.test().join("i_will_be_created.txt"); - assert!(path.exists()); - let time = Local.ymd(2019, 8, 24).and_hms(12, 30, 0); - - let actual_time: DateTime = - DateTime::from(path.metadata().unwrap().accessed().unwrap()); - - assert_eq!(time, actual_time); - }) -} - -#[test] -fn change_access_time_of_file_no_year() { - Playground::setup("change_time_test_14", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - nu!( - cwd: dirs.test(), - "touch -a -t 08241230.12 file.txt" - ); - - let path = dirs.test().join("file.txt"); - - let time = Local.ymd(2022, 8, 24).and_hms(12, 30, 12); - let actual_time: DateTime = - DateTime::from(path.metadata().unwrap().accessed().unwrap()); - - assert_eq!(time, actual_time); - }) -} - -#[test] -fn change_access_time_of_file_no_year_no_second() { - Playground::setup("change_time_test_15", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - nu!( - cwd: dirs.test(), - "touch -a -t 08241230 file.txt" - ); - - let path = dirs.test().join("file.txt"); - - let time = Local.ymd(2022, 8, 24).and_hms(12, 30, 0); - let actual_time: DateTime = - DateTime::from(path.metadata().unwrap().accessed().unwrap()); - - assert_eq!(time, actual_time); - }) -} - -#[test] -fn change_access_time_of_files() { - Playground::setup("change_time_test_16", |dirs, sandbox| { - sandbox.with_files(vec![ - Stub::EmptyFile("file.txt"), - Stub::EmptyFile("file2.txt"), - ]); - - nu!( - cwd: dirs.test(), - "touch -a -t 1908241230.30 file.txt file2.txt" - ); - - let path = dirs.test().join("file.txt"); - - let time = Local.ymd(2019, 8, 24).and_hms(12, 30, 30); - let actual_time: DateTime = - DateTime::from(path.metadata().unwrap().accessed().unwrap()); - - assert_eq!(time, actual_time); - - let path = dirs.test().join("file2.txt"); - - let actual_time: DateTime = - DateTime::from(path.metadata().unwrap().accessed().unwrap()); - - assert_eq!(time, actual_time); - }) -} - -#[test] -fn errors_if_change_access_time_of_file_with_invalid_timestamp() { - Playground::setup("change_time_test_17", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - let mut outcome = nu!( - cwd: dirs.test(), - "touch -a -t 1908241230.3030 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -a -t 1908241230.3O file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -a -t 08241230.3 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -a -t 8241230 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -a -t 01908241230 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -a -t 082412.3012 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -a -t 0824.123012 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -a -t 08.24123012 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -a -t 0.824123012 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - }) -} - #[test] fn change_access_time_of_file_to_today() { Playground::setup("change_time_test_18", |dirs, sandbox| { @@ -481,246 +74,6 @@ fn change_access_time_of_file_to_today() { }) } -#[test] -fn change_access_time_to_date() { - Playground::setup("change_time_test_19", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - nu!( - cwd: dirs.test(), - r#"touch -a -d "August 24, 2019; 12:30:30" file.txt"# - ); - - let path = dirs.test().join("file.txt"); - - let time = Local.ymd(2019, 8, 24).and_hms(12, 30, 30); - let actual_time: DateTime = - DateTime::from(path.metadata().unwrap().accessed().unwrap()); - - assert_eq!(time, actual_time); - }) -} - -#[test] -fn change_access_time_to_time_of_reference() { - Playground::setup("change_time_test_20", |dirs, sandbox| { - sandbox.with_files(vec![ - Stub::EmptyFile("file.txt"), - Stub::EmptyFile("reference.txt"), - ]); - - nu!( - cwd: dirs.test(), - r#"touch -a -t 201908241230.30 reference.txt"# - ); - - nu!( - cwd: dirs.test(), - r#"touch -a -r reference.txt file.txt"# - ); - - let path = dirs.test().join("file.txt"); - let ref_path = dirs.test().join("reference.txt"); - - let time: DateTime = DateTime::from(path.metadata().unwrap().accessed().unwrap()); - let ref_time: DateTime = - DateTime::from(ref_path.metadata().unwrap().accessed().unwrap()); - - assert_eq!(time, ref_time); - }) -} - -#[test] -fn change_modified_and_access_time_of_file() { - Playground::setup("change_time_test_21", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - nu!( - cwd: dirs.test(), - "touch -m -a -t 201908241230.30 file.txt" - ); - - let path = dirs.test().join("file.txt"); - let metadata = path.metadata().unwrap(); - - let time = Local.ymd(2019, 8, 24).and_hms(12, 30, 30); - let atime: DateTime = DateTime::from(metadata.accessed().unwrap()); - let mtime: DateTime = DateTime::from(metadata.modified().unwrap()); - - assert_eq!(time, atime); - assert_eq!(time, mtime); - }) -} - -#[test] -fn create_and_change_modified_and_access_time_of_file() { - Playground::setup("change_time_test_22", |dirs, _sandbox| { - nu!( - cwd: dirs.test(), - "touch -t 201908241230 i_will_be_created.txt" - ); - - let path = dirs.test().join("i_will_be_created.txt"); - assert!(path.exists()); - - let metadata = path.metadata().unwrap(); - - let time = Local.ymd(2019, 8, 24).and_hms(12, 30, 0); - - let atime: DateTime = DateTime::from(metadata.accessed().unwrap()); - let mtime: DateTime = DateTime::from(metadata.modified().unwrap()); - - assert_eq!(time, atime); - assert_eq!(time, mtime); - }) -} - -#[test] -fn change_modified_and_access_time_of_file_no_year() { - Playground::setup("change_time_test_23", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - nu!( - cwd: dirs.test(), - "touch -a -m -t 08241230.12 file.txt" - ); - - let metadata = dirs.test().join("file.txt").metadata().unwrap(); - - let time = Local.ymd(2022, 8, 24).and_hms(12, 30, 12); - - let atime: DateTime = DateTime::from(metadata.accessed().unwrap()); - let mtime: DateTime = DateTime::from(metadata.modified().unwrap()); - - assert_eq!(time, atime); - assert_eq!(time, mtime); - }) -} - -#[test] -fn change_modified_and_access_time_of_file_no_year_no_second() { - Playground::setup("change_time_test_24", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - nu!( - cwd: dirs.test(), - "touch -t 08241230 file.txt" - ); - - let metadata = dirs.test().join("file.txt").metadata().unwrap(); - - let time = Local.ymd(2022, 8, 24).and_hms(12, 30, 0); - - let atime: DateTime = DateTime::from(metadata.accessed().unwrap()); - let mtime: DateTime = DateTime::from(metadata.modified().unwrap()); - - assert_eq!(time, atime); - assert_eq!(time, mtime); - }) -} - -#[test] -fn change_modified_and_access_time_of_files() { - Playground::setup("change_time_test_25", |dirs, sandbox| { - sandbox.with_files(vec![ - Stub::EmptyFile("file.txt"), - Stub::EmptyFile("file2.txt"), - ]); - - nu!( - cwd: dirs.test(), - "touch -a -m -t 1908241230.30 file.txt file2.txt" - ); - - let metadata = dirs.test().join("file.txt").metadata().unwrap(); - - let time = Local.ymd(2019, 8, 24).and_hms(12, 30, 30); - let atime: DateTime = DateTime::from(metadata.accessed().unwrap()); - let mtime: DateTime = DateTime::from(metadata.modified().unwrap()); - - assert_eq!(time, atime); - assert_eq!(time, mtime); - - let metadata = dirs.test().join("file2.txt").metadata().unwrap(); - - let atime: DateTime = DateTime::from(metadata.accessed().unwrap()); - let mtime: DateTime = DateTime::from(metadata.modified().unwrap()); - - assert_eq!(time, atime); - assert_eq!(time, mtime); - }) -} - -#[test] -fn errors_if_change_modified_and_access_time_of_file_with_invalid_timestamp() { - Playground::setup("change_time_test_26", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - let mut outcome = nu!( - cwd: dirs.test(), - "touch -t 1908241230.3030 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -a -m -t 1908241230.3O file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -t 08241230.3 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -m -a -t 8241230 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -t 01908241230 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -m -a -t 082412.3012 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -m -a -t 0824.123012 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -m -a -t 08.24123012 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - - outcome = nu!( - cwd: dirs.test(), - "touch -m -a -t 0.824123012 file.txt" - ); - - assert!(outcome.err.contains("input has an invalid timestamp")); - }) -} - #[test] fn change_modified_and_access_time_of_file_to_today() { Playground::setup("change_time_test_27", |dirs, sandbox| { @@ -743,97 +96,12 @@ fn change_modified_and_access_time_of_file_to_today() { }) } -#[test] -fn change_modified_and_access_time_to_date() { - Playground::setup("change_time_test_28", |dirs, sandbox| { - sandbox.with_files(vec![Stub::EmptyFile("file.txt")]); - - nu!( - cwd: dirs.test(), - r#"touch -d "August 24, 2019; 12:30:30" file.txt"# - ); - - let metadata = dirs.test().join("file.txt").metadata().unwrap(); - - let time = Local.ymd(2019, 8, 24).and_hms(12, 30, 30); - let atime: DateTime = DateTime::from(metadata.accessed().unwrap()); - let mtime: DateTime = DateTime::from(metadata.modified().unwrap()); - - assert_eq!(time, atime); - assert_eq!(time, mtime); - }) -} - -#[test] -fn change_modified_and_access_time_to_time_of_reference() { - Playground::setup("change_time_test_29", |dirs, sandbox| { - sandbox.with_files(vec![ - Stub::EmptyFile("file.txt"), - Stub::EmptyFile("reference.txt"), - ]); - - let path = dirs.test().join("file.txt"); - let ref_path = dirs.test().join("reference.txt"); - - // Set the same time for the modified and access time of the reference file - nu!( - cwd: dirs.test(), - r#"touch -a -m -t 201908241230.30 reference.txt"# - ); - - nu!( - cwd: dirs.test(), - r#"touch -r reference.txt file.txt"# - ); - - let atime: DateTime = DateTime::from(path.metadata().unwrap().accessed().unwrap()); - let ref_atime: DateTime = - DateTime::from(ref_path.metadata().unwrap().accessed().unwrap()); - - assert_eq!(atime, ref_atime); - - let mtime: DateTime = DateTime::from(path.metadata().unwrap().modified().unwrap()); - let ref_mtime: DateTime = - DateTime::from(ref_path.metadata().unwrap().modified().unwrap()); - - assert_eq!(mtime, ref_mtime); - - // Set different time for the modified and access time of the reference file - nu!( - cwd: dirs.test(), - r#"touch -a -t 201908241230.30 reference.txt"# - ); - - nu!( - cwd: dirs.test(), - r#"touch -m -t 202009251340.40 reference.txt"# - ); - - nu!( - cwd: dirs.test(), - r#"touch -a -m -r reference.txt file.txt"# - ); - - let atime: DateTime = DateTime::from(path.metadata().unwrap().accessed().unwrap()); - let ref_atime: DateTime = - DateTime::from(ref_path.metadata().unwrap().accessed().unwrap()); - - assert_eq!(atime, ref_atime); - - let mtime: DateTime = DateTime::from(path.metadata().unwrap().modified().unwrap()); - let ref_mtime: DateTime = - DateTime::from(ref_path.metadata().unwrap().modified().unwrap()); - - assert_eq!(mtime, ref_mtime); - }) -} - #[test] fn not_create_file_if_it_not_exists() { Playground::setup("change_time_test_28", |dirs, _sandbox| { nu!( cwd: dirs.test(), - r#"touch -c -d "August 24, 2019; 12:30:30" file.txt"# + r#"touch -c file.txt"# ); let path = dirs.test().join("file.txt"); @@ -850,20 +118,3 @@ fn not_create_file_if_it_not_exists() { assert!(!path.exists()); }) } - -#[test] -fn test_invalid_timestamp() { - Playground::setup("test_invalid_timestamp", |dirs, _sandbox| { - let outcome = nu!( - cwd: dirs.test(), - r#"touch -t 20220729. file.txt"# - ); - assert!(outcome.err.contains("input has an invalid timestamp")); - - let outcome = nu!( - cwd: dirs.test(), - r#"touch -t 20220729120099 file.txt"# - ); - assert!(outcome.err.contains("input has an invalid timestamp")); - }) -}