lib/location: Fix regression of timestamp handling (ref #9180) (#9185)

This commit is contained in:
Jakob Borg 2023-10-26 07:41:02 +02:00 committed by GitHub
parent b5082f6af8
commit bae6d5f375
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 5 deletions

View File

@ -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 {

View File

@ -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)
}
}