--- a/hgext/simple4server.py Wed Aug 20 21:14:49 2014 -0700
+++ b/hgext/simple4server.py Wed Aug 20 20:49:48 2014 -0700
@@ -108,61 +108,62 @@
obsdata.seek(0)
return obsdata
-# from evolve extension: 1a23c7c52a43
-class pruneobsstore(obsolete.obsstore):
- """And extended obsstore class that read parent information from v1 format
+if not util.safehasattr(obsolete.obsstore, 'relevantmarkers'):
+ # from evolve extension: 1a23c7c52a43
+ class pruneobsstore(obsolete.obsstore):
+ """And extended obsstore class that read parent information from v1 format
- Evolve extension adds parent information in prune marker. We use it to make
- markers relevant to pushed changeset."""
+ Evolve extension adds parent information in prune marker. We use it to make
+ markers relevant to pushed changeset."""
- def __init__(self, *args, **kwargs):
- self.prunedchildren = {}
- return super(pruneobsstore, self).__init__(*args, **kwargs)
+ 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 _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
+ 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
-# from evolve extension: 1a23c7c52a43
-def relevantmarkers(self, nodes):
- """return a set of all obsolescence marker relevant to a set of node.
+ # from evolve extension: 1a23c7c52a43
+ def relevantmarkers(self, nodes):
+ """return a set of all obsolescence marker relevant to a set of node.
- "relevant" to a set of node mean:
+ "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
+ - 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 is 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
+ It is 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
# from evolve extension: cf35f38d6a10
def srv_pullobsmarkers(repo, proto, others):
@@ -259,8 +260,9 @@
gboptslist.append('evo_obsheads')
gboptslist.append('evo_obscommon')
gboptslist.append('evo_obsmarker')
- obsolete.obsstore = pruneobsstore
- obsolete.obsstore.relevantmarkers = relevantmarkers
+ if not util.safehasattr(obsolete.obsstore, 'relevantmarkers'):
+ obsolete.obsstore = pruneobsstore
+ obsolete.obsstore.relevantmarkers = relevantmarkers
hgweb_mod.perms['evoext_pushobsmarkers_0'] = 'push'
hgweb_mod.perms['evoext_pullobsmarkers_0'] = 'pull'
hgweb_mod.perms['evoext_obshash'] = 'pull'