]> arthur.barton.de Git - bup.git/blobdiff - cmd/margin-cmd.py
README: add 0.30.x to CI status table
[bup.git] / cmd / margin-cmd.py
index c042bf88bab8dd3795cb75d3e6f2bf2df44c3109..14e7cd7121167f36b74e09ef7d16f0fe2b2034e8 100755 (executable)
@@ -10,6 +10,7 @@ import sys, struct, math
 
 from bup import options, git, _helpers
 from bup.helpers import log
+from bup.io import byte_stream
 
 POPULATION_OF_EARTH=6.7e9  # as of September, 2010
 
@@ -26,31 +27,34 @@ if extra:
     o.fatal("no arguments expected")
 
 git.check_repo_or_die()
-git.ignore_midx = opt.ignore_midx
 
-mi = git.PackIdxList(git.repo('objects/pack'))
+mi = git.PackIdxList(git.repo(b'objects/pack'), ignore_midx=opt.ignore_midx)
 
-def do_predict(ix):
+def do_predict(ix, out):
     total = len(ix)
     maxdiff = 0
     for count,i in enumerate(ix):
         prefix = struct.unpack('!Q', i[:8])[0]
-        expected = prefix * total / (1<<64)
+        expected = prefix * total // (1 << 64)
         diff = count - expected
         maxdiff = max(maxdiff, abs(diff))
-    print '%d of %d (%.3f%%) ' % (maxdiff, len(ix), maxdiff*100.0/len(ix))
-    sys.stdout.flush()
+    out.write(b'%d of %d (%.3f%%) '
+              % (maxdiff, len(ix), maxdiff * 100.0 / len(ix)))
+    out.flush()
     assert(count+1 == len(ix))
 
+sys.stdout.flush()
+out = byte_stream(sys.stdout)
+
 if opt.predict:
     if opt.ignore_midx:
         for pack in mi.packs:
-            do_predict(pack)
+            do_predict(pack, out)
     else:
-        do_predict(mi)
+        do_predict(mi, out)
 else:
     # default mode: find longest matching prefix
-    last = '\0'*20
+    last = b'\0'*20
     longmatch = 0
     for i in mi:
         if i == last:
@@ -59,7 +63,7 @@ else:
         pm = _helpers.bitmatch(last, i)
         longmatch = max(longmatch, pm)
         last = i
-    print longmatch
+    out.write(b'%d\n' % longmatch)
     log('%d matching prefix bits\n' % longmatch)
     doublings = math.log(len(mi), 2)
     bpd = longmatch / doublings