mirror of
https://github.com/octoleo/syncthing.git
synced 2024-12-23 03:18:59 +00:00
commit
fe2ae4c6c3
@ -1004,6 +1004,9 @@ func (m *Model) AddFolder(cfg config.FolderConfiguration) {
|
|||||||
m.deviceFolders[device.DeviceID] = append(m.deviceFolders[device.DeviceID], cfg.ID)
|
m.deviceFolders[device.DeviceID] = append(m.deviceFolders[device.DeviceID], cfg.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ignores, _ := ignore.Load(filepath.Join(cfg.Path, ".stignore"), m.cfg.Options().CacheIgnoredFiles)
|
||||||
|
m.folderIgnores[cfg.ID] = ignores
|
||||||
|
|
||||||
m.addedFolder = true
|
m.addedFolder = true
|
||||||
m.fmut.Unlock()
|
m.fmut.Unlock()
|
||||||
}
|
}
|
||||||
|
@ -367,12 +367,13 @@ func (p *Puller) handleDir(file protocol.FileInfo) {
|
|||||||
l.Debugf("need dir\n\t%v\n\t%v", file, curFile)
|
l.Debugf("need dir\n\t%v\n\t%v", file, curFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
info, err := os.Stat(realName)
|
info, err := os.Lstat(realName)
|
||||||
|
isLink, _ := symlinks.IsSymlink(realName)
|
||||||
switch {
|
switch {
|
||||||
// There is already something under that name, but it's a file.
|
// There is already something under that name, but it's a file/link.
|
||||||
// Most likely a file is getting replaced with a directory.
|
// Most likely a file/link is getting replaced with a directory.
|
||||||
// Remove the file and fall through to directory creation.
|
// Remove the file/link and fall through to directory creation.
|
||||||
case err == nil && !info.IsDir():
|
case isLink || (err == nil && !info.IsDir()):
|
||||||
err = osutil.InWritableDir(os.Remove, realName)
|
err = osutil.InWritableDir(os.Remove, realName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Infof("Puller (folder %q, dir %q): %v", p.folder, file.Name, err)
|
l.Infof("Puller (folder %q, dir %q): %v", p.folder, file.Name, err)
|
||||||
@ -792,7 +793,14 @@ func (p *Puller) finisherRoutine(in <-chan *sharedPullerState) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Replace the original file with the new one
|
// If the target path is a symlink or a directory, we cannot copy
|
||||||
|
// over it, hence remove it before proceeding.
|
||||||
|
stat, err := os.Lstat(state.realName)
|
||||||
|
isLink, _ := symlinks.IsSymlink(state.realName)
|
||||||
|
if isLink || (err == nil && stat.IsDir()) {
|
||||||
|
osutil.InWritableDir(os.Remove, state.realName)
|
||||||
|
}
|
||||||
|
// Replace the original content with the new one
|
||||||
err = osutil.Rename(state.tempName, state.realName)
|
err = osutil.Rename(state.tempName, state.realName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Warnln("puller: final:", err)
|
l.Warnln("puller: final:", err)
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
// +build integration
|
// +build integration
|
||||||
|
|
||||||
// This currently fails; it should be fixed
|
// This currently fails; it should be fixed
|
||||||
package integration_test_disabled
|
package integration_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
@ -191,8 +191,6 @@ func TestSymlinks(t *testing.T) {
|
|||||||
}
|
}
|
||||||
fd.Close()
|
fd.Close()
|
||||||
|
|
||||||
/* Currently fails, to be fixed with #80
|
|
||||||
|
|
||||||
// Replace one with a directory
|
// Replace one with a directory
|
||||||
|
|
||||||
err = os.Remove("s1/repDirLink")
|
err = os.Remove("s1/repDirLink")
|
||||||
@ -204,7 +202,6 @@ func TestSymlinks(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
// Replace a file with a symlink
|
// Replace a file with a symlink
|
||||||
|
|
||||||
@ -217,8 +214,6 @@ func TestSymlinks(t *testing.T) {
|
|||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Currently fails, to be fixed with #80
|
|
||||||
|
|
||||||
// Replace a directory with a symlink
|
// Replace a directory with a symlink
|
||||||
|
|
||||||
err = os.RemoveAll("s1/dirToReplace")
|
err = os.RemoveAll("s1/dirToReplace")
|
||||||
@ -229,7 +224,6 @@ func TestSymlinks(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
// Sync these changes and recheck
|
// Sync these changes and recheck
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user