From 914b09fd1f77ecefdb9b52af607ca12f5d51e756 Mon Sep 17 00:00:00 2001 From: Simon Frei Date: Sun, 23 Apr 2017 23:50:56 +0000 Subject: [PATCH] lib/model: Create root directory for paused folders (fixes #4094) GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4095 --- cmd/syncthing/main.go | 1 + lib/config/folderconfiguration.go | 20 ++++++++++++++++++++ lib/model/model.go | 14 +++----------- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index 13ba2a559..931cb2e52 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -815,6 +815,7 @@ func syncthingMain(runtimeOptions RuntimeOptions) { // Add and start folders for _, folderCfg := range cfg.Folders() { if folderCfg.Paused { + folderCfg.CreateRoot() continue } m.AddFolder(folderCfg) diff --git a/lib/config/folderconfiguration.go b/lib/config/folderconfiguration.go index 76bda68dc..eb237f1de 100644 --- a/lib/config/folderconfiguration.go +++ b/lib/config/folderconfiguration.go @@ -104,6 +104,26 @@ func (f *FolderConfiguration) HasMarker() bool { return err == nil } +func (f *FolderConfiguration) CreateRoot() (err error) { + // Directory permission bits. Will be filtered down to something + // sane by umask on Unixes. + permBits := os.FileMode(0777) + if runtime.GOOS == "windows" { + // Windows has no umask so we must chose a safer set of bits to + // begin with. + permBits = 0700 + } + + if _, err = os.Stat(f.Path()); os.IsNotExist(err) { + if err = osutil.MkdirAll(f.Path(), permBits); err != nil { + l.Warnf("Creating directory for %v: %v", + f.Description(), err) + } + } + + return err +} + func (f FolderConfiguration) Description() string { if f.Label == "" { return f.ID diff --git a/lib/model/model.go b/lib/model/model.go index 7c4586216..49b6e064b 100644 --- a/lib/model/model.go +++ b/lib/model/model.go @@ -231,18 +231,9 @@ func (m *Model) startFolderLocked(folder string) config.FolderType { // Directory permission bits. Will be filtered down to something // sane by umask on Unixes. - permBits := os.FileMode(0777) - if runtime.GOOS == "windows" { - // Windows has no umask so we must chose a safer set of bits to - // begin with. - permBits = 0700 - } - if _, err := os.Stat(cfg.Path()); os.IsNotExist(err) { - if err := osutil.MkdirAll(cfg.Path(), permBits); err != nil { - l.Warnln("Creating folder:", err) - } - } + cfg.CreateRoot() + if err := cfg.CreateMarker(); err != nil { l.Warnln("Creating folder marker:", err) } @@ -2385,6 +2376,7 @@ func (m *Model) CommitConfiguration(from, to config.Configuration) bool { // A folder was added. if cfg.Paused { l.Infoln(m, "Paused folder", cfg.Description()) + cfg.CreateRoot() } else { l.Infoln(m, "Adding folder", cfg.Description()) m.AddFolder(cfg)