Mercurial > hg-stable
changeset 43698:c5548b0b6847
scmutil: convert status data object from a tuple to an attrs (API)
We've been pushing towards the property names for a while, and the
subclassing of the tuple confuses pytype. Rather than bend over
backwards to try and annotate the tuple subclass, let's just use attrs
here.
Differential Revision: https://phab.mercurial-scm.org/D7406
author | Augie Fackler <augie@google.com> |
---|---|
date | Thu, 14 Nov 2019 13:38:17 -0500 |
parents | 6186c2a53ea5 |
children | ef43765c921d |
files | mercurial/scmutil.py |
diffstat | 1 files changed, 23 insertions(+), 49 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/scmutil.py Thu Nov 14 15:29:27 2019 -0500 +++ b/mercurial/scmutil.py Thu Nov 14 13:38:17 2019 -0500 @@ -27,7 +27,7 @@ wdirrev, ) from .pycompat import getattr - +from .thirdparty import attr from . import ( copies as copiesmod, encoding, @@ -62,58 +62,32 @@ termsize = scmplatform.termsize -class status(tuple): - '''Named tuple with a list of files per status. The 'deleted', 'unknown' - and 'ignored' properties are only relevant to the working copy. +@attr.s(slots=True, repr=False) +class status(object): + '''Struct with a list of files per status. + + The 'deleted', 'unknown' and 'ignored' properties are only + relevant to the working copy. ''' - __slots__ = () - - def __new__( - cls, modified, added, removed, deleted, unknown, ignored, clean - ): - return tuple.__new__( - cls, (modified, added, removed, deleted, unknown, ignored, clean) - ) - - @property - def modified(self): - '''files that have been modified''' - return self[0] - - @property - def added(self): - '''files that have been added''' - return self[1] - - @property - def removed(self): - '''files that have been removed''' - return self[2] + modified = attr.ib(default=list) + added = attr.ib(default=list) + removed = attr.ib(default=list) + deleted = attr.ib(default=list) + unknown = attr.ib(default=list) + ignored = attr.ib(default=list) + clean = attr.ib(default=list) - @property - def deleted(self): - '''files that are in the dirstate, but have been deleted from the - working copy (aka "missing") - ''' - return self[3] - - @property - def unknown(self): - '''files not in the dirstate that are not ignored''' - return self[4] + def __iter__(self): + yield self.modified + yield self.added + yield self.removed + yield self.deleted + yield self.unknown + yield self.ignored + yield self.clean - @property - def ignored(self): - '''files not in the dirstate that are ignored (by _dirignore())''' - return self[5] - - @property - def clean(self): - '''files that have not been modified''' - return self[6] - - def __repr__(self, *args, **kwargs): + def __repr__(self): return ( r'<status modified=%s, added=%s, removed=%s, deleted=%s, ' r'unknown=%s, ignored=%s, clean=%s>'