durin42 created this revision. Herald added a subscriber: mercurial-devel. Herald added a reviewer: hg-reviewers.
REVISION SUMMARY 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. REPOSITORY rHG Mercurial REVISION DETAIL https://phab.mercurial-scm.org/D7406 AFFECTED FILES mercurial/scmutil.py CHANGE DETAILS diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py --- a/mercurial/scmutil.py +++ b/mercurial/scmutil.py @@ -27,7 +27,7 @@ wdirrev, ) from .pycompat import getattr - +from .thirdparty import attr from . import ( copies as copiesmod, encoding, @@ -62,62 +62,36 @@ 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>' - ) % tuple(pycompat.sysstr(stringutil.pprint(v)) for v in self) + '<status modified=%r, added=%r, removed=%r, deleted=%r, ' + + 'unknown=%r, ignored=%r, clean=%r>' + ) % tuple(self) def itersubrepos(ctx1, ctx2): To: durin42, #hg-reviewers Cc: mercurial-devel _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel