Mercurial > hg
view tests/test-filecache.py @ 17941:9a6e4d5d7ea8
diff: move diffline to patch module
diffline is not part of diff computation, so it makes more sense
to place it with other header generation in patch module.
In upcoming patches we will generalize this approach for
all headers added in the patch, including the git index
header.
author | Guillermo Pérez <bisho@fb.com> |
---|---|
date | Thu, 15 Nov 2012 12:19:03 -0800 |
parents | cfb6682961b8 |
children | 3e4a944c0d04 |
line wrap: on
line source
import sys, os, subprocess if subprocess.call(['python', '%s/hghave' % os.environ['TESTDIR'], 'cacheable']): sys.exit(80) from mercurial import util, scmutil, extensions filecache = scmutil.filecache class fakerepo(object): def __init__(self): self._filecache = {} def join(self, p): return p def sjoin(self, p): return p @filecache('x') def cached(self): print 'creating' def invalidate(self): for k in self._filecache: try: delattr(self, k) except AttributeError: pass def basic(repo): # file doesn't exist, calls function repo.cached repo.invalidate() # file still doesn't exist, uses cache repo.cached # create empty file f = open('x', 'w') f.close() repo.invalidate() # should recreate the object repo.cached f = open('x', 'w') f.write('a') f.close() repo.invalidate() # should recreate the object repo.cached repo.invalidate() # stats file again, nothing changed, reuses object repo.cached # atomic replace file, size doesn't change # hopefully st_mtime doesn't change as well so this doesn't use the cache # because of inode change f = scmutil.opener('.')('x', 'w', atomictemp=True) f.write('b') f.close() repo.invalidate() repo.cached def fakeuncacheable(): def wrapcacheable(orig, *args, **kwargs): return False def wrapinit(orig, *args, **kwargs): pass originit = extensions.wrapfunction(util.cachestat, '__init__', wrapinit) origcacheable = extensions.wrapfunction(util.cachestat, 'cacheable', wrapcacheable) try: os.remove('x') except OSError: pass basic(fakerepo()) util.cachestat.cacheable = origcacheable util.cachestat.__init__ = originit print 'basic:' print basic(fakerepo()) print print 'fakeuncacheable:' print fakeuncacheable()