mirror of
https://github.com/octoleo/syncthing.git
synced 2024-11-14 01:04:14 +00:00
cmd/syncthing: Copy config on upgrade, instead of renaming (fixes #3525)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3560
This commit is contained in:
parent
49910a1d85
commit
7990ffcc60
@ -889,19 +889,32 @@ func loadOrCreateConfig() *config.Wrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func archiveAndSaveConfig(cfg *config.Wrapper) error {
|
func archiveAndSaveConfig(cfg *config.Wrapper) error {
|
||||||
// To prevent previous config from being cleaned up, quickly touch it too
|
// Copy the existing config to an archive copy
|
||||||
now := time.Now()
|
|
||||||
_ = os.Chtimes(cfg.ConfigPath(), now, now) // May return error on Android etc; no worries
|
|
||||||
|
|
||||||
archivePath := cfg.ConfigPath() + fmt.Sprintf(".v%d", cfg.Raw().OriginalVersion)
|
archivePath := cfg.ConfigPath() + fmt.Sprintf(".v%d", cfg.Raw().OriginalVersion)
|
||||||
l.Infoln("Archiving a copy of old config file format at:", archivePath)
|
l.Infoln("Archiving a copy of old config file format at:", archivePath)
|
||||||
if err := osutil.Rename(cfg.ConfigPath(), archivePath); err != nil {
|
if err := copyFile(cfg.ConfigPath(), archivePath); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Do a regular atomic config sve
|
||||||
return cfg.Save()
|
return cfg.Save()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func copyFile(src, dst string) error {
|
||||||
|
bs, err := ioutil.ReadFile(src)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := ioutil.WriteFile(dst, bs, 0600); err != nil {
|
||||||
|
// Attempt to clean up
|
||||||
|
os.Remove(dst)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func startAuditing(mainService *suture.Supervisor) {
|
func startAuditing(mainService *suture.Supervisor) {
|
||||||
auditFile := timestampedLoc(locAuditLog)
|
auditFile := timestampedLoc(locAuditLog)
|
||||||
fd, err := os.OpenFile(auditFile, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600)
|
fd, err := os.OpenFile(auditFile, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600)
|
||||||
|
Loading…
Reference in New Issue
Block a user