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.
--- 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: