[PATCH] util: rewrite sortdict using Python 2.7's OrderedDict
Martin von Zweigbergk
martinvonz at google.com
Wed May 17 02:41:14 EDT 2017
On Tue, May 16, 2017 at 11:39 PM, Gregory Szorc <gregory.szorc at gmail.com> wrote:
> On Tue, May 16, 2017 at 10:08 PM, Martin von Zweigbergk via Mercurial-devel
> <mercurial-devel at mercurial-scm.org> wrote:
>>
>> # 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)
>
>
> This is queued with this line changed in flight to use super().
D'oh, of course. Thanks! I blame it on the OrderedDict doc authors :-)
>
>>
>> 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.
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at mercurial-scm.org
>> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>
>
More information about the Mercurial-devel
mailing list