Mercurial > public > mercurial-scm > hg-stable
diff mercurial/revlog.py @ 2078:441ea218414e
Fill in the uncompressed size during revlog.addgroup
This uses code from Matt to calculate the size change that
would result from applying a delta to keep an accurate running
total of the text size during revlog.addgroup
author | mason@suse.com |
---|---|
date | Tue, 04 Apr 2006 16:38:44 -0400 |
parents | 4d0700ae0991 |
children | ee96ca273f32 |
line wrap: on
line diff
--- a/mercurial/revlog.py Tue Apr 04 16:38:44 2006 -0400 +++ b/mercurial/revlog.py Tue Apr 04 16:38:44 2006 -0400 @@ -342,8 +342,40 @@ if self.version != 0: return self.ngoffset(self.index[rev][0]) return self.index[rev][0] + def end(self, rev): return self.start(rev) + self.length(rev) + def size(self, rev): + """return the length of the uncompressed text for a given revision""" + l = -1 + if self.version != 0: + l = self.index[rev][2] + if l >= 0: + return l + + t = self.revision(self.node(rev)) + return len(t) + + # alternate implementation, The advantage to this code is it + # will be faster for a single revision. But, the results are not + # cached, so finding the size of every revision will be slower. + """ + if self.cache and self.cache[1] == rev: + return len(self.cache[2]) + + base = self.base(rev) + if self.cache and self.cache[1] >= base and self.cache[1] < rev: + base = self.cache[1] + text = self.cache[2] + else: + text = self.revision(self.node(base)) + + l = len(text) + for x in xrange(base + 1, rev + 1): + l = mdiff.patchedsize(l, self.chunk(x)) + return l + """ + def length(self, rev): if rev < 0: return 0 @@ -904,7 +936,7 @@ node = None base = prev = -1 - start = end = measure = 0 + start = end = textlen = 0 if r: end = self.end(t) @@ -949,8 +981,9 @@ if chain == prev: tempd = compress(delta) cdelta = tempd[0] + tempd[1] + textlen = mdiff.patchedsize(textlen, delta) - if chain != prev or (end - start + len(cdelta)) > measure * 2: + if chain != prev or (end - start + len(cdelta)) > textlen * 2: # flush our writes here so we can read it in revision if dfh: dfh.flush() @@ -960,12 +993,12 @@ chk = self.addrevision(text, transaction, link, p1, p2) if chk != node: raise RevlogError(_("consistency error adding group")) - measure = len(text) + textlen = len(text) else: if self.version == 0: e = (end, len(cdelta), base, link, p1, p2, node) else: - e = (self.offset_type(end, 0), len(cdelta), -1, base, + e = (self.offset_type(end, 0), len(cdelta), textlen, base, link, self.rev(p1), self.rev(p2), node) self.index.append(e) self.nodemap[node] = r