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)