workingctx: use member variables to store ignored and clean
If some code tries to query ignored or clean files without first
calling the explicit status() method to query them, it will raise
an exception (indicating a software bug).
--- a/mercurial/context.py Tue May 04 14:52:25 2010 -0500
+++ b/mercurial/context.py Tue May 04 15:02:55 2010 -0500
@@ -564,7 +564,12 @@
if user:
self._user = user
if changes:
- self._status = list(changes)
+ self._status = list(changes[:5])
+ self._ignored = changes[5]
+ self._clean = changes[6]
+ else:
+ self._ignored = None
+ self._clean = None
self._extra = {}
if extra:
@@ -624,7 +629,7 @@
@propertycache
def _status(self):
- return self._repo.status(unknown=True)
+ return self._repo.status(unknown=True)[:5]
@propertycache
def _user(self):
@@ -647,8 +652,10 @@
Unless this method is used to query the working copy status, the
_status property will implicitly read the status using its default
arguments."""
- self._status = self._repo.status(ignored=ignored, clean=clean,
- unknown=unknown)
+ stat = self._repo.status(ignored=ignored, clean=clean, unknown=unknown)
+ self._ignored = ignored and stat[5] or None
+ self._clean = clean and stat[6] or None
+ self._status = stat[:5]
return self._status
def manifest(self):
@@ -673,9 +680,13 @@
def unknown(self):
return self._status[4]
def ignored(self):
- return self._status[5]
+ if self._ignored is None:
+ raise util.Abort(_("Ignored files requested without prior query\n"))
+ return self._ignored
def clean(self):
- return self._status[6]
+ if self._clean is None:
+ raise util.Abort(_("Clean files requested without prior query\n"))
+ return self._clean
def branch(self):
return self._extra['branch']
def extra(self):