diff -r 045f7de9e4d3 -r 5d063fed9e3d hgext/simple4server.py --- 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'