[Pkg-bazaar-commits] ./bzr/unstable r553: - refactor handling of dangerous files (changed recently)

Martin Pool mbp at sourcefrog.net
Fri Apr 10 08:19:23 UTC 2009


------------------------------------------------------------
revno: 553
committer: Martin Pool <mbp at sourcefrog.net>
timestamp: Wed 2005-05-25 13:11:29 +1000
message:
  - refactor handling of dangerous files (changed recently)
modified:
  bzrlib/statcache.py
-------------- next part --------------
=== modified file 'bzrlib/statcache.py'
--- a/bzrlib/statcache.py	2005-05-25 02:58:04 +0000
+++ b/bzrlib/statcache.py	2005-05-25 03:11:29 +0000
@@ -114,19 +114,16 @@
            .replace('\r', '\\u000d')
 
 
-def _write_cache(basedir, entry_iter, dangerfiles):
+def _write_cache(basedir, entries):
     from atomicfile import AtomicFile
 
     cachefn = os.path.join(basedir, '.bzr', 'stat-cache')
     outf = AtomicFile(cachefn, 'wb')
     outf.write(CACHE_HEADER + '\n')
     try:
-        for entry in entry_iter:
+        for entry in entries:
             if len(entry) != 8:
                 raise ValueError("invalid statcache entry tuple %r" % entry)
-            
-            if entry[SC_FILE_ID] in dangerfiles:
-                continue                # changed too recently
             outf.write(safe_quote(entry[0])) # file id
             outf.write(' ')
             outf.write(entry[1])             # hex sha1
@@ -142,9 +139,9 @@
             outf.abort()
 
 
-def _write_cache_maybe(basedir, entry_iter, dangerfiles):
+def _try_write_cache(basedir, entries):
     try:
-        return _write_cache(basedir, entry_iter, dangerfiles)
+        return _write_cache(basedir, entries)
     except IOError, e:
         mutter("cannot update statcache in %s: %s" % (basedir, e))
     except OSError, e:
@@ -238,7 +235,7 @@
 
     # dangerfiles have been recently touched and can't be committed to
     # a persistent cache yet, but they are returned to the caller.
-    dangerfiles = {}
+    dangerfiles = []
     
     now = int(time.time())
 
@@ -258,7 +255,7 @@
             continue
 
         if (fp[FP_MTIME] >= now) or (fp[FP_CTIME] >= now):
-            dangerfiles[file_id] = True
+            dangerfiles.append(file_id)
 
         if cacheentry and (cacheentry[3:] == fp):
             continue                    # all stat fields unchanged
@@ -280,6 +277,14 @@
         
     if change_cnt:
         mutter('updating on-disk statcache')
-        _write_cache_maybe(basedir, cache.itervalues(), dangerfiles)
+
+        if dangerfiles:
+            safe_cache = cache.copy()
+            for file_id in dangerfiles:
+                del safe_cache[file_id]
+        else:
+            safe_cache = cache
+        
+        _try_write_cache(basedir, safe_cache.itervalues())
 
     return cache



More information about the Pkg-bazaar-commits mailing list