sapling/eden/scm/tests/test-propertycache.py

233 lines
6.5 KiB
Python
Raw Normal View History

"""test behavior of propertycache and unfiltered propertycache
2013-10-23 21:49:56 +04:00
The repoview overlay is quite complex. We test the behavior of
property cache of both localrepo and repoview to prevent
regression."""
from __future__ import absolute_import, print_function
import os
import subprocess
from edenscm.mercurial import hg, localrepo, ui as uimod, util
from hghave import require
# create some special property cache that trace they call
calllog = []
@util.propertycache
def testcachedfoobar(repo):
name = repo.filtername
if name is None:
name = ""
val = len(name)
calllog.append(val)
return val
unficalllog = []
@localrepo.unfilteredpropertycache
def testcachedunfifoobar(repo):
name = repo.filtername
if name is None:
name = ""
val = 100 + len(name)
unficalllog.append(val)
return val
# plug them on repo
localrepo.localrepository.testcachedfoobar = testcachedfoobar
localrepo.localrepository.testcachedunfifoobar = testcachedunfifoobar
2014-04-13 21:01:00 +04:00
# Create an empty repo and instantiate it. It is important to run
# these tests on the real object to detect regression.
repopath = os.path.join(os.environ["TESTTMP"], "repo")
assert subprocess.call(["hg", "init", repopath]) == 0
ui = uimod.ui.load()
repo = hg.repository(ui, path=repopath).unfiltered()
print("")
print("=== property cache ===")
print("")
print("calllog:", calllog)
print("cached value (unfiltered):", vars(repo).get("testcachedfoobar", "NOCACHE"))
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"))
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"))
print("")
print('= first access on "visible" view, should do a call')
visibleview = repo.filtered("visible")
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"),
)
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"),
)
print("")
print("= no effect on other view")
immutableview = repo.filtered("immutable")
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"),
)
# unfiltered property cache test
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"),
)
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"),
)
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"),
)
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"),
)
print("")
print("= even if we clear the unfiltered cache")
del repo.__dict__["testcachedunfifoobar"]
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"),
)