]> arthur.barton.de Git - bup.git/commitdiff
index: if files were already deleted, don't dirty the index. bup-0.09
authorAvery Pennarun <apenwarr@gmail.com>
Tue, 9 Feb 2010 06:00:21 +0000 (01:00 -0500)
committerAvery Pennarun <apenwarr@gmail.com>
Tue, 9 Feb 2010 06:04:35 +0000 (01:04 -0500)
We had a bug where any deleted files in the index would always dirty all
their parent directories when refreshing, which is inefficient.

cmd-index.py
index.py

index 7b4f94849511c0e3874e0a99df1a3e90f144410e..b3f003b378e68b35f0a340ab6d4e643b0f370e3b 100755 (executable)
@@ -70,8 +70,9 @@ def update_index(top):
             progress('Indexing: %d\r' % total)
         total += 1
         while rig.cur and rig.cur.name > path:  # deleted paths
             progress('Indexing: %d\r' % total)
         total += 1
         while rig.cur and rig.cur.name > path:  # deleted paths
-            rig.cur.set_deleted()
-            rig.cur.repack()
+            if rig.cur.exists():
+                rig.cur.set_deleted()
+                rig.cur.repack()
             rig.next()
         if rig.cur and rig.cur.name == path:    # paths that already existed
             if pst:
             rig.next()
         if rig.cur and rig.cur.name == path:    # paths that already existed
             if pst:
@@ -155,8 +156,7 @@ if opt.update:
 if opt['print'] or opt.status or opt.modified:
     for (name, ent) in index.Reader(indexfile).filter(extra or ['']):
         if (opt.modified 
 if opt['print'] or opt.status or opt.modified:
     for (name, ent) in index.Reader(indexfile).filter(extra or ['']):
         if (opt.modified 
-            and (ent.flags & index.IX_HASHVALID
-                 or not ent.mode)):
+            and (ent.is_valid() or ent.is_deleted() or not ent.mode)):
             continue
         line = ''
         if opt.status:
             continue
         line = ''
         if opt.status:
index 225df3f8d02293db25ab8a291a553712447bdf86..299546c6744815a66b0fe5e9236127639d07269a 100644 (file)
--- a/index.py
+++ b/index.py
@@ -102,7 +102,6 @@ class Entry:
 
     def invalidate(self):
         self.flags &= ~IX_HASHVALID
 
     def invalidate(self):
         self.flags &= ~IX_HASHVALID
-        self.set_dirty()
 
     def validate(self, gitmode, sha):
         assert(sha)
 
     def validate(self, gitmode, sha):
         assert(sha)
@@ -110,16 +109,15 @@ class Entry:
         self.sha = sha
         self.flags |= IX_HASHVALID|IX_EXISTS
 
         self.sha = sha
         self.flags |= IX_HASHVALID|IX_EXISTS
 
+    def exists(self):
+        return not self.is_deleted()
+
     def is_deleted(self):
         return (self.flags & IX_EXISTS) == 0
 
     def set_deleted(self):
         if self.flags & IX_EXISTS:
             self.flags &= ~(IX_EXISTS | IX_HASHVALID)
     def is_deleted(self):
         return (self.flags & IX_EXISTS) == 0
 
     def set_deleted(self):
         if self.flags & IX_EXISTS:
             self.flags &= ~(IX_EXISTS | IX_HASHVALID)
-            self.set_dirty()
-
-    def set_dirty(self):
-        pass # FIXME
 
     def is_real(self):
         return not self.is_fake()
 
     def is_real(self):
         return not self.is_fake()