lib/versioner: Reduce surface area (#6186)
* lib/versioner: Reduce surface area This is a refactor while I was anyway rooting around in the versioner. Instead of exporting every possible implementation and the factory and letting the caller do whatever, this now encapsulates all that and exposes a New() that takes a config.VersioningConfiguration. Given that and that we don't know (from the outside) how a versioner works or what state it keeps, we now just construct it once per folder and keep it around. Previously it was recreated for each restore request. * unparam * wip
This commit is contained in:
committed by
Audrius Butkevicius
parent
f747ba6d69
commit
4e151d380c
@@ -12,6 +12,7 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/syncthing/syncthing/lib/config"
|
||||
"github.com/syncthing/syncthing/lib/fs"
|
||||
)
|
||||
|
||||
@@ -27,10 +28,22 @@ type FileVersion struct {
|
||||
Size int64 `json:"size"`
|
||||
}
|
||||
|
||||
var Factories = map[string]func(folderID string, filesystem fs.Filesystem, params map[string]string) Versioner{}
|
||||
type factory func(filesystem fs.Filesystem, params map[string]string) Versioner
|
||||
|
||||
var factories = make(map[string]factory)
|
||||
|
||||
var ErrRestorationNotSupported = fmt.Errorf("version restoration not supported with the current versioner")
|
||||
|
||||
const (
|
||||
TimeFormat = "20060102-150405"
|
||||
TimeGlob = "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]" // glob pattern matching TimeFormat
|
||||
timeGlob = "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]" // glob pattern matching TimeFormat
|
||||
)
|
||||
|
||||
func New(fs fs.Filesystem, cfg config.VersioningConfiguration) (Versioner, error) {
|
||||
fac, ok := factories[cfg.Type]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("requested versioning type %q does not exist", cfg.Type)
|
||||
}
|
||||
|
||||
return fac(fs, cfg.Params), nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user