From dee8b7e2850df3186d2bbbcd5cc7437b2f342a38 Mon Sep 17 00:00:00 2001 From: kevin <5299031+kevin9327@users.noreply.github.com> Date: Sat, 31 Oct 2026 21:24:46 +0900 Subject: [PATCH] fs: accept multi-unit relative times like 1d12h in Time options The docs say Time options take the same relative forms as Duration options, with "1d12h" as an example, but ParseTime only tried time.ParseDuration and single-suffix values, so --max-age style Time options such as --s3-version-at 1d12h were rejected. --- fs/parsetime.go | 16 +++++----------- fs/parsetime_test.go | 2 ++ 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/fs/parsetime.go b/fs/parsetime.go index 504232b20..4b492f2b5 100644 --- a/fs/parsetime.go +++ b/fs/parsetime.go @@ -41,18 +41,12 @@ func ParseTime(date string) (t time.Time, err error) { return t, nil } - // Attempt to parse as a time.Duration offset from now - d, err := time.ParseDuration(date) - if err == nil { - return now.Add(-d), nil + // Attempt to parse as a duration offset from now + d, err := ParseDuration(date) + if err != nil { + return t, err } - - d, err = parseDurationSuffixes(date) - if err == nil { - return now.Add(-d), nil - } - - return t, err + return now.Add(-d), nil } // Set a Time diff --git a/fs/parsetime_test.go b/fs/parsetime_test.go index 42ab5ac71..f4f2cb85d 100644 --- a/fs/parsetime_test.go +++ b/fs/parsetime_test.go @@ -50,6 +50,8 @@ func TestParseTime(t *testing.T) { {"-1x", time.Time{}, true}, {"off", time.Time{}, false}, {"1h2m3s", now.Add(-(time.Hour + 2*time.Minute + 3*time.Second)), false}, + {"1d12h", now.Add(-time.Hour * 36), false}, + {"1w2d", now.Add(-time.Hour * 24 * 9), false}, {"2001-02-03", time.Date(2001, 2, 3, 0, 0, 0, 0, time.Local), false}, {"2001-02-03 10:11:12", time.Date(2001, 2, 3, 10, 11, 12, 0, time.Local), false}, {"2001-08-03 10:11:12", time.Date(2001, 8, 3, 10, 11, 12, 0, time.Local), false},