Browse code

HashCache and FileDict: ignore files with device = 0 or inode = 0

Bug #227 affects Windows where these values are zero, leading to sync
believing incorrectly that all local files are the same file.

Matt Domsch authored on 2013/10/03 08:43:37
Showing 2 changed files
... ...
@@ -36,6 +36,7 @@ class FileDict(SortedDict):
36 36
         return md5
37 37
 
38 38
     def record_hardlink(self, relative_file, dev, inode, md5):
39
+        if dev == 0 or inode == 0: return # Windows
39 40
         if dev not in self.hardlinks:
40 41
             self.hardlinks[dev] = dict()
41 42
         if inode not in self.hardlinks[dev]:
... ...
@@ -5,6 +5,7 @@ class HashCache(object):
5 5
         self.inodes = dict()
6 6
 
7 7
     def add(self, dev, inode, mtime, size, md5):
8
+        if dev == 0 or inode == 0: return # Windows
8 9
         if dev not in self.inodes:
9 10
             self.inodes[dev] = dict()
10 11
         if inode not in self.inodes[dev]:
... ...
@@ -27,7 +28,10 @@ class HashCache(object):
27 27
                     self.inodes[d][i][c]['purge'] = True
28 28
 
29 29
     def unmark_for_purge(self, dev, inode, mtime, size):
30
-        d = self.inodes[dev][inode][mtime]
30
+        try:
31
+            d = self.inodes[dev][inode][mtime]
32
+        except:
33
+            return
31 34
         if d['size'] == size and 'purge' in d:
32 35
             del self.inodes[dev][inode][mtime]['purge']
33 36