Mercurial > hg-stable
diff hgext/largefiles/reposetup.py @ 18969:257afe5489d4
largefiles: improve repo wrapping detection
Before this patch, repo wrapping detection in "reposetup()" of
largefiles can detect only limited repo wrapping: replacing target
functions by another one named as "wrap".
So, it can't detect repo wrapping even in recommended style: replacing
"__class__" of repo by derived class.
This patch can detect repo wrapping in both styles below:
- replacing "__class__" of repo by derived class (recommended style):
class derived(repo.__class__):
def push(self, *args, **kwargs):
return super(derived, self).push(*args, **kwargs)
repo.__class__ = derived
- replacing function of repo by another one (not recommended style):
orgpush = repo.push
def push(*args, **kwargs):
return orgpush(*args, **kwargs)
repo.push = push
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Wed, 10 Apr 2013 02:27:35 +0900 |
parents | c2d079387b2c |
children | ac41bb76c737 |
line wrap: on
line diff
--- a/hgext/largefiles/reposetup.py Thu Mar 21 23:27:37 2013 +0100 +++ b/hgext/largefiles/reposetup.py Wed Apr 10 02:27:35 2013 +0900 @@ -27,10 +27,11 @@ if not repo.local(): return proto.wirereposetup(ui, repo) + origclass = localrepo.localrepository + repoclass = repo.__class__ for name in ('status', 'commitctx', 'commit', 'push'): - method = getattr(repo, name) - if (isinstance(method, types.FunctionType) and - method.func_name == 'wrap'): + if (getattr(origclass, name) != getattr(repoclass, name) or + isinstance(getattr(repo, name), types.FunctionType)): ui.warn(_('largefiles: repo method %r appears to have already been' ' wrapped by another extension: ' 'largefiles may behave incorrectly\n')