changeset 30854:0126e422450e stable

util: make sortdict.keys() return a copy dict.keys() is documented to return a copy, so it's surprising that sortdict.keys() did not. I noticed this because we have an extension that calls readlocaltags(). That method tries to remove any tags that point to non-existent revisions (most likely stripped). However, since it's unintentionally working on the instance it's modifying, it sometimes fails to remove tags when there are multiple bad tags in a row. This was not caught because localrepo.tags() does an additional layer of filtering. sortdict is also used in other places, but I have not checked whether its keys() and/or __delitem__() methods are used there.
author Martin von Zweigbergk <martinvonz@google.com>
date Mon, 30 Jan 2017 22:58:56 -0800
parents 312b861924c8
children 72c36a2be2d6
files mercurial/util.py
diffstat 1 files changed, 1 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/util.py	Mon Jan 30 22:50:20 2017 +0900
+++ b/mercurial/util.py	Mon Jan 30 22:58:56 2017 -0800
@@ -550,7 +550,7 @@
         except ValueError:
             pass
     def keys(self):
-        return self._list
+        return self._list[:]
     def iterkeys(self):
         return self._list.__iter__()
     def iteritems(self):