From fcf60e7f7ccb6ce1e1549d2fc1cbe17287004837 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Wed, 8 Oct 2014 13:52:05 +0200 Subject: [PATCH] Archive a copy of config.xml when the format changes --- cmd/syncthing/main.go | 8 ++++++++ internal/config/config.go | 8 +++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index 8f9e5dee..87f28749 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -397,6 +397,14 @@ func syncthingMain() { l.Infof("Edit %s to taste or use the GUI\n", cfgFile) } + if cfg.Raw().OriginalVersion != config.CurrentVersion { + l.Infoln("Archiving a copy of old config file format") + // Archive a copy + osutil.Rename(cfgFile, cfgFile+fmt.Sprintf(".v%d", cfg.Raw().OriginalVersion)) + // Save the new version + cfg.Save() + } + if len(profiler) > 0 { go func() { l.Debugln("Starting profiler on", profiler) diff --git a/internal/config/config.go b/internal/config/config.go index e137fc61..58ccc9f3 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -32,14 +32,17 @@ import ( var l = logger.DefaultLogger +const CurrentVersion = 5 + type Configuration struct { - Version int `xml:"version,attr" default:"5"` + Version int `xml:"version,attr"` Folders []FolderConfiguration `xml:"folder"` Devices []DeviceConfiguration `xml:"device"` GUI GUIConfiguration `xml:"gui"` Options OptionsConfiguration `xml:"options"` XMLName xml.Name `xml:"configuration" json:"-"` + OriginalVersion int `xml:"-" json:"-"` // The version we read from disk, before any conversion Deprecated_Repositories []FolderConfiguration `xml:"repository" json:"-"` Deprecated_Nodes []DeviceConfiguration `xml:"node" json:"-"` } @@ -165,6 +168,8 @@ type GUIConfiguration struct { func New(myID protocol.DeviceID) Configuration { var cfg Configuration + cfg.Version = CurrentVersion + cfg.OriginalVersion = CurrentVersion setDefaults(&cfg) setDefaults(&cfg.Options) @@ -183,6 +188,7 @@ func ReadXML(r io.Reader, myID protocol.DeviceID) (Configuration, error) { setDefaults(&cfg.GUI) err := xml.NewDecoder(r).Decode(&cfg) + cfg.OriginalVersion = cfg.Version cfg.prepare(myID) return cfg, err