diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py --- a/mercurial/subrepo.py +++ b/mercurial/subrepo.py @@ -996,11 +996,25 @@ class hgsubrepo(abstractsubrepo): update=False, bookmarks=False) self._repo = shared.local() else: + # TODO: find a common place for this and this code in the + # share.py wrap of the clone command. + if parentrepo.shared(): + pool = self.ui.config('share', 'pool') + if pool: + pool = util.expandpath(pool) + + shareopts = { + 'pool': pool, + 'mode': self.ui.config('share', 'poolnaming'), + } + else: + shareopts = {} + self.ui.status(_('cloning subrepo %s from %s\n') % (subrelpath(self), srcurl)) other, cloned = hg.clone(self._repo._subparent.baseui, {}, other, self._repo.root, - update=False) + update=False, shareopts=shareopts) self._repo = cloned.local() self._initrepo(parentrepo, source, create=True) self._cachestorehash(srcurl) diff --git a/tests/test-subrepo-recursion.t b/tests/test-subrepo-recursion.t --- a/tests/test-subrepo-recursion.t +++ b/tests/test-subrepo-recursion.t @@ -292,8 +292,8 @@ Status between revisions: z2 z3 -BUG: The remote subrepo should be cloned to the local pool, and then shared -from there. +Clone pooling from a remote URL will share the top level repo and the subrepos, +even if they are referenced by remote URL. $ hg --config extensions.share= --config share.pool=$TESTTMP/pool \ > clone http://localhost:$HGPORT shared @@ -308,19 +308,25 @@ from there. no changes found updating working directory cloning subrepo foo from http://localhost:$HGPORT/foo + (sharing from new pooled repository af048e97ade2e236f754f05d07013e586af0f8bf) requesting all changes adding changesets adding manifests adding file changes added 4 changesets with 7 changes to 3 files new changesets af048e97ade2:65903cebad86 + searching for changes + no changes found cloning subrepo foo/bar from http://localhost:$HGPORT/foo/bar + (sharing from new pooled repository 4904098473f96c900fec436dad267edd4da59fad) requesting all changes adding changesets adding manifests adding file changes added 3 changesets with 3 changes to 1 files new changesets 4904098473f9:31ecbdafd357 + searching for changes + no changes found 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cat access.log @@ -341,11 +347,19 @@ from there. $LOCALIP - - [$LOGDATE$] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D1326fa26d0c00d2146c63b56bb6a45149d7325ac x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ (glob) $LOCALIP - - [$LOGDATE$] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&$USUAL_BUNDLE_CAPS$&cg=0&common=1326fa26d0c00d2146c63b56bb6a45149d7325ac&heads=1326fa26d0c00d2146c63b56bb6a45149d7325ac&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ (glob) $LOCALIP - - [$LOGDATE$] "GET /foo?cmd=capabilities HTTP/1.1" 200 - (glob) + $LOCALIP - - [$LOGDATE$] "GET /foo?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=0 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ (glob) + $LOCALIP - - [$LOGDATE$] "GET /foo?cmd=capabilities HTTP/1.1" 200 - (glob) $LOCALIP - - [$LOGDATE$] "GET /foo?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ (glob) $LOCALIP - - [$LOGDATE$] "GET /foo?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&$USUAL_BUNDLE_CAPS$&cg=1&common=0000000000000000000000000000000000000000&heads=65903cebad86f1a84bd4f1134f62fa7dcb7a1c98&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ (glob) + $LOCALIP - - [$LOGDATE$] "GET /foo?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D65903cebad86f1a84bd4f1134f62fa7dcb7a1c98 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ (glob) + $LOCALIP - - [$LOGDATE$] "GET /foo?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&$USUAL_BUNDLE_CAPS$&cg=0&common=65903cebad86f1a84bd4f1134f62fa7dcb7a1c98&heads=65903cebad86f1a84bd4f1134f62fa7dcb7a1c98&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ (glob) + $LOCALIP - - [$LOGDATE$] "GET /foo/bar?cmd=capabilities HTTP/1.1" 200 - (glob) + $LOCALIP - - [$LOGDATE$] "GET /foo/bar?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=0 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ (glob) $LOCALIP - - [$LOGDATE$] "GET /foo/bar?cmd=capabilities HTTP/1.1" 200 - (glob) $LOCALIP - - [$LOGDATE$] "GET /foo/bar?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ (glob) $LOCALIP - - [$LOGDATE$] "GET /foo/bar?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&$USUAL_BUNDLE_CAPS$&cg=1&common=0000000000000000000000000000000000000000&heads=31ecbdafd357f54b281c9bd1d681bb90de219e22&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ (glob) + $LOCALIP - - [$LOGDATE$] "GET /foo/bar?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D31ecbdafd357f54b281c9bd1d681bb90de219e22 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ (glob) + $LOCALIP - - [$LOGDATE$] "GET /foo/bar?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&$USUAL_BUNDLE_CAPS$&cg=0&common=31ecbdafd357f54b281c9bd1d681bb90de219e22&heads=31ecbdafd357f54b281c9bd1d681bb90de219e22&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ (glob) $ killdaemons.py $ rm hg1.pid error.log access.log diff --git a/tests/test-subrepo-relative-path.t b/tests/test-subrepo-relative-path.t --- a/tests/test-subrepo-relative-path.t +++ b/tests/test-subrepo-relative-path.t @@ -84,9 +84,9 @@ Test sharing with a remote URL reference adding .hgsub $ cd .. -Clone pooling works for local clones with a remote subrepo reference. - -BUG: subrepos should be shared out of the pool. +Clone pooling works for local clones with a remote subrepo reference. The +subrepo is cloned to the pool and shared from there, so that all clones will +share the same subrepo. $ hg --config extensions.share= --config share.pool=$TESTTMP/pool \ > clone absolute_subrepo cloned_from_abs @@ -101,12 +101,15 @@ BUG: subrepos should be shared out of th no changes found updating working directory cloning subrepo sub from http://localhost:$HGPORT/sub + (sharing from new pooled repository 863c1745b441bd97a8c4a096e87793073f4fb215) requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files new changesets 863c1745b441 + searching for changes + no changes found 3 files updated, 0 files merged, 0 files removed, 0 files unresolved Vanilla sharing with a subrepo remote path reference will clone the subrepo.