Browse Source

Retain meaningful names for temporary files

Lode Hoste 10 years ago
parent
commit
a692348336

+ 18 - 7
internal/model/tempname.go

@@ -1,17 +1,16 @@
-// Copyright (C) 2014 The Syncthing Authors.
+// Copyright (C) 2015 The Syncthing Authors.
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this file,
 // You can obtain one at http://mozilla.org/MPL/2.0/.
 
-// +build !windows
-
 package model
 
 import (
 	"crypto/md5"
 	"fmt"
 	"path/filepath"
+	"runtime"
 	"strings"
 )
 
@@ -19,16 +18,28 @@ type tempNamer struct {
 	prefix string
 }
 
-var defTempNamer = tempNamer{".syncthing"}
+var defTempNamer tempNamer
+
+func init() {
+	if runtime.GOOS == "windows" {
+		defTempNamer = tempNamer{"~syncthing~"}
+	} else {
+		defTempNamer = tempNamer{".syncthing."}
+	}
+}
 
 func (t tempNamer) IsTemporary(name string) bool {
 	return strings.HasPrefix(filepath.Base(name), t.prefix)
 }
 
 func (t tempNamer) TempName(name string) string {
-	hash := md5.New()
-	hash.Write([]byte(name))
 	tdir := filepath.Dir(name)
-	tname := fmt.Sprintf("%s.%x", t.prefix, hash.Sum(nil))
+	tbase := filepath.Base(name)
+	if len(tbase) > 240 {
+		hash := md5.New()
+		hash.Write([]byte(name))
+		tbase = fmt.Sprintf("%x", hash.Sum(nil))
+	}
+	tname := fmt.Sprintf("%s%s.tmp", t.prefix, tbase)
 	return filepath.Join(tdir, tname)
 }

+ 0 - 34
internal/model/tempname_windows.go

@@ -1,34 +0,0 @@
-// Copyright (C) 2014 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// +build windows
-
-package model
-
-import (
-	"crypto/md5"
-	"fmt"
-	"path/filepath"
-	"strings"
-)
-
-type tempNamer struct {
-	prefix string
-}
-
-var defTempNamer = tempNamer{"~syncthing~"}
-
-func (t tempNamer) IsTemporary(name string) bool {
-	return strings.HasPrefix(filepath.Base(name), t.prefix)
-}
-
-func (t tempNamer) TempName(name string) string {
-	hash := md5.New()
-	hash.Write([]byte(name))
-	tdir := filepath.Dir(name)
-	tname := fmt.Sprintf("%s.%x.tmp", t.prefix, hash.Sum(nil))
-	return filepath.Join(tdir, tname)
-}

+ 0 - 0
internal/model/testdata/.syncthing.8c7dd922ad47494fc02c388e12c00eac → internal/model/testdata/.syncthing.file.tmp


+ 0 - 0
internal/model/testdata/~syncthing~.8c7dd922ad47494fc02c388e12c00eac.tmp → internal/model/testdata/~syncthing~file.tmp