hgext/simple4server.py
changeset 1067 5d063fed9e3d
parent 963 f80e8e3c3726
child 1073 f15f02007a0b
--- 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'