test-propertycache.py
255 lines
| 6.7 KiB
| text/x-python
|
PythonLexer
/ tests / test-propertycache.py
|
r19845 | """test behavior of propertycache and unfiltered propertycache | ||
|
r19951 | The repoview overlay is quite complex. We test the behavior of | ||
|
r19845 | property cache of both localrepo and repoview to prevent | ||
regression.""" | ||||
|
r28762 | from __future__ import absolute_import, print_function | ||
|
r28755 | import os | ||
import subprocess | ||||
|
r19845 | |||
|
r28839 | from mercurial import ( | ||
hg, | ||||
localrepo, | ||||
|
r40333 | pycompat, | ||
|
r28839 | ui as uimod, | ||
util, | ||||
) | ||||
|
r19845 | |||
|
r43346 | from mercurial.utils import procutil | ||
|
r40383 | |||
|
r19845 | # create some special property cache that trace they call | ||
calllog = [] | ||||
|
r43346 | |||
|
r28839 | @util.propertycache | ||
|
r19845 | def testcachedfoobar(repo): | ||
name = repo.filtername | ||||
if name is None: | ||||
name = '' | ||||
val = len(name) | ||||
calllog.append(val) | ||||
return val | ||||
|
r43346 | |||
|
r19846 | unficalllog = [] | ||
|
r43346 | |||
|
r28839 | @localrepo.unfilteredpropertycache | ||
|
r19846 | def testcachedunfifoobar(repo): | ||
name = repo.filtername | ||||
if name is None: | ||||
name = '' | ||||
val = 100 + len(name) | ||||
unficalllog.append(val) | ||||
return val | ||||
|
r43346 | |||
# plug them on repo | ||||
|
r28839 | localrepo.localrepository.testcachedfoobar = testcachedfoobar | ||
localrepo.localrepository.testcachedunfifoobar = testcachedunfifoobar | ||||
|
r19845 | |||
|
r21024 | # Create an empty repo and instantiate it. It is important to run | ||
# these tests on the real object to detect regression. | ||||
|
r40333 | repopath = pycompat.fsencode(os.path.join(os.environ['TESTTMP'], 'repo')) | ||
|
r43346 | assert ( | ||
subprocess.call( | ||||
pycompat.rapply(procutil.tonativestr, [b'hg', b'init', repopath]) | ||||
) | ||||
== 0 | ||||
) | ||||
|
r40383 | |||
|
r30559 | ui = uimod.ui.load() | ||
|
r28839 | repo = hg.repository(ui, path=repopath).unfiltered() | ||
|
r19845 | |||
|
r28762 | print('') | ||
print('=== property cache ===') | ||||
print('') | ||||
print('calllog:', calllog) | ||||
|
r43346 | print( | ||
'cached value (unfiltered):', vars(repo).get('testcachedfoobar', 'NOCACHE') | ||||
) | ||||
|
r19845 | |||
|
r28762 | print('') | ||
print('= first access on unfiltered, should do a call') | ||||
print('access:', repo.testcachedfoobar) | ||||
print('calllog:', calllog) | ||||
|
r43346 | print( | ||
'cached value (unfiltered):', vars(repo).get('testcachedfoobar', 'NOCACHE') | ||||
) | ||||
|
r19845 | |||
|
r28762 | print('') | ||
print('= second access on unfiltered, should not do call') | ||||
print('access', repo.testcachedfoobar) | ||||
print('calllog:', calllog) | ||||
|
r43346 | print( | ||
'cached value (unfiltered):', vars(repo).get('testcachedfoobar', 'NOCACHE') | ||||
) | ||||
|
r19845 | |||
|
r28762 | print('') | ||
print('= first access on "visible" view, should do a call') | ||||
|
r19845 | visibleview = repo.filtered('visible') | ||
|
r43346 | print( | ||
'cached value ("visible" view):', | ||||
vars(visibleview).get('testcachedfoobar', 'NOCACHE'), | ||||
) | ||||
|
r28762 | print('access:', visibleview.testcachedfoobar) | ||
print('calllog:', calllog) | ||||
|
r43346 | print( | ||
'cached value (unfiltered):', vars(repo).get('testcachedfoobar', 'NOCACHE') | ||||
) | ||||
print( | ||||
'cached value ("visible" view):', | ||||
vars(visibleview).get('testcachedfoobar', 'NOCACHE'), | ||||
) | ||||
|
r19845 | |||
|
r28762 | print('') | ||
print('= second access on "visible view", should not do call') | ||||
print('access:', visibleview.testcachedfoobar) | ||||
print('calllog:', calllog) | ||||
|
r43346 | print( | ||
'cached value (unfiltered):', vars(repo).get('testcachedfoobar', 'NOCACHE') | ||||
) | ||||
print( | ||||
'cached value ("visible" view):', | ||||
vars(visibleview).get('testcachedfoobar', 'NOCACHE'), | ||||
) | ||||
|
r19845 | |||
|
r28762 | print('') | ||
print('= no effect on other view') | ||||
|
r19845 | immutableview = repo.filtered('immutable') | ||
|
r43346 | print( | ||
'cached value ("immutable" view):', | ||||
vars(immutableview).get('testcachedfoobar', 'NOCACHE'), | ||||
) | ||||
|
r28762 | print('access:', immutableview.testcachedfoobar) | ||
print('calllog:', calllog) | ||||
|
r43346 | print( | ||
'cached value (unfiltered):', vars(repo).get('testcachedfoobar', 'NOCACHE') | ||||
) | ||||
print( | ||||
'cached value ("visible" view):', | ||||
vars(visibleview).get('testcachedfoobar', 'NOCACHE'), | ||||
) | ||||
print( | ||||
'cached value ("immutable" view):', | ||||
vars(immutableview).get('testcachedfoobar', 'NOCACHE'), | ||||
) | ||||
|
r19845 | |||
|
r19846 | # unfiltered property cache test | ||
|
r28762 | print('') | ||
print('') | ||||
print('=== unfiltered property cache ===') | ||||
print('') | ||||
print('unficalllog:', unficalllog) | ||||
|
r43346 | print( | ||
'cached value (unfiltered): ', | ||||
vars(repo).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
print( | ||||
'cached value ("visible" view): ', | ||||
vars(visibleview).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
print( | ||||
'cached value ("immutable" view):', | ||||
vars(immutableview).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
|
r19846 | |||
|
r28762 | print('') | ||
print('= first access on unfiltered, should do a call') | ||||
print('access (unfiltered):', repo.testcachedunfifoobar) | ||||
print('unficalllog:', unficalllog) | ||||
|
r43346 | print( | ||
'cached value (unfiltered): ', | ||||
vars(repo).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
|
r19846 | |||
|
r28762 | print('') | ||
print('= second access on unfiltered, should not do call') | ||||
print('access (unfiltered):', repo.testcachedunfifoobar) | ||||
print('unficalllog:', unficalllog) | ||||
|
r43346 | print( | ||
'cached value (unfiltered): ', | ||||
vars(repo).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
|
r19846 | |||
|
r28762 | print('') | ||
print('= access on view should use the unfiltered cache') | ||||
print('access (unfiltered): ', repo.testcachedunfifoobar) | ||||
print('access ("visible" view): ', visibleview.testcachedunfifoobar) | ||||
print('access ("immutable" view):', immutableview.testcachedunfifoobar) | ||||
print('unficalllog:', unficalllog) | ||||
|
r43346 | print( | ||
'cached value (unfiltered): ', | ||||
vars(repo).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
print( | ||||
'cached value ("visible" view): ', | ||||
vars(visibleview).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
print( | ||||
'cached value ("immutable" view):', | ||||
vars(immutableview).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
|
r19846 | |||
|
r28762 | print('') | ||
print('= even if we clear the unfiltered cache') | ||||
|
r19846 | del repo.__dict__['testcachedunfifoobar'] | ||
|
r43346 | print( | ||
'cached value (unfiltered): ', | ||||
vars(repo).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
print( | ||||
'cached value ("visible" view): ', | ||||
vars(visibleview).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
print( | ||||
'cached value ("immutable" view):', | ||||
vars(immutableview).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
|
r28762 | print('unficalllog:', unficalllog) | ||
print('access ("visible" view): ', visibleview.testcachedunfifoobar) | ||||
print('unficalllog:', unficalllog) | ||||
|
r43346 | print( | ||
'cached value (unfiltered): ', | ||||
vars(repo).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
print( | ||||
'cached value ("visible" view): ', | ||||
vars(visibleview).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
print( | ||||
'cached value ("immutable" view):', | ||||
vars(immutableview).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
|
r28762 | print('access ("immutable" view):', immutableview.testcachedunfifoobar) | ||
print('unficalllog:', unficalllog) | ||||
|
r43346 | print( | ||
'cached value (unfiltered): ', | ||||
vars(repo).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
print( | ||||
'cached value ("visible" view): ', | ||||
vars(visibleview).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
print( | ||||
'cached value ("immutable" view):', | ||||
vars(immutableview).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
|
r28762 | print('access (unfiltered): ', repo.testcachedunfifoobar) | ||
print('unficalllog:', unficalllog) | ||||
|
r43346 | print( | ||
'cached value (unfiltered): ', | ||||
vars(repo).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
print( | ||||
'cached value ("visible" view): ', | ||||
vars(visibleview).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||
print( | ||||
'cached value ("immutable" view):', | ||||
vars(immutableview).get('testcachedunfifoobar', 'NOCACHE'), | ||||
) | ||||