X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cmd%2Fmargin-cmd.py;h=14e7cd7121167f36b74e09ef7d16f0fe2b2034e8;hb=093752b42c5548028c6f84c67f7741b2321c512f;hp=c042bf88bab8dd3795cb75d3e6f2bf2df44c3109;hpb=c40b3dd5fd74e72024fbaad3daf5a958aefa1c54;p=bup.git diff --git a/cmd/margin-cmd.py b/cmd/margin-cmd.py index c042bf8..14e7cd7 100755 --- a/cmd/margin-cmd.py +++ b/cmd/margin-cmd.py @@ -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