--- a/hgext/evolve.py Wed Aug 20 21:14:49 2014 -0700
+++ b/hgext/evolve.py Wed Aug 20 20:49:48 2014 -0700
@@ -70,6 +70,9 @@
from mercurial.hgweb import hgweb_mod
from mercurial import bundle2
+cmdtable = {}
+command = cmdutil.command(cmdtable)
+
_pack = struct.pack
if gboptsmap is not None:
@@ -357,52 +360,96 @@
if not opts.get('user') and opts.get('current_user'):
opts['user'] = ui.username()
-@eh.wrapfunction(mercurial.obsolete, 'createmarkers')
-def _createmarkers(orig, repo, relations, *args, **kwargs):
- """register parent information at prune time"""
- # every time this test is run, a kitten is slain.
- # Change it as soon as possible
- if '[,{metadata}]' in orig.__doc__:
- relations = list(relations)
- for idx, rel in enumerate(relations):
- prec = rel[0]
- sucs = rel[1]
- if not sucs:
- meta = {}
- if 2 < len(rel):
- meta.update(rel[2])
- for i, p in enumerate(prec.parents(), 1):
- meta['p%i' % i] = p.hex()
- relations[idx] = (prec, sucs, meta)
- return orig(repo, relations, *args, **kwargs)
-
-def createmarkers(*args, **kwargs):
- return obsolete.createmarkers(*args, **kwargs)
-
-class pruneobsstore(obsolete.obsstore):
-
- def __init__(self, *args, **kwargs):
- self.prunedchildren = {}
- return super(pruneobsstore, self).__init__(*args, **kwargs)
-
- def _load(self, markers):
- markers = self._prunedetectingmarkers(markers)
- return super(pruneobsstore, self)._load(markers)
-
-
- def _prunedetectingmarkers(self, markers):
- for m in markers:
- if not m[1]: # no successors
- meta = obsolete.decodemeta(m[3])
- if 'p1' in meta:
- p1 = node.bin(meta['p1'])
- self.prunedchildren.setdefault(p1, set()).add(m)
- if 'p2' in meta:
- p2 = node.bin(meta['p2'])
- self.prunedchildren.setdefault(p2, set()).add(m)
- yield m
-
-obsolete.obsstore = pruneobsstore
+
+createmarkers = obsolete.createmarkers
+if not util.safehasattr(obsolete.obsstore, 'relevantmarkers'):
+
+ @eh.wrapfunction(mercurial.obsolete, 'createmarkers')
+ def _createmarkers(orig, repo, relations, *args, **kwargs):
+ """register parent information at prune time"""
+ # every time this test is run, a kitten is slain.
+ # Change it as soon as possible
+ if '[,{metadata}]' in orig.__doc__:
+ relations = list(relations)
+ for idx, rel in enumerate(relations):
+ prec = rel[0]
+ sucs = rel[1]
+ if not sucs:
+ meta = {}
+ if 2 < len(rel):
+ meta.update(rel[2])
+ for i, p in enumerate(prec.parents(), 1):
+ meta['p%i' % i] = p.hex()
+ relations[idx] = (prec, sucs, meta)
+ return orig(repo, relations, *args, **kwargs)
+
+ def createmarkers(*args, **kwargs):
+ return obsolete.createmarkers(*args, **kwargs)
+
+ class pruneobsstore(obsolete.obsstore):
+
+ def __init__(self, *args, **kwargs):
+ self.prunedchildren = {}
+ return super(pruneobsstore, self).__init__(*args, **kwargs)
+
+ def _load(self, markers):
+ markers = self._prunedetectingmarkers(markers)
+ return super(pruneobsstore, self)._load(markers)
+
+
+ def _prunedetectingmarkers(self, markers):
+ for m in markers:
+ if not m[1]: # no successors
+ meta = obsolete.decodemeta(m[3])
+ if 'p1' in meta:
+ p1 = node.bin(meta['p1'])
+ self.prunedchildren.setdefault(p1, set()).add(m)
+ if 'p2' in meta:
+ p2 = node.bin(meta['p2'])
+ self.prunedchildren.setdefault(p2, set()).add(m)
+ yield m
+
+ obsolete.obsstore = pruneobsstore
+
+ @eh.addattr(obsolete.obsstore, 'relevantmarkers')
+ def relevantmarkers(self, nodes):
+ """return a set of all obsolescence marker relevant to a set of node.
+
+ "relevant" to a set of node mean:
+
+ - marker that use this changeset as successors
+ - prune marker of direct children on this changeset.
+ - recursive application of the two rules on precursors of these markers
+
+ It a set so you cannot rely on order"""
+ seennodes = set(nodes)
+ seenmarkers = set()
+ pendingnodes = set(nodes)
+ precursorsmarkers = self.precursors
+ prunedchildren = self.prunedchildren
+ while pendingnodes:
+ direct = set()
+ for current in pendingnodes:
+ direct.update(precursorsmarkers.get(current, ()))
+ direct.update(prunedchildren.get(current, ()))
+ direct -= seenmarkers
+ pendingnodes = set([m[0] for m in direct])
+ seenmarkers |= direct
+ pendingnodes -= seennodes
+ seennodes |= pendingnodes
+ return seenmarkers
+
+@command('debugobsoleterelevant',
+ [],
+ 'REVSET')
+def debugobsoleterelevant(ui, repo, *revsets):
+ """print allobsolescence marker relevant to a set of revision"""
+ nodes = [ctx.node() for ctx in repo.set('%lr', revsets)]
+ markers = repo.obsstore.relevantmarkers(nodes)
+ for rawmarker in sorted(markers):
+ marker = obsolete.marker(repo, rawmarker)
+ cmdutil.showmarker(ui, marker)
+
#####################################################################
### Critical fix ###
@@ -913,8 +960,6 @@
### new command
#############################
-cmdtable = {}
-command = cmdutil.command(cmdtable)
metadataopts = [
('d', 'date', '',
_('record the specified date in metadata'), _('DATE')),
@@ -2285,44 +2330,6 @@
ui.progress(topic, *args, **kwargs)
-@command('debugobsoleterelevant',
- [],
- 'REVSET')
-def debugobsoleterelevant(ui, repo, *revsets):
- """print allobsolescence marker relevant to a set of revision"""
- nodes = [ctx.node() for ctx in repo.set('%lr', revsets)]
- markers = repo.obsstore.relevantmarkers(nodes)
- for rawmarker in sorted(markers):
- marker = obsolete.marker(repo, rawmarker)
- cmdutil.showmarker(ui, marker)
-
-@eh.addattr(obsolete.obsstore, 'relevantmarkers')
-def relevantmarkers(self, nodes):
- """return a set of all obsolescence marker relevant to a set of node.
-
- "relevant" to a set of node mean:
-
- - marker that use this changeset as successors
- - prune marker of direct children on this changeset.
- - recursive application of the two rules on precursors of these markers
-
- It a set so you cannot rely on order"""
- seennodes = set(nodes)
- seenmarkers = set()
- pendingnodes = set(nodes)
- precursorsmarkers = self.precursors
- prunedchildren = self.prunedchildren
- while pendingnodes:
- direct = set()
- for current in pendingnodes:
- direct.update(precursorsmarkers.get(current, ()))
- direct.update(prunedchildren.get(current, ()))
- direct -= seenmarkers
- pendingnodes = set([m[0] for m in direct])
- seenmarkers |= direct
- pendingnodes -= seennodes
- seennodes |= pendingnodes
- return seenmarkers
_pushkeyescape = getattr(obsolete, '_pushkeyescape', None)