Bladeren bron

lib/db: Update db when only local flags change (fixes #6008) (#6007)

Simon Frei 6 jaren geleden
bovenliggende
commit
28b6e8b063
3 gewijzigde bestanden met toevoegingen van 30 en 3 verwijderingen
  1. 2 2
      lib/db/instance.go
  2. 27 0
      lib/db/set_test.go
  3. 1 1
      lib/model/folder.go

+ 2 - 2
lib/db/instance.go

@@ -562,7 +562,7 @@ func (e errorSuggestion) Error() string {
 
 
 // unchanged checks if two files are the same and thus don't need to be updated.
 // unchanged checks if two files are the same and thus don't need to be updated.
 // Local flags or the invalid bit might change without the version
 // Local flags or the invalid bit might change without the version
-// being bumped. The IsInvalid() method handles both.
+// being bumped.
 func unchanged(nf, ef FileIntf) bool {
 func unchanged(nf, ef FileIntf) bool {
-	return ef.FileVersion().Equal(nf.FileVersion()) && ef.IsInvalid() == nf.IsInvalid()
+	return ef.FileVersion().Equal(nf.FileVersion()) && ef.IsInvalid() == nf.IsInvalid() && ef.FileLocalFlags() == nf.FileLocalFlags()
 }
 }

+ 27 - 0
lib/db/set_test.go

@@ -1462,6 +1462,33 @@ func TestSequenceIndex(t *testing.T) {
 	}
 	}
 }
 }
 
 
+func TestIgnoreAfterReceiveOnly(t *testing.T) {
+	ldb := db.OpenMemory()
+
+	file := "foo"
+	s := db.NewFileSet("test", fs.NewFilesystem(fs.FilesystemTypeBasic, "."), ldb)
+
+	fs := fileList{{
+		Name:       file,
+		Version:    protocol.Vector{Counters: []protocol.Counter{{ID: myID, Value: 1}}},
+		LocalFlags: protocol.FlagLocalReceiveOnly,
+	}}
+
+	s.Update(protocol.LocalDeviceID, fs)
+
+	fs[0].LocalFlags = protocol.FlagLocalIgnored
+
+	s.Update(protocol.LocalDeviceID, fs)
+
+	if f, ok := s.Get(protocol.LocalDeviceID, file); !ok {
+		t.Error("File missing in db")
+	} else if f.IsReceiveOnlyChanged() {
+		t.Error("File is still receive-only changed")
+	} else if !f.IsIgnored() {
+		t.Error("File is not ignored")
+	}
+}
+
 func replace(fs *db.FileSet, device protocol.DeviceID, files []protocol.FileInfo) {
 func replace(fs *db.FileSet, device protocol.DeviceID, files []protocol.FileInfo) {
 	fs.Drop(device)
 	fs.Drop(device)
 	fs.Update(device, files)
 	fs.Update(device, files)

+ 1 - 1
lib/model/folder.go

@@ -478,7 +478,7 @@ func (f *folder) scanSubdirs(subDirs []string) error {
 					return true
 					return true
 				}
 				}
 
 
-				l.Debugln("marking file as ignored", f)
+				l.Debugln("marking file as ignored", file)
 				nf := file.ConvertToIgnoredFileInfo(f.shortID)
 				nf := file.ConvertToIgnoredFileInfo(f.shortID)
 				batch.append(nf)
 				batch.append(nf)
 				changes++
 				changes++