diff -r c2cb0de25120 -r de09138bf0f5 mercurial/extensions.py --- a/mercurial/extensions.py Wed Apr 26 16:05:22 2017 +0200 +++ b/mercurial/extensions.py Thu Jun 08 10:44:53 2017 -0400 @@ -308,6 +308,25 @@ table[key] = tuple(newentry) return entry +def wrapfilecache(cls, propname, wrapper): + """Wraps a filecache property. + + These can't be wrapped using the normal wrapfunction. + """ + assert callable(wrapper) + for currcls in cls.__mro__: + if propname in currcls.__dict__: + origfn = currcls.__dict__[propname].func + assert callable(origfn) + def wrap(*args, **kwargs): + return wrapper(origfn, *args, **kwargs) + currcls.__dict__[propname].func = wrap + break + + if currcls is object: + raise AttributeError( + _("type '%s' has no property '%s'") % (cls, propname)) + def wrapfunction(container, funcname, wrapper): '''Wrap the function named funcname in container