[PATCH STABLE] hg: avoid auto sharing when the clone destination is remote

FUJIWARA Katsunori foozy at lares.dti.ne.jp
Thu Aug 13 17:58:04 CDT 2015


At Thu, 13 Aug 2015 09:30:31 -0400,
Gregory Szorc wrote:
> 
> 
> 
> > On Aug 13, 2015, at 02:11, FUJIWARA Katsunori <foozy at lares.dti.ne.jp> wrote:
> > 
> > # HG changeset patch
> > # User FUJIWARA Katsunori <foozy at lares.dti.ne.jp>
> > # Date 1439446027 -32400
> > #      Thu Aug 13 15:07:07 2015 +0900
> > # Branch stable
> > # Node ID f036602935a851b0194ad253d6f3d6adf5c83d98
> > # Parent  d815a5997576f0ef730e1df2d43c68970643c46b
> > hg: avoid auto sharing when the clone destination is remote
> > 
> > Before this patch, when auto sharing is enabled, 'hg.clone()' tries to
> > create local clone regardless of locality of the clone destination on
> > the host, and causes failure.
> > 
> > To avoid auto sharing when the clone destination is remote, this patch
> > adds examination of 'islocal(dest)' before auto sharing in
> > 'hg.clone()'.
> > 
> > 'islocal(dest)' is examined after 'sharepool', because:
> > 
> >  - the former is more expensive than the latter
> >  - without enabling share extension, the later is always negative
> > 
> > diff --git a/mercurial/hg.py b/mercurial/hg.py
> > --- a/mercurial/hg.py
> > +++ b/mercurial/hg.py
> > @@ -404,7 +404,7 @@
> >     shareopts = shareopts or {}
> >     sharepool = shareopts.get('pool')
> >     sharenamemode = shareopts.get('mode')
> > -    if sharepool:
> > +    if sharepool and islocal(dest):
> >         sharepath = None
> >         if sharenamemode == 'identity':
> >             # Resolve the name from the initial changeset in the remote
> > diff --git a/tests/test-clone.t b/tests/test-clone.t
> > --- a/tests/test-clone.t
> > +++ b/tests/test-clone.t
> > @@ -1013,3 +1013,15 @@
> >   adding remote bookmark bookA
> > 
> >   $ ls share-1anowc
> > +
> > +Test that auto sharing doesn't cause failure of "hg clone local remote"
> > +
> > +  $ cd $TESTTMP
> > +  $ hg -R a id -r 0
> > +  acb14030fe0a
> > +  $ hg id -R remote -r 0
> > +  abort: there is no Mercurial repository here (.hg not found)
> > +  [255]
> > +  $ hg --config share.pool=share -q clone -e "python \"$TESTDIR/dummyssh\"" a ssh://user@dummy/remote
> > +  $ hg -R remote id -r 0
> > +  acb14030fe0a
> 
> Good catch! One suggestion (and I may be wrong about this since I'm
> not in front of a computer), I think the test should live next to
> the existing share pool tests, which I *think* are in test-share.t
> or some such. Other than that, LGTM.

At first, I also thought putting this test into test-share.t, but it
and any other *.t don't test auto sharing, but test-clone.t does :-)

----------------------------------------------------------------------
[FUJIWARA Katsunori]                             foozy at lares.dti.ne.jp


More information about the Mercurial-devel mailing list