util: fix sortdict.update() to call __setitem__() on PyPy (issue5639)
It appears that overriding __setitem__() doesn't work as documented on PyPy.
Let's patch it as before bd0fd3ff9916.
https://docs.python.org/2/library/collections.html#ordereddict-examples-and-recipes
The issue was ui.configitems() wasn't ordered correctly, so the pull command
was wrapped in different order.
--- a/mercurial/pycompat.py Wed Aug 02 22:58:38 2017 +0900
+++ b/mercurial/pycompat.py Wed Aug 02 22:51:19 2017 +0900
@@ -16,6 +16,7 @@
import sys
ispy3 = (sys.version_info[0] >= 3)
+ispypy = (r'__pypy__' in sys.builtin_module_names)
if not ispy3:
import cookielib
--- a/mercurial/util.py Wed Aug 02 22:58:38 2017 +0900
+++ b/mercurial/util.py Wed Aug 02 22:51:19 2017 +0900
@@ -584,6 +584,14 @@
del self[key]
super(sortdict, self).__setitem__(key, value)
+ if pycompat.ispypy:
+ # __setitem__() isn't called as of PyPy 5.8.0
+ def update(self, src):
+ if isinstance(src, dict):
+ src = src.iteritems()
+ for k, v in src:
+ self[k] = v
+
@contextlib.contextmanager
def acceptintervention(tr=None):
"""A context manager that closes the transaction on InterventionRequired