diff --git a/gui/default/index.html b/gui/default/index.html index 57cd558a794..f5a41caa1f0 100644 --- a/gui/default/index.html +++ b/gui/default/index.html @@ -542,8 +542,8 @@

 Forever{{folder.versioning.params.maxAge | duration}} - -   Disabled{{folder.versioning.cleanupIntervalS | duration}} + +   Disabled{{folder.versioning.cleanupIntervalS | duration}} diff --git a/gui/default/syncthing/folder/editFolderModalView.html b/gui/default/syncthing/folder/editFolderModalView.html index 4a616626952..75328e9a3c9 100644 --- a/gui/default/syncthing/folder/editFolderModalView.html +++ b/gui/default/syncthing/folder/editFolderModalView.html @@ -146,13 +146,17 @@
- +
seconds

The interval, in seconds, for running cleanup in the versions directory. Zero to disable periodic cleaning. The cleanup interval cannot be blank. The interval must be a positive number of seconds. + + + Cleanup is disabled when versions are kept forever. +

diff --git a/lib/model/folder.go b/lib/model/folder.go index d71fbd508e3..25c26bdc08d 100644 --- a/lib/model/folder.go +++ b/lib/model/folder.go @@ -13,6 +13,7 @@ import ( "math/rand" "path/filepath" "sort" + "strconv" "time" "github.com/syncthing/syncthing/lib/config" @@ -57,8 +58,11 @@ type folder struct { scanDelay chan time.Duration initialScanFinished chan struct{} scanScheduled chan struct{} + versionType string versionCleanupInterval time.Duration versionCleanupTimer *time.Timer + versionCleanoutDays int + versionMaxAge int pullScheduled chan struct{} pullPause time.Duration @@ -96,6 +100,9 @@ type puller interface { } func newFolder(model *model, fset *db.FileSet, ignores *ignore.Matcher, cfg config.FolderConfiguration, evLogger events.Logger, ioLimiter *util.Semaphore, ver versioner.Versioner) folder { + cleanoutDays, _ := strconv.Atoi(cfg.Versioning.Params["cleanoutDays"]) + maxAge, _ := strconv.Atoi(cfg.Versioning.Params["maxAge"]) + f := folder{ stateTracker: newStateTracker(cfg.ID, evLogger), FolderConfiguration: cfg, @@ -115,8 +122,11 @@ func newFolder(model *model, fset *db.FileSet, ignores *ignore.Matcher, cfg conf scanDelay: make(chan time.Duration), initialScanFinished: make(chan struct{}), scanScheduled: make(chan struct{}, 1), + versionType: cfg.Versioning.Type, versionCleanupInterval: time.Duration(cfg.Versioning.CleanupIntervalS) * time.Second, versionCleanupTimer: time.NewTimer(time.Duration(cfg.Versioning.CleanupIntervalS) * time.Second), + versionCleanoutDays: cleanoutDays, + versionMaxAge: maxAge, pullScheduled: make(chan struct{}, 1), // This needs to be 1-buffered so that we queue a pull if we're busy when it comes. @@ -161,7 +171,7 @@ func (f *folder) Serve(ctx context.Context) error { // If we're configured to not do version cleanup, or we don't have a // versioner, cancel and drain that timer now. - if f.versionCleanupInterval == 0 || f.versioner == nil { + if f.versionCleanupInterval == 0 || ((f.versionType == "trashcan" || f.versionType == "simple") && f.versionCleanoutDays == 0) || (f.versionType == "staggered" && f.versionMaxAge == 0) || f.versionType == "external" || f.versioner == nil { if !f.versionCleanupTimer.Stop() { <-f.versionCleanupTimer.C }