Mercurial > public > mercurial-scm > hg
comparison mercurial/util.py @ 19845:a1237a4b437d stable
repoview: make propertycache.setcache compatible with repoview
Propertycache used standard attribute assignment. In the repoview case, this
assignment was forwarded to the unfiltered repo. This result in:
(1) unfiltered repo got a potentially wrong cache value,
(2) repoview never reused the cached value.
This patch replaces the standard attribute assignment by an assignment to
`objc.__dict__` which will bypass the `repoview.__setattr__`. This will not
affects other `propertycache` users and it is actually closer to the semantic we
need.
The interaction of `propertycache` and `repoview` are now tested in a python
test file.
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Mon, 30 Sep 2013 14:36:11 +0200 |
parents | dd7c992d3cc1 |
children | 57479e0d203d |
comparison
equal
deleted
inserted
replaced
19844:bbeee568a84d | 19845:a1237a4b437d |
---|---|
277 result = self.func(obj) | 277 result = self.func(obj) |
278 self.cachevalue(obj, result) | 278 self.cachevalue(obj, result) |
279 return result | 279 return result |
280 | 280 |
281 def cachevalue(self, obj, value): | 281 def cachevalue(self, obj, value): |
282 setattr(obj, self.name, value) | 282 # __dict__ assigment required to bypass __setattr__ (eg: repoview) |
283 obj.__dict__[self.name] = value | |
283 | 284 |
284 def pipefilter(s, cmd): | 285 def pipefilter(s, cmd): |
285 '''filter string S through command CMD, returning its output''' | 286 '''filter string S through command CMD, returning its output''' |
286 p = subprocess.Popen(cmd, shell=True, close_fds=closefds, | 287 p = subprocess.Popen(cmd, shell=True, close_fds=closefds, |
287 stdin=subprocess.PIPE, stdout=subprocess.PIPE) | 288 stdin=subprocess.PIPE, stdout=subprocess.PIPE) |