comparison mercurial/context.py @ 23700:a4958cdb2202

context: cache self._status correctly at workingctx.status Before this patch, "workingctx.status" always replaces "self._status" by the recent result, even though: - status isn't calculated against the parent of the working directory, or - specified "match" isn't "always" one (status is only visible partially) If "workingctx" object is shared between some procedures indirectly referring "ctx._status", this incorrect caching may cause unexpected result: for example, "ctx._status" is used via "manifest()", "files()" and so on. To cache "self._status" correctly at "workingctx.status", this patch overwrites "self._status" in "workingctx._buildstatus" only when: - status is calculated against the parent of the working directory, and - specified "match" is "always" one This patch can be applied (and effective) only on default branch, because procedure around "basectx.status" is much different between stable and default: for example, overwriting "self._status" itself is executed not in "workingctx._buildstatus" but in "workingctx._poststatus", on stable branch.
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Wed, 31 Dec 2014 17:55:43 +0900
parents fe17a6fb220d
children 76320e2ed0a8
comparison
equal deleted inserted replaced
23699:fe17a6fb220d 23700:a4958cdb2202
1442 s.modified[:] = self._filtersuspectsymlink(s.modified) 1442 s.modified[:] = self._filtersuspectsymlink(s.modified)
1443 if other != self._repo['.']: 1443 if other != self._repo['.']:
1444 s = super(workingctx, self)._buildstatus(other, s, match, 1444 s = super(workingctx, self)._buildstatus(other, s, match,
1445 listignored, listclean, 1445 listignored, listclean,
1446 listunknown) 1446 listunknown)
1447 self._status = s 1447 elif match.always():
1448 # cache for performance
1449 self._status = s
1448 return s 1450 return s
1449 1451
1450 def _matchstatus(self, other, match): 1452 def _matchstatus(self, other, match):
1451 """override the match method with a filter for directory patterns 1453 """override the match method with a filter for directory patterns
1452 1454