diff --git a/lib/model/rwfolder_test.go b/lib/model/rwfolder_test.go index d8f1ec13c..d560606ed 100644 --- a/lib/model/rwfolder_test.go +++ b/lib/model/rwfolder_test.go @@ -19,8 +19,10 @@ import ( ) func init() { - // We do this to make sure that the temp file required for the tests does - // not get removed during the tests. + // We do this to make sure that the temp file required for the tests + // does not get removed during the tests. Also set the prefix so it's + // found correctly regardless of platform. + defTempNamer.prefix = windowsTempPrefix future := time.Now().Add(time.Hour) err := os.Chtimes(filepath.Join("testdata", defTempNamer.TempName("file")), future, future) if err != nil { diff --git a/lib/model/tempname.go b/lib/model/tempname.go index aa95ae676..bff8f707d 100644 --- a/lib/model/tempname.go +++ b/lib/model/tempname.go @@ -15,26 +15,41 @@ import ( ) type tempNamer struct { - prefix string + prefix string + recognize []string } +const ( + windowsTempPrefix = "~syncthing~" + unixTempPrefix = ".syncthing." +) + var defTempNamer tempNamer // Real filesystems usually handle 255 bytes. encfs has varying and // confusing file name limits. We take a safe way out and switch to hashing // quite early. -const maxFilenameLength = 160 - len(".syncthing.") - len(".tmp") +const maxFilenameLength = 160 - len(unixTempPrefix) - len(".tmp") func init() { if runtime.GOOS == "windows" { - defTempNamer = tempNamer{"~syncthing~"} + defTempNamer = tempNamer{windowsTempPrefix, []string{unixTempPrefix, windowsTempPrefix}} } else { - defTempNamer = tempNamer{".syncthing."} + defTempNamer = tempNamer{unixTempPrefix, []string{unixTempPrefix, windowsTempPrefix}} } } +// IsTemporary is true if the file name has the temporary prefix. Regardless +// of the normally used prefix, the standard Windows and Unix temp prefixes +// are always recognized as temp files. func (t tempNamer) IsTemporary(name string) bool { - return strings.HasPrefix(filepath.Base(name), t.prefix) + name = filepath.Base(name) + for _, prefix := range t.recognize { + if strings.HasPrefix(name, prefix) { + return true + } + } + return false } func (t tempNamer) TempName(name string) string { diff --git a/lib/model/testdata/.syncthing.file.tmp b/lib/model/testdata/.syncthing.file.tmp deleted file mode 100644 index c434e26aa..000000000 Binary files a/lib/model/testdata/.syncthing.file.tmp and /dev/null differ