71
71
# properly nested, that there is no text outside of an insertion, that
72
72
# insertions or deletions are not repeated, etc.
74
# TODO: Make the info command just show info, not extract everything:
75
# it can be much faster.
77
# TODO: Perhaps use long integers as sets instead of set objects; may
80
74
# TODO: Parallel-extract that passes back each line along with a
81
75
# description of which revisions include it. Nice for checking all
82
76
# shas in parallel.
496
return self.numversions()
501
499
def check(self, progress_bar=None):
502
500
# check no circular inclusions
503
501
for version in range(self.numversions()):
675
def weave_info(filename, out):
676
674
"""Show some text information about the weave."""
677
from weavefile import read_weave
678
wf = file(filename, 'rb')
680
# FIXME: doesn't work on pipes
681
weave_size = wf.tell()
682
print >>out, "weave file size %d bytes" % weave_size
683
print >>out, "weave contains %d versions" % len(w._parents)
686
print '%6s %6s %8s %40s %20s' % ('ver', 'lines', 'bytes', 'sha1', 'parents')
687
for i in (6, 6, 8, 40, 20):
675
print '%6s %40s %20s' % ('ver', 'sha1', 'parents')
676
for i in (6, 40, 20):
690
for i in range(len(w._parents)):
693
bytes = sum((len(a) for a in text))
679
for i in range(w.numversions()):
694
680
sha1 = w._sha1s[i]
695
print '%6d %6d %8d %40s' % (i, lines, bytes, sha1),
696
for pv in w._parents[i]:
681
print '%6d %40s %s' % (i, sha1, ' '.join(map(str, w._parents[i])))
701
print >>out, "versions total %d bytes" % total
702
print >>out, "compression ratio %.3f" % (float(total)/float(weave_size))