--- a/mercurial/context.py Wed Dec 31 17:55:43 2014 +0900
+++ b/mercurial/context.py Wed Dec 31 17:55:43 2014 +0900
@@ -1646,6 +1646,32 @@
listignored, listclean, listunknown)
return s
+ def _dirstatestatus(self, match=None, ignored=False, clean=False,
+ unknown=False):
+ """Return matched files only in ``self._status``
+
+ Uncommitted files appear "clean" via this context, even if
+ they aren't actually so in the working directory.
+ """
+ match = match or matchmod.always(self._repo.root, self._repo.getcwd())
+ if clean:
+ clean = [f for f in self._manifest if f not in self._changedset]
+ else:
+ clean = []
+ return scmutil.status([f for f in self._status.modified if match(f)],
+ [f for f in self._status.added if match(f)],
+ [f for f in self._status.removed if match(f)],
+ [], [], [], clean)
+
+ @propertycache
+ def _changedset(self):
+ """Return the set of files changed in this context
+ """
+ changed = set(self._status.modified)
+ changed.update(self._status.added)
+ changed.update(self._status.removed)
+ return changed
+
class memctx(committablectx):
"""Use memctx to perform in-memory commits via localrepo.commitctx().
--- a/tests/test-context.py Wed Dec 31 17:55:43 2014 +0900
+++ b/tests/test-context.py Wed Dec 31 17:55:43 2014 +0900
@@ -108,13 +108,31 @@
print 'wcctx._status=%s' % (str(wcctx._status))
print '=== with "always match":'
-actx1.status(other=wcctx)
+print actx1.status(other=wcctx)
print 'wcctx._status=%s' % (str(wcctx._status))
-actx2.status(other=wcctx)
+print actx2.status(other=wcctx)
print 'wcctx._status=%s' % (str(wcctx._status))
print '=== with "always match" and "listclean=True":'
-actx1.status(other=wcctx, listclean=True)
+print actx1.status(other=wcctx, listclean=True)
+print 'wcctx._status=%s' % (str(wcctx._status))
+print actx2.status(other=wcctx, listclean=True)
+print 'wcctx._status=%s' % (str(wcctx._status))
+
+print '=== with "pattern match":'
+print actx1.status(other=wcctx,
+ match=scmutil.matchfiles(repo, ['bar-m', 'foo']))
print 'wcctx._status=%s' % (str(wcctx._status))
-actx2.status(other=wcctx, listclean=True)
+print actx2.status(other=wcctx,
+ match=scmutil.matchfiles(repo, ['bar-m', 'foo']))
print 'wcctx._status=%s' % (str(wcctx._status))
+
+print '=== with "pattern match" and "listclean=True":'
+print actx1.status(other=wcctx,
+ match=scmutil.matchfiles(repo, ['bar-r', 'foo']),
+ listclean=True)
+print 'wcctx._status=%s' % (str(wcctx._status))
+print actx2.status(other=wcctx,
+ match=scmutil.matchfiles(repo, ['bar-r', 'foo']),
+ listclean=True)
+print 'wcctx._status=%s' % (str(wcctx._status))
--- a/tests/test-context.py.out Wed Dec 31 17:55:43 2014 +0900
+++ b/tests/test-context.py.out Wed Dec 31 17:55:43 2014 +0900
@@ -27,8 +27,22 @@
== checking workingcommitctx.status:
wcctx._status=<status modified=['bar-m'], added=['bar-a'], removed=[], deleted=[], unknown=[], ignored=[], clean=[]>
=== with "always match":
+<status modified=['bar-m'], added=['bar-a'], removed=[], deleted=[], unknown=[], ignored=[], clean=[]>
wcctx._status=<status modified=['bar-m'], added=['bar-a'], removed=[], deleted=[], unknown=[], ignored=[], clean=[]>
+<status modified=[], added=['bar-a', 'bar-m', 'bar-r'], removed=[], deleted=[], unknown=[], ignored=[], clean=[]>
wcctx._status=<status modified=['bar-m'], added=['bar-a'], removed=[], deleted=[], unknown=[], ignored=[], clean=[]>
=== with "always match" and "listclean=True":
+<status modified=['bar-m'], added=['bar-a'], removed=[], deleted=[], unknown=[], ignored=[], clean=['bar-r', 'foo']>
wcctx._status=<status modified=['bar-m'], added=['bar-a'], removed=[], deleted=[], unknown=[], ignored=[], clean=[]>
+<status modified=[], added=['bar-a', 'bar-m', 'bar-r'], removed=[], deleted=[], unknown=[], ignored=[], clean=['foo']>
wcctx._status=<status modified=['bar-m'], added=['bar-a'], removed=[], deleted=[], unknown=[], ignored=[], clean=[]>
+=== with "pattern match":
+<status modified=['bar-m'], added=[], removed=[], deleted=[], unknown=[], ignored=[], clean=[]>
+wcctx._status=<status modified=['bar-m'], added=['bar-a'], removed=[], deleted=[], unknown=[], ignored=[], clean=[]>
+<status modified=[], added=['bar-m'], removed=[], deleted=[], unknown=[], ignored=[], clean=[]>
+wcctx._status=<status modified=['bar-m'], added=['bar-a'], removed=[], deleted=[], unknown=[], ignored=[], clean=[]>
+=== with "pattern match" and "listclean=True":
+<status modified=[], added=[], removed=[], deleted=[], unknown=[], ignored=[], clean=['bar-r', 'foo']>
+wcctx._status=<status modified=['bar-m'], added=['bar-a'], removed=[], deleted=[], unknown=[], ignored=[], clean=[]>
+<status modified=[], added=['bar-r'], removed=[], deleted=[], unknown=[], ignored=[], clean=['foo']>
+wcctx._status=<status modified=['bar-m'], added=['bar-a'], removed=[], deleted=[], unknown=[], ignored=[], clean=[]>