lib/model: Check before replacing existing file on pull (fixes #5571) (#5567)

This commit is contained in:
Simon Frei
2019-03-07 15:15:14 +01:00
committed by GitHub
parent 3d5af675db
commit 8e238c8e48
3 changed files with 258 additions and 122 deletions

View File

@@ -76,7 +76,7 @@ func (f *receiveOnlyFolder) Revert(fs *db.FileSet, updateFn func([]protocol.File
defer close(scanChan)
delQueue := &deleteQueue{
handler: f, // for the deleteFile and deleteDir methods
handler: f, // for the deleteItemOnDisk and deleteDirOnDisk methods
ignores: ignores,
scanChan: scanChan,
}
@@ -171,8 +171,8 @@ func (f *receiveOnlyFolder) Revert(fs *db.FileSet, updateFn func([]protocol.File
// directories for last.
type deleteQueue struct {
handler interface {
deleteFile(file protocol.FileInfo, scanChan chan<- string) (dbUpdateJob, error)
deleteDir(dir string, ignores *ignore.Matcher, scanChan chan<- string) error
deleteItemOnDisk(item protocol.FileInfo, ignores *ignore.Matcher, scanChan chan<- string) error
deleteDirOnDisk(dir string, ignores *ignore.Matcher, scanChan chan<- string) error
}
ignores *ignore.Matcher
dirs []string
@@ -193,7 +193,7 @@ func (q *deleteQueue) handle(fi protocol.FileInfo) (bool, error) {
}
// Kill it.
_, err := q.handler.deleteFile(fi, q.scanChan)
err := q.handler.deleteItemOnDisk(fi, q.ignores, q.scanChan)
return true, err
}
@@ -205,7 +205,7 @@ func (q *deleteQueue) flush() ([]string, error) {
var deleted []string
for _, dir := range q.dirs {
if err := q.handler.deleteDir(dir, q.ignores, q.scanChan); err == nil {
if err := q.handler.deleteDirOnDisk(dir, q.ignores, q.scanChan); err == nil {
deleted = append(deleted, dir)
} else if err != nil && firstError == nil {
firstError = err