diff --git a/gui/syncthing/core/syncthingController.js b/gui/syncthing/core/syncthingController.js index 4234c7ace..c5b2d5e29 100755 --- a/gui/syncthing/core/syncthingController.js +++ b/gui/syncthing/core/syncthingController.js @@ -1135,6 +1135,7 @@ angular.module('syncthing.core') }; $scope.currentFolder.rescanIntervalS = 60; $scope.currentFolder.minDiskFreePct = 1; + $scope.currentFolder.maxConflicts = -1; $scope.currentFolder.order = "random"; $scope.currentFolder.fileVersioningSelector = "none"; $scope.currentFolder.trashcanClean = 0; @@ -1156,6 +1157,7 @@ angular.module('syncthing.core') selectedDevices: {}, rescanIntervalS: 60, minDiskFreePct: 1, + maxConflicts: -1, order: "random", fileVersioningSelector: "none", trashcanClean: 0, diff --git a/lib/auto/gui.files.go b/lib/auto/gui.files.go index 17f843997..5dc433279 100644 --- a/lib/auto/gui.files.go +++ b/lib/auto/gui.files.go @@ -5,7 +5,7 @@ import ( ) const ( - AssetsBuildDate = "Mon, 12 Oct 2015 23:37:58 GMT" + AssetsBuildDate = "Tue, 13 Oct 2015 19:49:58 GMT" ) func Assets() map[string][]byte { @@ -78,7 +78,7 @@ func Assets() map[string][]byte { assets["syncthing/core/selectOnClickDirective.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/3SQQWvEIBCF7/srPBRiIEjPXXooe2+hPZYeRKeprJkpo2YpJf+9atLdJWzeSZ/z+Z5q7JPXrAayyYNswg+a+OWwV4YYmnYnspR1DCa6sQyAz8sXPHhnjk0nPlMGHKGQdyeHlk6t+K1QEUNMjFdGkXd4fLjigqFv6ES+dwCMndAxcmhXUNEyoQhlY1bx8hZQNGoWc+cS9iiWlqqH+PZvy3a/yXL+IcicJZNqumHQEV6LvcVVRs2pz2ThQBgzGuTygvf7jw3y3FQxDDTCk/c1KWxFXQBt7Vyqpt8Yn1bedN5N+105/AMAAP//AQAA//+SF+4JDAIAAA==") assets["syncthing/core/shutdownDialogDirective.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/1SOwQqDQAxE737F3qIg672eCv2F9r6sqQZitsRspRT/vdqC1DnOTDIvSJ85qB9TlxlLmF4SbSDpfUyKUBVule9IMRo9t8KQrUuzXChw6qF297xeUBJXVu79rW9StKzyZ/zMyZSinRycoT5EhuODg+FVeU13imajaI6bN8LZDzYy7B+WtliqtvgAAAD//wEAAP//3qFOo80AAAA=") assets["syncthing/core/shutdownDialogView.html"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/0TOTaqDMBAH8PXzFMNsXL16gZhNj+AJ0jjWQJwJzgQp1ru3lkK3P/h/uEXGkCGNPepcbZSNEdSCVX1LjZFUEVIU7rHIRuu/TBOCJcvU4763wzcFV1lKJqMWnmBrYM3B6DjQN3+u/MQPD442J77DHBRuRAznMpwlF9cV37juc8o3LwAAAP//AQAA//99X8KxnQAAAA==") - assets["syncthing/core/syncthingController.js"], _ = base64.StdEncoding.DecodeString("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") + assets["syncthing/core/syncthingController.js"], _ = base64.StdEncoding.DecodeString("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") assets["syncthing/core/uniqueFolderDirective.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/7SSwW4yMQyE7zyFD7+0IK3CHc5/b1V74h5tvKzVkIDtQFHFuzdhUaGwtJWqzgVp4vkYW2vDMnnLZhVd8jiuZB8a7SgsTRMZq8kIsowjxkZpmwdSoE3Ch+gdclVDm/I8xQDjCbwdh4sYNXG4MHpzkzJnBlVYPkaHvqo/vXsKL7MLoDRxjTWgX9VgVVlqaJT95ApbVHzzb21ZkMWkIB21Oj6jtoS7hfUJh8JF1J7+z6Ajzev/fyUpv/cCRdMp7BCki8m7UClsrSdnFe8G+pqCuiiTpPubcyrnjvNBwCFfQvCiaXsMiemsPO3CM2ePM/K86zfdtUPoGYBlWwHrGa3b/6J/a3PHrxf4aScS6OF/dM5B9/ThftzwNnu44p05h/moPL4DAAD//wEAAP//r65WJ1IDAAA=") assets["syncthing/core/upgradingDialogDirective.js"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/1yOwQrCMBBE7/2K3LaFkt7tSfAX9B7SNV3YJmW7UUT676YKRZ3jzNudcTFkdmKnNGTGGpZH9DpSDNYnQWgqU2QHEvRKtwLkOYgbCnAixylAa665nFCKpm7M881vEtQs8cv4mIsKeT0YOEL7EylOMzvFs3BJ9xndNqP7K70Q3u2oE8P+Yu2rtemrFwAAAP//AQAA//99zQ2GzwAAAA==") assets["syncthing/core/upgradingDialogView.html"], _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/1zOTarDMAwE4PXLKYQ2WSW5gO0zPCg9gHDcVODaxlIIJc3dm5b+QLfDN8yYSx4pAo8W5zJVGjlNCKKks1jkdMoI7HOySLXmpfNcfQzdXBCUNQaL69oe380WbqCVkkTSsG3omj9TnJFC6Zu7wzV5Pe8cWOCz2pvh4Rz88v8YSAIsxPoifb/j4hozPN+75g4AAP//AQAA///kaeW6xgAAAA==") diff --git a/lib/config/config.go b/lib/config/config.go index 78d3fc32d..71f3df747 100644 --- a/lib/config/config.go +++ b/lib/config/config.go @@ -111,6 +111,7 @@ type FolderConfiguration struct { ScanProgressIntervalS int `xml:"scanProgressIntervalS" json:"scanProgressIntervalS"` // Set to a negative value to disable. Value of 0 will get replaced with value of 2 (default value) PullerSleepS int `xml:"pullerSleepS" json:"pullerSleepS"` PullerPauseS int `xml:"pullerPauseS" json:"pullerPauseS"` + MaxConflicts int `xml:"maxConflicts" json:"maxConflicts"` Invalid string `xml:"-" json:"invalid"` // Set at runtime when there is an error, not saved } @@ -499,14 +500,6 @@ func ChangeRequiresRestart(from, to Configuration) bool { return false } -func convertV10V11(cfg *Configuration) { - // Set minimum disk free of existing folders to 1% - for i := range cfg.Folders { - cfg.Folders[i].MinDiskFreePct = 1 - } - cfg.Version = 11 -} - func convertV11V12(cfg *Configuration) { // Change listen address schema for i, addr := range cfg.Options.ListenAddress { @@ -550,9 +543,22 @@ func convertV11V12(cfg *Configuration) { cfg.Options.LocalAnnPort = 21027 } + // Set MaxConflicts to unlimited + for i := range cfg.Folders { + cfg.Folders[i].MaxConflicts = -1 + } + cfg.Version = 12 } +func convertV10V11(cfg *Configuration) { + // Set minimum disk free of existing folders to 1% + for i := range cfg.Folders { + cfg.Folders[i].MinDiskFreePct = 1 + } + cfg.Version = 11 +} + func convertV9V10(cfg *Configuration) { // Enable auto normalization on existing folders. for i := range cfg.Folders { diff --git a/lib/config/config_test.go b/lib/config/config_test.go index 626452f89..aa0397177 100644 --- a/lib/config/config_test.go +++ b/lib/config/config_test.go @@ -100,6 +100,7 @@ func TestDeviceConfig(t *testing.T) { Hashers: 0, AutoNormalize: true, MinDiskFreePct: 1, + MaxConflicts: -1, }, } expectedDevices := []DeviceConfiguration{ diff --git a/lib/config/testdata/v12.xml b/lib/config/testdata/v12.xml index 0e8ebdc16..794b4d382 100644 --- a/lib/config/testdata/v12.xml +++ b/lib/config/testdata/v12.xml @@ -3,6 +3,7 @@ 1 + -1
tcp://a
diff --git a/lib/model/rwfolder.go b/lib/model/rwfolder.go index 82fb0f49f..1bdf66406 100644 --- a/lib/model/rwfolder.go +++ b/lib/model/rwfolder.go @@ -79,17 +79,18 @@ type rwFolder struct { progressEmitter *ProgressEmitter virtualMtimeRepo *db.VirtualMtimeRepo - folder string - dir string - scanIntv time.Duration - versioner versioner.Versioner - ignorePerms bool - copiers int - pullers int - shortID uint64 - order config.PullOrder - sleep time.Duration - pause time.Duration + folder string + dir string + scanIntv time.Duration + versioner versioner.Versioner + ignorePerms bool + copiers int + pullers int + shortID uint64 + order config.PullOrder + maxConflicts int + sleep time.Duration + pause time.Duration stop chan struct{} queue *jobQueue @@ -115,14 +116,15 @@ func newRWFolder(m *Model, shortID uint64, cfg config.FolderConfiguration) *rwFo progressEmitter: m.progressEmitter, virtualMtimeRepo: db.NewVirtualMtimeRepo(m.db, cfg.ID), - folder: cfg.ID, - dir: cfg.Path(), - scanIntv: time.Duration(cfg.RescanIntervalS) * time.Second, - ignorePerms: cfg.IgnorePerms, - copiers: cfg.Copiers, - pullers: cfg.Pullers, - shortID: shortID, - order: cfg.Order, + folder: cfg.ID, + dir: cfg.Path(), + scanIntv: time.Duration(cfg.RescanIntervalS) * time.Second, + ignorePerms: cfg.IgnorePerms, + copiers: cfg.Copiers, + pullers: cfg.Pullers, + shortID: shortID, + order: cfg.Order, + maxConflicts: cfg.MaxConflicts, stop: make(chan struct{}), queue: newJobQueue(), @@ -757,7 +759,7 @@ func (p *rwFolder) deleteFile(file protocol.FileInfo) { // of deleting. Also merge with the version vector we had, to indicate // we have resolved the conflict. file.Version = file.Version.Merge(cur.Version) - err = osutil.InWritableDir(moveForConflict, realName) + err = osutil.InWritableDir(p.moveForConflict, realName) } else if p.versioner != nil { err = osutil.InWritableDir(p.versioner.Archive, realName) } else { @@ -1254,7 +1256,7 @@ func (p *rwFolder) performFinish(state *sharedPullerState) error { // we have resolved the conflict. state.file.Version = state.file.Version.Merge(state.version) - if err = osutil.InWritableDir(moveForConflict, state.realName); err != nil { + if err = osutil.InWritableDir(p.moveForConflict, state.realName); err != nil { return err } @@ -1447,7 +1449,14 @@ func removeDevice(devices []protocol.DeviceID, device protocol.DeviceID) []proto return devices } -func moveForConflict(name string) error { +func (p *rwFolder) moveForConflict(name string) error { + if p.maxConflicts == 0 { + if err := osutil.Remove(name); err != nil && !os.IsNotExist(err) { + return err + } + return nil + } + ext := filepath.Ext(name) withoutExt := name[:len(name)-len(ext)] newName := withoutExt + time.Now().Format(".sync-conflict-20060102-150405") + ext @@ -1457,7 +1466,21 @@ func moveForConflict(name string) error { // the user has already moved it away, or the conflict was between a // remote modification and a local delete. In either way it does not // matter, go ahead as if the move succeeded. - return nil + err = nil + } + if p.maxConflicts > -1 { + matches, gerr := osutil.Glob(withoutExt + ".sync-conflict-????????-??????" + ext) + if gerr == nil && len(matches) > p.maxConflicts { + sort.Sort(sort.Reverse(sort.StringSlice(matches))) + for _, match := range matches[p.maxConflicts:] { + gerr = osutil.Remove(match) + if gerr != nil { + l.Debugln(p, "removing extra conflict", gerr) + } + } + } else if gerr != nil { + l.Debugln(p, "globbing for conflicts", gerr) + } } return err }