diff --git a/hgext/largefiles/reposetup.py b/hgext/largefiles/reposetup.py --- a/hgext/largefiles/reposetup.py +++ b/hgext/largefiles/reposetup.py @@ -27,10 +27,11 @@ def reposetup(ui, repo): 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') diff --git a/tests/test-largefiles.t b/tests/test-largefiles.t --- a/tests/test-largefiles.t +++ b/tests/test-largefiles.t @@ -180,6 +180,34 @@ Test moving largefiles and verify that n $ cat sub/large4 large22 +Test repo method wrapping detection + + $ cat > $TESTTMP/wrapping1.py < from hgext import largefiles + > def reposetup(ui, repo): + > class derived(repo.__class__): + > def push(self, *args, **kwargs): + > return super(derived, self).push(*args, **kwargs) + > repo.__class__ = derived + > largefiles.reposetup(ui, repo) + > uisetup = largefiles.uisetup + > EOF + $ hg --config extensions.largefiles=$TESTTMP/wrapping1.py status + largefiles: repo method 'push' appears to have already been wrapped by another extension: largefiles may behave incorrectly + + $ cat > $TESTTMP/wrapping2.py < from hgext import largefiles + > def reposetup(ui, repo): + > orgpush = repo.push + > def push(*args, **kwargs): + > return orgpush(*args, **kwargs) + > repo.push = push + > largefiles.reposetup(ui, repo) + > uisetup = largefiles.uisetup + > EOF + $ hg --config extensions.largefiles=$TESTTMP/wrapping2.py status + largefiles: repo method 'push' appears to have already been wrapped by another extension: largefiles may behave incorrectly + Test copies and moves from a directory other than root (issue3516) $ cd ..