--- a/mercurial/extensions.py Tue Apr 14 11:44:04 2015 -0400
+++ b/mercurial/extensions.py Wed Apr 15 12:18:05 2015 -0400
@@ -152,6 +152,18 @@
else:
_aftercallbacks.setdefault(extension, []).append(callback)
+def bind(func, *args):
+ '''Partial function application
+
+ Returns a new function that is the partial application of args and kwargs
+ to func. For example,
+
+ f(1, 2, bar=3) === bind(f, 1)(2, bar=3)'''
+ assert callable(func)
+ def closure(*a, **kw):
+ return func(*(args + a), **kw)
+ return closure
+
def wrapcommand(table, command, wrapper, synopsis=None, docstring=None):
'''Wrap the command named `command' in table
@@ -189,9 +201,7 @@
break
origfn = entry[0]
- def wrap(*args, **kwargs):
- return util.checksignature(wrapper)(
- util.checksignature(origfn), *args, **kwargs)
+ wrap = bind(util.checksignature(wrapper), util.checksignature(origfn))
wrap.__module__ = getattr(origfn, '__module__')
@@ -241,12 +251,10 @@
subclass trick.
'''
assert callable(wrapper)
- def wrap(*args, **kwargs):
- return wrapper(origfn, *args, **kwargs)
origfn = getattr(container, funcname)
assert callable(origfn)
- setattr(container, funcname, wrap)
+ setattr(container, funcname, bind(wrapper, origfn))
return origfn
def _disabledpaths(strip_init=False):