diff --git a/lib/model/folder_sendrecv.go b/lib/model/folder_sendrecv.go index d00f2a408..89e4a1918 100644 --- a/lib/model/folder_sendrecv.go +++ b/lib/model/folder_sendrecv.go @@ -61,18 +61,17 @@ type copyBlocksState struct { const retainBits = fs.ModeSetgid | fs.ModeSetuid | fs.ModeSticky var ( - activity = newDeviceActivity() - errNoDevice = errors.New("peers who had this file went away, or the file has changed while syncing. will retry later") - errDirPrefix = "directory has been deleted on a remote device but " - errDirHasToBeScanned = errors.New(errDirPrefix + "contains changed files, scheduling scan") - errDirHasIgnored = errors.New(errDirPrefix + "contains ignored files (see ignore documentation for (?d) prefix)") - errDirHasReceiveOnlyChanged = errors.New(errDirPrefix + "contains locally changed files") - errDirNotEmpty = errors.New(errDirPrefix + "is not empty; the contents are probably ignored on that remote device, but not locally") - errNotAvailable = errors.New("no connected device has the required version of this file") - errModified = errors.New("file modified but not rescanned; will try again later") - errUnexpectedDirOnFileDel = errors.New("encountered directory when trying to remove file/symlink") - errIncompatibleSymlink = errors.New("incompatible symlink entry; rescan with newer Syncthing on source") - contextRemovingOldItem = "removing item to be replaced" + activity = newDeviceActivity() + errNoDevice = errors.New("peers who had this file went away, or the file has changed while syncing. will retry later") + errDirPrefix = "directory has been deleted on a remote device but " + errDirHasToBeScanned = errors.New(errDirPrefix + "contains changed files, scheduling scan") + errDirHasIgnored = errors.New(errDirPrefix + "contains ignored files (see ignore documentation for (?d) prefix)") + errDirNotEmpty = errors.New(errDirPrefix + "is not empty; the contents are probably ignored on that remote device, but not locally") + errNotAvailable = errors.New("no connected device has the required version of this file") + errModified = errors.New("file modified but not rescanned; will try again later") + errUnexpectedDirOnFileDel = errors.New("encountered directory when trying to remove file/symlink") + errIncompatibleSymlink = errors.New("incompatible symlink entry; rescan with newer Syncthing on source") + contextRemovingOldItem = "removing item to be replaced" ) type dbUpdateType int @@ -1894,7 +1893,10 @@ func (f *sendReceiveFolder) deleteDirOnDisk(dir string, snap *db.Snapshot, scanC return errDirHasIgnored } if hasReceiveOnlyChanged { - return errDirHasReceiveOnlyChanged + // Pretend we deleted the directory. It will be resurrected as a + // receive-only changed item on scan. + scanChan <- dir + return nil } if hasKnown { return errDirNotEmpty