From bae6d5f37507225ed9daffca88856ef4c70813b2 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Thu, 26 Oct 2023 07:41:02 +0200 Subject: [PATCH] lib/location: Fix regression of timestamp handling (ref #9180) (#9185) --- lib/locations/locations.go | 14 +++++++++----- lib/locations/locations_test.go | 10 ++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/locations/locations.go b/lib/locations/locations.go index 157a6342e..e384b897a 100644 --- a/lib/locations/locations.go +++ b/lib/locations/locations.go @@ -122,8 +122,8 @@ var locationTemplates = map[LocationEnum]string{ Database: "${data}/" + LevelDBDir, LogFile: "${data}/syncthing.log", // --logfile on Windows CsrfTokens: "${data}/csrftokens.txt", - PanicLog: "${data}/panic-${timestamp}.log", - AuditLog: "${data}/audit-${timestamp}.log", + PanicLog: "${data}/panic-%{timestamp}.log", + AuditLog: "${data}/audit-%{timestamp}.log", GUIAssets: "${config}/gui", DefFolder: "${userHome}/Sync", } @@ -285,14 +285,18 @@ func userHomeDir() string { } func GetTimestamped(key LocationEnum) string { - // We take the roundtrip via "${timestamp}" instead of passing the path + return getTimestampedAt(key, time.Now()) +} + +func getTimestampedAt(key LocationEnum, when time.Time) string { + // We take the roundtrip via "%{timestamp}" instead of passing the path // directly through time.Format() to avoid issues when the path we are // expanding contains numbers; otherwise for example // /home/user2006/.../panic-20060102-150405.log would get both instances of // 2006 replaced by 2015... tpl := locations[key] - now := time.Now().Format("20060102-150405") - return strings.ReplaceAll(tpl, "${timestamp}", now) + timestamp := when.Format("20060102-150405") + return strings.ReplaceAll(tpl, "%{timestamp}", timestamp) } func fileExists(path string) bool { diff --git a/lib/locations/locations_test.go b/lib/locations/locations_test.go index 610e0cf6a..286476916 100644 --- a/lib/locations/locations_test.go +++ b/lib/locations/locations_test.go @@ -9,7 +9,9 @@ package locations import ( + "path/filepath" "testing" + "time" "golang.org/x/exp/slices" ) @@ -100,3 +102,11 @@ func TestUnixDataDir(t *testing.T) { } } } + +func TestGetTimestamped(t *testing.T) { + s := getTimestampedAt(PanicLog, time.Date(2023, 10, 25, 21, 47, 0, 0, time.UTC)) + exp := "panic-20231025-214700.log" + if file := filepath.Base(s); file != exp { + t.Errorf("got %q, expected %q", file, exp) + } +}