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