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

Gregory Szorc gregory.szorc at gmail.com
Thu Aug 13 08:30:31 CDT 2015



> 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.


More information about the Mercurial-devel mailing list