]> arthur.barton.de Git - bup.git/blobdiff - cmd/bloom-cmd.py
get/init: consistently use argv_bytes() for RemoteRepo/Client
[bup.git] / cmd / bloom-cmd.py
index ecf244c18a3a4f246ee44e91fbdb924a24d2599e..09ed081ed989ea335529ca08b64d83e90e0512d6 100755 (executable)
@@ -5,9 +5,11 @@ exec "$bup_python" "$0" ${1+"$@"}
 """
 # end of bup preamble
 
+from __future__ import absolute_import
 import glob, os, sys, tempfile
 
 from bup import options, git, bloom
+from bup.compat import hexstr
 from bup.helpers import (add_error, debug1, handle_ctrl_c, log, progress, qprogress,
                          saved_errors)
 
@@ -53,13 +55,13 @@ def check_bloom(path, bloomfilename, idx):
     log("bloom:   checking %s\n" % ridx)
     for objsha in git.open_idx(idx):
         if not b.exists(objsha):
-            add_error("bloom: ERROR: object %s missing" 
-                      % str(objsha).encode('hex'))
+            add_error('bloom: ERROR: object %s missing' % hexstr(objsha))
 
 
 _first = None
-def do_bloom(path, outfilename):
+def do_bloom(path, outfilename, k):
     global _first
+    assert k in (None, 4, 5)
     b = None
     if os.path.exists(outfilename) and not opt.force:
         b = bloom.ShaBloom(outfilename)
@@ -81,7 +83,6 @@ def do_bloom(path, outfilename):
         else:
             add.append(name)
             add_count += len(ix)
-    total = add_count + rest_count
 
     if not add:
         debug1("bloom: nothing to do.\n")
@@ -92,7 +93,11 @@ def do_bloom(path, outfilename):
             debug1("bloom: size %d != idx total %d, regenerating\n"
                    % (len(b), rest_count))
             b = None
-        elif (b.bits < bloom.MAX_BLOOM_BITS and
+        elif k is not None and k != b.k:
+            debug1("bloom: new k %d != existing k %d, regenerating\n"
+                   % (k, b.k))
+            b = None
+        elif (b.bits < bloom.MAX_BLOOM_BITS[b.k] and
               b.pfalse_positive(add_count) > bloom.MAX_PFALSE_POSITIVE):
             debug1("bloom: regenerating: adding %d entries gives "
                    "%.2f%% false positives.\n"
@@ -117,7 +122,7 @@ def do_bloom(path, outfilename):
     tfname = None
     if b is None:
         tfname = os.path.join(path, 'bup.tmp.bloom')
-        b = bloom.create(tfname, expected=add_count, k=opt.k)
+        b = bloom.create(tfname, expected=add_count, k=k)
     count = 0
     icount = 0
     for name in add:
@@ -158,7 +163,7 @@ for path in paths:
     elif opt.ruin:
         ruin_bloom(outfilename)
     else:
-        do_bloom(path, outfilename)
+        do_bloom(path, outfilename, opt.k)
 
 if saved_errors:
     log('WARNING: %d errors encountered during bloom.\n' % len(saved_errors))