obsolete: do not accept duplicated marker during exchange
authorPierre-Yves David <pierre-yves.david@ens-lyon.org>
Sat, 16 Nov 2013 20:31:58 -0500
changeset 20030 5931489b65e0
parent 20029 2e22f30e8437
child 20031 6c1adf2067bb
obsolete: do not accept duplicated marker during exchange Before this patch, duplicated obsolescence markers could slip into an obstore if the bookmark was unknown locally and duplicated in the incoming obsolescence stream. Existing duplicate markers will not be automatically removed but they'll stop propagating. Having a few duplicated markers is harmless and people have been warned evolution is <blink>experimental</blink> anyway.
mercurial/obsolete.py
--- a/mercurial/obsolete.py	Sun Nov 17 13:42:24 2013 -0500
+++ b/mercurial/obsolete.py	Sat Nov 16 20:31:58 2013 -0500
@@ -268,7 +268,11 @@
         if not _enabled:
             raise util.Abort('obsolete feature is not enabled on this repo')
         known = set(self._all)
-        new = [m for m in markers if m not in known]
+        new = []
+        for m in markers:
+            if m not in known:
+                known.add(m)
+                new.append(m)
         if new:
             f = self.sopener('obsstore', 'ab')
             try: