# HG changeset patch # User Mads Kiilerich # Date 1409083412 -7200 # Node ID 98aafdf4cbf61410d817aceba5dda7b633ff15b3 # Parent 4ba35d4298a02d7b69578f9c6b90c9b1594135f5 convert: refactor hg getchanges and caching diff -r 4ba35d4298a0 -r 98aafdf4cbf6 hgext/convert/hg.py --- a/hgext/convert/hg.py Tue Aug 26 22:03:32 2014 +0200 +++ b/hgext/convert/hg.py Tue Aug 26 22:03:32 2014 +0200 @@ -301,7 +301,7 @@ raise NoRepo(_("%s is not a local Mercurial repository") % path) self.lastrev = None self.lastctx = None - self._changescache = None + self._changescache = None, None self.convertfp = None # Restrict converted revisions to startrev descendants startnode = ui.config('convert', 'hg.startrev') @@ -360,22 +360,20 @@ ctx = self.changectx(rev) parents = self.parents(ctx) if not parents: - files = sorted(ctx.manifest()) - # getcopies() is not needed for roots, but it is a simple way to - # detect missing revlogs and abort on errors or populate - # self.ignored - self.getcopies(ctx, parents, files) - return [(f, rev) for f in files if f not in self.ignored], {} - if self._changescache and self._changescache[0] == rev: - m, a, r = self._changescache[1] + files = copyfiles = ctx.manifest() else: - m, a, r = self.repo.status(parents[0].node(), ctx.node())[:3] - # getcopies() detects missing revlogs early, run it before - # filtering the changes. - copies = self.getcopies(ctx, parents, m + a) - changes = [(name, rev) for name in m + a + r - if name not in self.ignored] - return sorted(changes), copies + if self._changescache[0] == rev: + m, a, r = self._changescache[1] + else: + m, a, r = self.repo.status(parents[0].node(), ctx.node())[:3] + files = m + a + r + copyfiles = m + a + # getcopies() is also run for roots and before filtering so missing + # revlogs are detected early + copies = self.getcopies(ctx, parents, copyfiles) + changes = [(f, rev) for f in files if f not in self.ignored] + changes.sort() + return changes, copies def getcopies(self, ctx, parents, files): copies = {}