##// END OF EJS Templates
repoview: make propertycache.setcache compatible with repoview...
Pierre-Yves David -
r19845:a1237a4b stable
parent child Browse files
Show More
@@ -0,0 +1,94 b''
1 """test behavior of propertycache and unfiltered propertycache
2
3 The repoview overlay is quite complexe. We test the behavior of
4 property cache of both localrepo and repoview to prevent
5 regression."""
6
7 import os, subprocess
8 import mercurial.localrepo
9 import mercurial.repoview
10 import mercurial.util
11 import mercurial.hg
12 import mercurial.ui as uimod
13
14
15 # create some special property cache that trace they call
16
17 calllog = []
18 @mercurial.util.propertycache
19 def testcachedfoobar(repo):
20 name = repo.filtername
21 if name is None:
22 name = ''
23 val = len(name)
24 calllog.append(val)
25 return val
26
27 #plug them on repo
28 mercurial.localrepo.localrepository.testcachedfoobar = testcachedfoobar
29
30
31 # create an empty repo. and instanciate it. It is important to run
32 # those test on the real object to detect regression.
33 repopath = os.path.join(os.environ['TESTTMP'], 'repo')
34 subprocess.check_call(['hg', 'init', repopath])
35 ui = uimod.ui()
36 repo = mercurial.hg.repository(ui, path=repopath).unfiltered()
37
38
39 print ''
40 print '=== property cache ==='
41 print ''
42 print 'calllog:', calllog
43 print 'cached value (unfiltered):',
44 print vars(repo).get('testcachedfoobar', 'NOCACHE')
45
46 print ''
47 print '= first access on unfiltered, should do a call'
48 print 'access:', repo.testcachedfoobar
49 print 'calllog:', calllog
50 print 'cached value (unfiltered):',
51 print vars(repo).get('testcachedfoobar', 'NOCACHE')
52
53 print ''
54 print '= second access on unfiltered, should not do call'
55 print 'access', repo.testcachedfoobar
56 print 'calllog:', calllog
57 print 'cached value (unfiltered):',
58 print vars(repo).get('testcachedfoobar', 'NOCACHE')
59
60 print ''
61 print '= first access on "visible" view, should do a call'
62 visibleview = repo.filtered('visible')
63 print 'cached value ("visible" view):',
64 print vars(visibleview).get('testcachedfoobar', 'NOCACHE')
65 print 'access:', visibleview.testcachedfoobar
66 print 'calllog:', calllog
67 print 'cached value (unfiltered):',
68 print vars(repo).get('testcachedfoobar', 'NOCACHE')
69 print 'cached value ("visible" view):',
70 print vars(visibleview).get('testcachedfoobar', 'NOCACHE')
71
72 print ''
73 print '= second access on "visible view", should not do call'
74 print 'access:', visibleview.testcachedfoobar
75 print 'calllog:', calllog
76 print 'cached value (unfiltered):',
77 print vars(repo).get('testcachedfoobar', 'NOCACHE')
78 print 'cached value ("visible" view):',
79 print vars(visibleview).get('testcachedfoobar', 'NOCACHE')
80
81 print ''
82 print '= no effect on other view'
83 immutableview = repo.filtered('immutable')
84 print 'cached value ("immutable" view):',
85 print vars(immutableview).get('testcachedfoobar', 'NOCACHE')
86 print 'access:', immutableview.testcachedfoobar
87 print 'calllog:', calllog
88 print 'cached value (unfiltered):',
89 print vars(repo).get('testcachedfoobar', 'NOCACHE')
90 print 'cached value ("visible" view):',
91 print vars(visibleview).get('testcachedfoobar', 'NOCACHE')
92 print 'cached value ("immutable" view):',
93 print vars(immutableview).get('testcachedfoobar', 'NOCACHE')
94
@@ -0,0 +1,36 b''
1
2 === property cache ===
3
4 calllog: []
5 cached value (unfiltered): NOCACHE
6
7 = first access on unfiltered, should do a call
8 access: 0
9 calllog: [0]
10 cached value (unfiltered): 0
11
12 = second access on unfiltered, should not do call
13 access 0
14 calllog: [0]
15 cached value (unfiltered): 0
16
17 = first access on "visible" view, should do a call
18 cached value ("visible" view): NOCACHE
19 access: 7
20 calllog: [0, 7]
21 cached value (unfiltered): 0
22 cached value ("visible" view): 7
23
24 = second access on "visible view", should not do call
25 access: 7
26 calllog: [0, 7]
27 cached value (unfiltered): 0
28 cached value ("visible" view): 7
29
30 = no effect on other view
31 cached value ("immutable" view): NOCACHE
32 access: 9
33 calllog: [0, 7, 9]
34 cached value (unfiltered): 0
35 cached value ("visible" view): 7
36 cached value ("immutable" view): 9
@@ -279,7 +279,8 b' class propertycache(object):'
279 279 return result
280 280
281 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 285 def pipefilter(s, cmd):
285 286 '''filter string S through command CMD, returning its output'''
General Comments 0
You need to be logged in to leave comments. Login now