mercurial/dirstate.py
changeset 6326 af3f26b6bba4
parent 6298 53cbb33e1269
child 6327 6d952dc2abc9
--- a/mercurial/dirstate.py	Thu Mar 20 11:12:35 2008 -0500
+++ b/mercurial/dirstate.py	Wed Mar 19 17:55:21 2008 -0300
@@ -10,7 +10,7 @@
 from node import nullid
 from i18n import _
 import struct, os, bisect, stat, strutil, util, errno, ignore
-import cStringIO, osutil
+import cStringIO, osutil, sys
 
 _unknown = ('?', 0, 0, 0)
 _format = ">cllll"
@@ -66,6 +66,12 @@
         elif name == '_checkexec':
             self._checkexec = util.checkexec(self._root)
             return self._checkexec
+        elif name == '_limit':
+            try:
+                self._limit = int(self._ui.config('ui', 'limit', 1))
+            except ValueError:
+                self._limit = 1
+            return self._limit
         else:
             raise AttributeError, name
 
@@ -335,6 +341,11 @@
     def write(self):
         if not self._dirty:
             return
+        st = self._opener("dirstate", "w", atomictemp=True)
+        if self._limit > 0:
+            limit = util.fstat(st).st_mtime - self._limit
+        else:
+            limit = sys.maxint
         cs = cStringIO.StringIO()
         copymap = self._copymap
         pack = struct.pack
@@ -343,10 +354,11 @@
         for f, e in self._map.iteritems():
             if f in copymap:
                 f = "%s\0%s" % (f, copymap[f])
+            if e[3] > limit and e[0] == 'n':
+                e = (e[0], 0, -1, -1, 0)
             e = pack(_format, e[0], e[1], e[2], e[3], len(f))
             write(e)
             write(f)
-        st = self._opener("dirstate", "w", atomictemp=True)
         st.write(cs.getvalue())
         st.rename()
         self._dirty = self._dirtypl = False