Mercurial > hg
changeset 33626:524b13fc711f stable
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.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Wed, 02 Aug 2017 22:51:19 +0900 |
parents | 6788e648efcf |
children | c2c6a0f7408b |
files | mercurial/pycompat.py mercurial/util.py |
diffstat | 2 files changed, 9 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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