diff --git a/hgext/largefiles/__init__.py b/hgext/largefiles/__init__.py --- a/hgext/largefiles/__init__.py +++ b/hgext/largefiles/__init__.py @@ -105,9 +105,10 @@ explicitly do so with the --large flag p command. ''' -from mercurial import commands, localrepo +from mercurial import commands, hg, localrepo import lfcommands +import proto import reposetup import uisetup as uisetupmod @@ -121,6 +122,7 @@ def featuresetup(ui, supported): def uisetup(ui): localrepo.localrepository.featuresetupfuncs.add(featuresetup) + hg.wirepeersetupfuncs.append(proto.wirereposetup) uisetupmod.uisetup(ui) commands.norepo += " lfconvert" diff --git a/hgext/largefiles/reposetup.py b/hgext/largefiles/reposetup.py --- a/hgext/largefiles/reposetup.py +++ b/hgext/largefiles/reposetup.py @@ -16,14 +16,13 @@ from mercurial.i18n import _ from mercurial import localrepo import lfcommands -import proto import lfutil def reposetup(ui, repo): - # wire repositories should be given new wireproto functions but not the - # other largefiles modifications + # wire repositories should be given new wireproto functions + # by "proto.wirereposetup()" via "hg.wirepeersetupfuncs" if not repo.local(): - return proto.wirereposetup(ui, repo) + return class lfilesrepo(repo.__class__): lfstatus = False diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -98,6 +98,9 @@ def openpath(ui, path): else: return url.open(ui, path) +# a list of (ui, repo) functions called for wire peer initialization +wirepeersetupfuncs = [] + def _peerorrepo(ui, path, create=False): """return a repository object for the specified path""" obj = _peerlookup(path).instance(ui, path, create) @@ -106,6 +109,9 @@ def _peerorrepo(ui, path, create=False): hook = getattr(module, 'reposetup', None) if hook: hook(ui, obj) + if not obj.local(): + for f in wirepeersetupfuncs: + f(ui, obj) return obj def repository(ui, path='', create=False): diff --git a/tests/test-largefiles.t b/tests/test-largefiles.t --- a/tests/test-largefiles.t +++ b/tests/test-largefiles.t @@ -2285,4 +2285,30 @@ enabling largefiles extension. $ test -d clone-pull-dst [1] +#if serve + +Test largefiles specific peer setup, when largefiles is enabled +locally (issue4109) + + $ hg showconfig extensions | grep largefiles + extensions.largefiles=! + $ mkdir -p $TESTTMP/individualenabling/usercache + + $ hg serve -R enabledlocally -d -p $HGPORT --pid-file hg.pid + $ cat hg.pid >> $DAEMON_PIDS + + $ hg init pull-dst + $ cat > pull-dst/.hg/hgrc < [extensions] + > # enable locally + > largefiles= + > [largefiles] + > # ignore system cache to force largefiles specific wire proto access + > usercache=$TESTTMP/individualenabling/usercache + > EOF + $ hg -R pull-dst -q pull -u http://localhost:$HGPORT + + $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS +#endif + $ cd ..