Преглед изворни кода

lib/model: Check availability later to catch renames (#5097)

Simon Frei пре 7 година
родитељ
комит
ff3cbdc90d
2 измењених фајлова са 13 додато и 15 уклоњено
  1. 1 1
      lib/config/folderconfiguration.go
  2. 12 14
      lib/model/folder_sendrecv.go

+ 1 - 1
lib/config/folderconfiguration.go

@@ -282,7 +282,7 @@ func (l FolderDeviceConfigurationList) Len() int {
 	return len(l)
 }
 
-func (f *FolderConfiguration) CheckFreeSpace() (err error) {
+func (f *FolderConfiguration) CheckFreeSpace() error {
 	return checkFreeSpace(f.MinDiskFree, f.Filesystem())
 }
 

+ 12 - 14
lib/model/folder_sendrecv.go

@@ -349,18 +349,8 @@ func (f *sendReceiveFolder) processNeeded(ignores *ignore.Matcher, folderFiles *
 			changed++
 
 		case file.Type == protocol.FileInfoTypeFile:
-			// Queue files for processing after directories and symlinks, if
-			// it has availability.
-
-			devices := folderFiles.Availability(file.Name)
-			for _, dev := range devices {
-				if _, ok := f.model.Connection(dev); ok {
-					f.queue.Push(file.Name, file.Size, file.ModTime())
-					changed++
-					return true
-				}
-			}
-			f.newError("pull", file.Name, errNotAvailable)
+			// Queue files for processing after directories and symlinks.
+			f.queue.Push(file.Name, file.Size, file.ModTime())
 
 		case runtime.GOOS == "windows" && file.IsSymlink():
 			file.SetUnsupported(f.shortID)
@@ -492,8 +482,16 @@ nextFile:
 			}
 		}
 
-		// Handle the file normally, by coping and pulling, etc.
-		f.handleFile(fi, copyChan, finisherChan, dbUpdateChan)
+		devices := folderFiles.Availability(fileName)
+		for _, dev := range devices {
+			if _, ok := f.model.Connection(dev); ok {
+				changed++
+				// Handle the file normally, by coping and pulling, etc.
+				f.handleFile(fi, copyChan, finisherChan, dbUpdateChan)
+				continue nextFile
+			}
+		}
+		f.newError("pull", fileName, errNotAvailable)
 	}
 
 	return changed, fileDeletions, dirDeletions, nil