Archived
Allow limiting max conflicts (fixes #2282)
This commit is contained in:
1 parent
2b56961b54
commit
752533489a
6 files changed
+66
-33
No files matched your search
@@ -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,
|
||||
|
||||
@@ -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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 truncated
|
||||
assets["syncthing/core/syncthingController.js"], _ = base64.StdEncoding.DecodeString("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 truncated
|
||||
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==")
|
||||
|
||||
+14
-8
@@ -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 {
|
||||
|
||||
@@ -100,6 +100,7 @@ func TestDeviceConfig(t *testing.T) {
|
||||
Hashers: 0,
|
||||
AutoNormalize: true,
|
||||
MinDiskFreePct: 1,
|
||||
MaxConflicts: -1,
|
||||
},
|
||||
}
|
||||
expectedDevices := []DeviceConfiguration{
|
||||
|
||||
Vendored
+1
@@ -3,6 +3,7 @@
|
||||
<device id="AIR6LPZ-7K4PTTV-UXQSMUU-CPQ5YWH-OEDFIIQ-JUG777G-2YQXXR5-YD6AWQR"></device>
|
||||
<device id="P56IOI7-MZJNU2Y-IQGDREY-DM2MGTI-MGL3BXN-PQ6W5BM-TBBZ4TJ-XZWICQ2"></device>
|
||||
<minDiskFreePct>1</minDiskFreePct>
|
||||
<maxConflicts>-1</maxConflicts>
|
||||
</folder>
|
||||
<device id="AIR6LPZ-7K4PTTV-UXQSMUU-CPQ5YWH-OEDFIIQ-JUG777G-2YQXXR5-YD6AWQR" name="node one" compression="metadata">
|
||||
<address>tcp://a</address>
|
||||
|
||||
+46
-23
@@ -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
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user