[PATCH] util: rewrite sortdict using Python 2.7's OrderedDict
Gregory Szorc
gregory.szorc at gmail.com
Wed May 17 02:39:20 EDT 2017
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().
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20170516/09448635/attachment.html>
More information about the Mercurial-devel
mailing list