test-propertycache.py
181 lines
| 6.4 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 | import mercurial.localrepo | ||
import mercurial.repoview | ||||
import mercurial.util | ||||
import mercurial.hg | ||||
import mercurial.ui as uimod | ||||
# create some special property cache that trace they call | ||||
calllog = [] | ||||
@mercurial.util.propertycache | ||||
def testcachedfoobar(repo): | ||||
name = repo.filtername | ||||
if name is None: | ||||
name = '' | ||||
val = len(name) | ||||
calllog.append(val) | ||||
return val | ||||
|
r19846 | unficalllog = [] | ||
@mercurial.localrepo.unfilteredpropertycache | ||||
def testcachedunfifoobar(repo): | ||||
name = repo.filtername | ||||
if name is None: | ||||
name = '' | ||||
val = 100 + len(name) | ||||
unficalllog.append(val) | ||||
return val | ||||
|
r19845 | #plug them on repo | ||
mercurial.localrepo.localrepository.testcachedfoobar = testcachedfoobar | ||||
|
r19846 | mercurial.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. | ||||
|
r19845 | repopath = os.path.join(os.environ['TESTTMP'], 'repo') | ||
|
r19878 | assert subprocess.call(['hg', 'init', repopath]) == 0 | ||
|
r19845 | ui = uimod.ui() | ||
repo = mercurial.hg.repository(ui, path=repopath).unfiltered() | ||||
|
r28762 | print('') | ||
print('=== property cache ===') | ||||
print('') | ||||
print('calllog:', calllog) | ||||
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) | ||||
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) | ||||
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') | ||
|
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')) | ||||
|
r19845 | |||
|
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')) | ||||
|
r19845 | |||
|
r28762 | print('') | ||
print('= no effect on other view') | ||||
|
r19845 | immutableview = repo.filtered('immutable') | ||
|
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')) | ||||
|
r19845 | |||
|
r19846 | # unfiltered property cache test | ||
|
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')) | ||||
|
r19846 | |||
|
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')) | ||||
|
r19846 | |||
|
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')) | ||||
|
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) | ||||
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'] | ||
|
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')) | ||||