changeset 22913:cb4449921a1d

status: create class for status lists Callers of various status() methods (on dirstate, context, repo) get a tuple of 7 elements, where each element is a list of files. This results in lots of uses of indexes where names would be much more readable. For example, "status.ignored" seems clearer than "status[4]" [1]. So, let's introduce a simple named tuple containing the 7 status fields: modified, added, removed, deleted, unknown, ignored, clean. This patch introduces the class and updates the status methods to return instances of it. Later patches will update the callers. [1] Did you even notice that it should have been "status[5]"? (tweaked by mpm to introduce the class in scmutil and only change one user)
author Martin von Zweigbergk <martinvonz@gmail.com>
date Fri, 10 Oct 2014 14:32:36 -0700
parents 3b8e6c095239
children c95db3208a33
files mercurial/dirstate.py mercurial/scmutil.py
diffstat 2 files changed, 46 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/dirstate.py	Fri Oct 03 21:21:20 2014 -0700
+++ b/mercurial/dirstate.py	Fri Oct 10 14:32:36 2014 -0700
@@ -908,8 +908,8 @@
             elif state == 'r':
                 radd(fn)
 
-        return (lookup, (modified, added, removed, deleted, unknown, ignored,
-                         clean))
+        return (lookup, scmutil.status(modified, added, removed, deleted,
+                                       unknown, ignored, clean))
 
     def matches(self, match):
         '''
--- a/mercurial/scmutil.py	Fri Oct 03 21:21:20 2014 -0700
+++ b/mercurial/scmutil.py	Fri Oct 10 14:32:36 2014 -0700
@@ -20,6 +20,50 @@
 systemrcpath = scmplatform.systemrcpath
 userrcpath = scmplatform.userrcpath
 
+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.
+    '''
+
+    __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):
+        return self[0]
+
+    @property
+    def added(self):
+        return self[1]
+
+    @property
+    def removed(self):
+        return self[2]
+
+    @property
+    def deleted(self):
+        return self[3]
+
+    @property
+    def unknown(self):
+        return self[4]
+
+    @property
+    def ignored(self):
+        return self[5]
+
+    @property
+    def clean(self):
+        return self[6]
+
+    def __repr__(self, *args, **kwargs):
+        return (('<status modified=%r, added=%r, removed=%r, deleted=%r, '
+                 'unknown=%r, ignored=%r, clean=%r>') % self)
+
 def itersubrepos(ctx1, ctx2):
     """find subrepos in ctx1 or ctx2"""
     # Create a (subpath, ctx) mapping where we prefer subpaths from