comparison tests/test-filecache.py @ 37944:b3ffa2faae04

tests: port test-filecache.py to Python 3 Only remarkable bit is my wrapper around print(), which I regret a little, but not enough to go back and try to do something cleaner. Differential Revision: https://phab.mercurial-scm.org/D3506
author Augie Fackler <augie@google.com>
date Fri, 27 Apr 2018 11:22:00 -0400
parents ffa3026d4196
children 7caf632e30c3
comparison
equal deleted inserted replaced
37943:2b3b6187c316 37944:b3ffa2faae04
5 import sys 5 import sys
6 6
7 if subprocess.call(['python', '%s/hghave' % os.environ['TESTDIR'], 7 if subprocess.call(['python', '%s/hghave' % os.environ['TESTDIR'],
8 'cacheable']): 8 'cacheable']):
9 sys.exit(80) 9 sys.exit(80)
10
11 print_ = print
12 def print(*args, **kwargs):
13 """print() wrapper that flushes stdout buffers to avoid py3 buffer issues
14
15 We could also just write directly to sys.stdout.buffer the way the
16 ui object will, but this was easier for porting the test.
17 """
18 print_(*args, **kwargs)
19 sys.stdout.flush()
10 20
11 from mercurial import ( 21 from mercurial import (
12 extensions, 22 extensions,
13 hg, 23 hg,
14 localrepo, 24 localrepo,
44 return 'string from function' 54 return 'string from function'
45 55
46 def invalidate(self): 56 def invalidate(self):
47 for k in self._filecache: 57 for k in self._filecache:
48 try: 58 try:
49 delattr(self, k) 59 delattr(self, pycompat.sysstr(k))
50 except AttributeError: 60 except AttributeError:
51 pass 61 pass
52 62
53 def basic(repo): 63 def basic(repo):
54 print("* neither file exists") 64 print("* neither file exists")
82 repo.cached 92 repo.cached
83 93
84 # atomic replace file, size doesn't change 94 # atomic replace file, size doesn't change
85 # hopefully st_mtime doesn't change as well so this doesn't use the cache 95 # hopefully st_mtime doesn't change as well so this doesn't use the cache
86 # because of inode change 96 # because of inode change
87 f = vfsmod.vfs('.')('x', 'w', atomictemp=True) 97 f = vfsmod.vfs(b'.')(b'x', b'w', atomictemp=True)
88 f.write('b') 98 f.write(b'b')
89 f.close() 99 f.close()
90 100
91 repo.invalidate() 101 repo.invalidate()
92 print("* file x changed inode") 102 print("* file x changed inode")
93 repo.cached 103 repo.cached
106 repo.invalidate() 116 repo.invalidate()
107 print("* file y changed size") 117 print("* file y changed size")
108 # should recreate the object 118 # should recreate the object
109 repo.cached 119 repo.cached
110 120
111 f = vfsmod.vfs('.')('y', 'w', atomictemp=True) 121 f = vfsmod.vfs(b'.')(b'y', b'w', atomictemp=True)
112 f.write('B') 122 f.write(b'B')
113 f.close() 123 f.close()
114 124
115 repo.invalidate() 125 repo.invalidate()
116 print("* file y changed inode") 126 print("* file y changed inode")
117 repo.cached 127 repo.cached
118 128
119 f = vfsmod.vfs('.')('x', 'w', atomictemp=True) 129 f = vfsmod.vfs(b'.')(b'x', b'w', atomictemp=True)
120 f.write('c') 130 f.write(b'c')
121 f.close() 131 f.close()
122 f = vfsmod.vfs('.')('y', 'w', atomictemp=True) 132 f = vfsmod.vfs(b'.')(b'y', b'w', atomictemp=True)
123 f.write('C') 133 f.write(b'C')
124 f.close() 134 f.close()
125 135
126 repo.invalidate() 136 repo.invalidate()
127 print("* both files changed inode") 137 print("* both files changed inode")
128 repo.cached 138 repo.cached
153 # test old behavior that caused filecached properties to go out of sync 163 # test old behavior that caused filecached properties to go out of sync
154 os.system('hg init && echo a >> a && hg ci -qAm.') 164 os.system('hg init && echo a >> a && hg ci -qAm.')
155 repo = hg.repository(uimod.ui.load()) 165 repo = hg.repository(uimod.ui.load())
156 # first rollback clears the filecache, but changelog to stays in __dict__ 166 # first rollback clears the filecache, but changelog to stays in __dict__
157 repo.rollback() 167 repo.rollback()
158 repo.commit('.') 168 repo.commit(b'.')
159 # second rollback comes along and touches the changelog externally 169 # second rollback comes along and touches the changelog externally
160 # (file is moved) 170 # (file is moved)
161 repo.rollback() 171 repo.rollback()
162 # but since changelog isn't under the filecache control anymore, we don't 172 # but since changelog isn't under the filecache control anymore, we don't
163 # see that it changed, and return the old changelog without reconstructing 173 # see that it changed, and return the old changelog without reconstructing
164 # it 174 # it
165 repo.commit('.') 175 repo.commit(b'.')
166 176
167 def setbeforeget(repo): 177 def setbeforeget(repo):
168 os.remove('x') 178 os.remove('x')
169 os.remove('y') 179 os.remove('y')
170 repo.cached = 'string set externally' 180 repo.cached = 'string set externally'