+def ruin_bloom(bloomfilename):
+ rbloomfilename = git.repo_rel(bloomfilename)
+ if not os.path.exists(bloomfilename):
+ log(path_msg(bloomfilename) + '\n')
+ add_error('bloom: %s not found to ruin\n' % path_msg(rbloomfilename))
+ return
+ b = bloom.ShaBloom(bloomfilename, readwrite=True, expected=1)
+ b.map[16 : 16 + 2**b.bits] = b'\0' * 2**b.bits
+
+
+def check_bloom(path, bloomfilename, idx):
+ rbloomfilename = git.repo_rel(bloomfilename)
+ ridx = git.repo_rel(idx)
+ if not os.path.exists(bloomfilename):
+ log('bloom: %s: does not exist.\n' % path_msg(rbloomfilename))
+ return
+ b = bloom.ShaBloom(bloomfilename)
+ if not b.valid():
+ add_error('bloom: %r is invalid.\n' % path_msg(rbloomfilename))
+ return
+ base = os.path.basename(idx)
+ if base not in b.idxnames:
+ log('bloom: %s does not contain the idx.\n' % path_msg(rbloomfilename))
+ return
+ if base == idx:
+ idx = os.path.join(path, idx)
+ log('bloom: bloom file: %s\n' % path_msg(rbloomfilename))
+ log('bloom: checking %s\n' % path_msg(ridx))
+ for objsha in git.open_idx(idx):
+ if not b.exists(objsha):
+ add_error('bloom: ERROR: object %s missing' % hexstr(objsha))
+
+
+_first = None
+def do_bloom(path, outfilename, k):
+ global _first
+ assert k in (None, 4, 5)