[PATCH 7 of 7] revlog: calculate minimum delta against p1, p2, prev. apparently it is too expensive compared to memory efficiency`
in3xes at gmail.com
in3xes at gmail.com
Fri Aug 6 02:00:39 CDT 2010
# HG changeset patch
# User Pradeepkumar Gayam <in3xes at gmail.com>
# Date 1281077514 -19800
# Node ID 064b77042761457ce8fbc1436f6eb6232665f885
# Parent 64457d46658a6b5777b856000130a086437abe0a
revlog: calculate minimum delta against p1, p2, prev. apparently it is too expensive compared to memory efficiency`
diff -r 64457d46658a -r 064b77042761 mercurial/revlog.py
--- a/mercurial/revlog.py Fri Aug 06 12:18:31 2010 +0530
+++ b/mercurial/revlog.py Fri Aug 06 12:21:54 2010 +0530
@@ -1019,7 +1019,7 @@
if self.base(rev) == rev:
return nullrev
elif self.flags(rev) & REVIDX_PARENTDELTA:
- return self.parentrevs(rev)[0]
+ return self.base(rev)
else:
return rev-1
@@ -1155,19 +1155,34 @@
curr = len(self)
prev = curr - 1
base = self.base(prev)
+ p1, p2 = self.rev(p1), self.rev(p2)
offset = self.end(prev)
flags = 0
+ def candidates(revs):
+ for p in revs:
+ ptext = self.revision(self.node(p))
+ delta = mdiff.textdiff(ptext, text)
+ data = compress(delta)
+ l = len(data[0]) + len(data[1])
+ yield l, p, data
+
if curr:
if not d:
if self._parentdelta:
- ptext = self.revision(p1)
- flags = REVIDX_PARENTDELTA
+ l, p, data = min(candidates(p for p in (p1, p2, prev) if p != nullrev))
+ if p != prev:
+ base = p
+ flags = REVIDX_PARENTDELTA
else:
ptext = self.revision(self.node(prev))
- d = mdiff.textdiff(ptext, text)
- data = compress(d)
- l = len(data[1]) + len(data[0])
+ d = mdiff.textdiff(ptext, text)
+ data = compress(d)
+ l = len(data[0]) + len(data[1])
+ else:
+ data = compress(d)
+ l = len(data[0]) + len(data[1])
+
dist = l + offset - self.start(base)
# full versions are inserted when the needed deltas
@@ -1180,7 +1195,7 @@
base = curr
e = (offset_type(offset, flags), l, len(text),
- base, link, self.rev(p1), self.rev(p2), node)
+ base, link, p1, p2, node)
self.index.insert(-1, e)
self.nodemap[node] = curr
More information about the Mercurial-devel
mailing list