# HG changeset patch # User Pierre-Yves David # Date 1490209879 -3600 # Node ID 3ec0be20e36553abc8bd161b58931ca29c4160da # Parent 3c2992afee71a5b16c7d6b027bfa142a9d2e98e0 stablerange: add a cache for stablesort ordering This will be very handy for merge, cf inline documentation for details. diff -r 3c2992afee71 -r 3ec0be20e365 hgext3rd/evolve/stablerange.py --- a/hgext3rd/evolve/stablerange.py Wed Mar 22 20:05:21 2017 +0100 +++ b/hgext3rd/evolve/stablerange.py Wed Mar 22 20:11:19 2017 +0100 @@ -156,6 +156,13 @@ self._depthcache = {} self._subrangescache = {} + # To slices merge, we need to walk their descendant in reverse stable + # sort order. For now we perform a full stable sort their descendant + # and then use the relevant top most part. This order is going to be + # the same for all ranges headed at the same merge. So we cache these + # value to reuse them accross the same invocation. + self._stablesortcache = {} + def warmup(self, repo, heads): """warm the cache up to 'heads'""" for r in repo.revs("::%ld", heads): @@ -213,7 +220,10 @@ def revsfromrange(self, repo, rangeid): # get all revs under heads in stable order - allrevs = stablesort(repo, [rangeid[0]]) + allrevs = self._stablesortcache.get(rangeid[0]) + if allrevs is None: + allrevs = stablesort(repo, [rangeid[0]]) + self._stablesortcache[rangeid[0]] = allrevs # takes from index revs = allrevs[rangeid[1]:] # sanity checks