##// END OF EJS Templates
test-filecache.py: add markers to the output for each event...
Siddharth Agarwal -
r20041:42deff43 default
parent child Browse files
Show More
@@ -1,127 +1,135
1 1 import sys, os, subprocess
2 2
3 3 if subprocess.call(['python', '%s/hghave' % os.environ['TESTDIR'],
4 4 'cacheable']):
5 5 sys.exit(80)
6 6
7 7 from mercurial import util, scmutil, extensions, hg, ui
8 8
9 9 filecache = scmutil.filecache
10 10
11 11 class fakerepo(object):
12 12 def __init__(self):
13 13 self._filecache = {}
14 14
15 15 def join(self, p):
16 16 return p
17 17
18 18 def sjoin(self, p):
19 19 return p
20 20
21 21 @filecache('x')
22 22 def cached(self):
23 23 print 'creating'
24 24 return 'string from function'
25 25
26 26 def invalidate(self):
27 27 for k in self._filecache:
28 28 try:
29 29 delattr(self, k)
30 30 except AttributeError:
31 31 pass
32 32
33 33 def basic(repo):
34 # file doesn't exist, calls function
34 print "* file doesn't exist"
35 # calls function
35 36 repo.cached
36 37
37 38 repo.invalidate()
38 # file still doesn't exist, uses cache
39 print "* file still doesn't exist"
40 # uses cache
39 41 repo.cached
40 42
41 43 # create empty file
42 44 f = open('x', 'w')
43 45 f.close()
44 46 repo.invalidate()
47 print "* empty file x created"
45 48 # should recreate the object
46 49 repo.cached
47 50
48 51 f = open('x', 'w')
49 52 f.write('a')
50 53 f.close()
51 54 repo.invalidate()
55 print "* file x changed size"
52 56 # should recreate the object
53 57 repo.cached
54 58
55 59 repo.invalidate()
56 # stats file again, nothing changed, reuses object
60 print "* nothing changed with file x"
61 # stats file again, reuses object
57 62 repo.cached
58 63
59 64 # atomic replace file, size doesn't change
60 65 # hopefully st_mtime doesn't change as well so this doesn't use the cache
61 66 # because of inode change
62 67 f = scmutil.opener('.')('x', 'w', atomictemp=True)
63 68 f.write('b')
64 69 f.close()
65 70
66 71 repo.invalidate()
72 print "* file x changed inode"
67 73 repo.cached
68 74
69 75 def fakeuncacheable():
70 76 def wrapcacheable(orig, *args, **kwargs):
71 77 return False
72 78
73 79 def wrapinit(orig, *args, **kwargs):
74 80 pass
75 81
76 82 originit = extensions.wrapfunction(util.cachestat, '__init__', wrapinit)
77 83 origcacheable = extensions.wrapfunction(util.cachestat, 'cacheable',
78 84 wrapcacheable)
79 85
80 86 try:
81 87 os.remove('x')
82 88 except OSError:
83 89 pass
84 90
85 91 basic(fakerepo())
86 92
87 93 util.cachestat.cacheable = origcacheable
88 94 util.cachestat.__init__ = originit
89 95
90 96 def test_filecache_synced():
91 97 # test old behaviour that caused filecached properties to go out of sync
92 98 os.system('hg init && echo a >> a && hg ci -qAm.')
93 99 repo = hg.repository(ui.ui())
94 100 # first rollback clears the filecache, but changelog to stays in __dict__
95 101 repo.rollback()
96 102 repo.commit('.')
97 103 # second rollback comes along and touches the changelog externally
98 104 # (file is moved)
99 105 repo.rollback()
100 106 # but since changelog isn't under the filecache control anymore, we don't
101 107 # see that it changed, and return the old changelog without reconstructing
102 108 # it
103 109 repo.commit('.')
104 110
105 111 def setbeforeget(repo):
106 112 os.remove('x')
107 113 repo.cached = 'string set externally'
108 114 repo.invalidate()
115 print "* file x doesn't exist"
109 116 print repo.cached
110 117 repo.invalidate()
111 118 f = open('x', 'w')
112 119 f.write('a')
113 120 f.close()
121 print "* file x created"
114 122 print repo.cached
115 123
116 124 print 'basic:'
117 125 print
118 126 basic(fakerepo())
119 127 print
120 128 print 'fakeuncacheable:'
121 129 print
122 130 fakeuncacheable()
123 131 test_filecache_synced()
124 132 print
125 133 print 'setbeforeget:'
126 134 print
127 135 setbeforeget(fakerepo())
@@ -1,25 +1,39
1 1 basic:
2 2
3 * file doesn't exist
3 4 creating
5 * file still doesn't exist
6 * empty file x created
4 7 creating
8 * file x changed size
5 9 creating
10 * nothing changed with file x
11 * file x changed inode
6 12 creating
7 13
8 14 fakeuncacheable:
9 15
16 * file doesn't exist
10 17 creating
18 * file still doesn't exist
11 19 creating
20 * empty file x created
12 21 creating
22 * file x changed size
13 23 creating
24 * nothing changed with file x
14 25 creating
26 * file x changed inode
15 27 creating
16 28 repository tip rolled back to revision -1 (undo commit)
17 29 working directory now based on revision -1
18 30 repository tip rolled back to revision -1 (undo commit)
19 31 working directory now based on revision -1
20 32
21 33 setbeforeget:
22 34
35 * file x doesn't exist
23 36 string set externally
37 * file x created
24 38 creating
25 39 string from function
General Comments 0
You need to be logged in to leave comments. Login now