Mercurial > hg-stable
changeset 18416:87f370c5fef5
bundlerepo: store validated deltabase rev in basemap instead of node
This avoids some lookups and aligns bundlerepo more with what revlog do.
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Wed, 16 Jan 2013 20:41:41 +0100 |
parents | 95b8629fd2de |
children | 610706715778 |
files | mercurial/bundlerepo.py |
diffstat | 1 files changed, 11 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/bundlerepo.py Wed Jan 16 20:41:41 2013 +0100 +++ b/mercurial/bundlerepo.py Wed Jan 16 20:41:41 2013 +0100 @@ -25,14 +25,14 @@ # (start). # # basemap is indexed with revisions coming from the bundle, and it - # maps to the node that is the base of the corresponding delta. + # maps to the revision that is the base of the corresponding delta. # # To differentiate a rev in the bundle from a rev in the revlog, we # check revision against basemap. opener = scmutil.readonlyvfs(opener) revlog.revlog.__init__(self, opener, indexfile) self.bundle = bundle - self.basemap = {} + self.basemap = {} # mapping rev to delta base rev n = len(self) chain = None self.bundlerevs = set() # used by 'bundle()' revset expression @@ -61,10 +61,16 @@ if p not in self.nodemap: raise error.LookupError(p, self.indexfile, _("unknown parent")) + + if deltabase not in self.nodemap: + raise LookupError(deltabase, self.indexfile, + _('unknown delta base')) + + baserev = self.rev(deltabase) # start, size, full unc. size, base (unused), link, p1, p2, node e = (revlog.offset_type(start, 0), size, -1, -1, link, self.rev(p1), self.rev(p2), node) - self.basemap[n] = deltabase + self.basemap[n] = baserev self.index.insert(-1, e) self.nodemap[node] = n self.bundlerevs.add(n) @@ -84,7 +90,7 @@ """return or calculate a delta between two revisions""" if rev1 in self.basemap and rev2 in self.basemap: # hot path for bundle - revb = self.rev(self.basemap[rev2]) + revb = self.basemap[rev2] if revb == rev1: return self._chunk(rev2) elif rev1 not in self.basemap and rev2 not in self.basemap: @@ -116,7 +122,7 @@ text = self._cache[2] break chain.append(iterrev) - iterrev = self.rev(self.basemap[iterrev]) + iterrev = self.basemap[iterrev] if text is None: text = revlog.revlog.revision(self, iterrev)