##// END OF EJS Templates
lfs: don't require the .hglfs file to be tracked to control the policy...
lfs: don't require the .hglfs file to be tracked to control the policy The .hgignore file doesn't need to be tracked, nor does the git equivalent of this file. I'm still a little concerned about the effects of forgetting to commit this file. But the fact that conversions maintain the hashes if only the normal vs external storage changes, should make this less risky.

File last commit:

r34130:82bd4c5a default
r35825:4425790f stable
Show More
test-extensions-wrapfunction.py
64 lines | 2.0 KiB | text/x-python | PythonLexer
/ tests / test-extensions-wrapfunction.py
from __future__ import absolute_import, print_function
from mercurial import extensions
def genwrapper(x):
def f(orig, *args, **kwds):
return [x] + orig(*args, **kwds)
f.x = x
return f
def getid(wrapper):
return getattr(wrapper, 'x', '-')
wrappers = [genwrapper(i) for i in range(5)]
class dummyclass(object):
def getstack(self):
return ['orig']
dummy = dummyclass()
def batchwrap(wrappers):
for w in wrappers:
extensions.wrapfunction(dummy, 'getstack', w)
print('wrap %d: %s' % (getid(w), dummy.getstack()))
def batchunwrap(wrappers):
for w in wrappers:
result = None
try:
result = extensions.unwrapfunction(dummy, 'getstack', w)
msg = str(dummy.getstack())
except (ValueError, IndexError) as e:
msg = e.__class__.__name__
print('unwrap %s: %s: %s' % (getid(w), getid(result), msg))
batchwrap(wrappers + [wrappers[0]])
batchunwrap([(wrappers[i] if i >= 0 else None)
for i in [3, None, 0, 4, 0, 2, 1, None]])
wrap0 = extensions.wrappedfunction(dummy, 'getstack', wrappers[0])
wrap1 = extensions.wrappedfunction(dummy, 'getstack', wrappers[1])
# Use them in a different order from how they were created to check that
# the wrapping happens in __enter__, not in __init__
print('context manager', dummy.getstack())
with wrap1:
print('context manager', dummy.getstack())
with wrap0:
print('context manager', dummy.getstack())
# Bad programmer forgets to unwrap the function, but the context
# managers still unwrap their wrappings.
extensions.wrapfunction(dummy, 'getstack', wrappers[2])
print('context manager', dummy.getstack())
print('context manager', dummy.getstack())
print('context manager', dummy.getstack())
# Wrap callable object which has no __name__
class callableobj(object):
def __call__(self):
return ['orig']
dummy.cobj = callableobj()
extensions.wrapfunction(dummy, 'cobj', wrappers[0])
print('wrap callable object', dummy.cobj())