[PATCH] util: rewrite sortdict using Python 2.7's OrderedDict
Martin von Zweigbergk
martinvonz at google.com
Wed May 17 05:08:35 UTC 2017
# HG changeset patch
# User Martin von Zweigbergk <martinvonz at google.com>
# Date 1494997046 25200
# Tue May 16 21:57:26 2017 -0700
# Node ID eccddf592f672910ea22e13ffa9f5fe9fb757591
# Parent 779a1ae6d0d9eeb487636f665747e92195eb234e
util: rewrite sortdict using Python 2.7's OrderedDict
Pattern copied from
https://docs.python.org/dev/library/collections.html#ordereddict-examples-and-recipes.
diff --git a/mercurial/util.py b/mercurial/util.py
--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -567,54 +567,14 @@
return f
-class sortdict(dict):
+class sortdict(collections.OrderedDict):
'''a simple sorted dictionary'''
- def __init__(self, data=None):
- self._list = []
- if data:
- self.update(data)
+ def __setitem__(self, key, value):
+ if key in self:
+ del self[key]
+ collections.OrderedDict.__setitem__(self, key, value)
def copy(self):
return sortdict(self)
- def __setitem__(self, key, val):
- if key in self:
- self._list.remove(key)
- self._list.append(key)
- dict.__setitem__(self, key, val)
- def __iter__(self):
- return self._list.__iter__()
- def update(self, src):
- if isinstance(src, dict):
- src = src.iteritems()
- for k, v in src:
- self[k] = v
- def clear(self):
- dict.clear(self)
- self._list = []
- def items(self):
- return [(k, self[k]) for k in self._list]
- def __delitem__(self, key):
- dict.__delitem__(self, key)
- self._list.remove(key)
- def pop(self, key, *args, **kwargs):
- try:
- self._list.remove(key)
- except ValueError:
- pass
- return dict.pop(self, key, *args, **kwargs)
- def keys(self):
- return self._list[:]
- def iterkeys(self):
- return self._list.__iter__()
- def iteritems(self):
- for k in self._list:
- yield k, self[k]
- def insert(self, index, key, val):
- self._list.insert(index, key)
- dict.__setitem__(self, key, val)
- def __repr__(self):
- if not self:
- return '%s()' % self.__class__.__name__
- return '%s(%r)' % (self.__class__.__name__, self.items())
class _lrucachenode(object):
"""A node in a doubly linked list.
More information about the Mercurial-devel
mailing list