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

login
register
mail settings
Submitter Katsunori FUJIWARA
Date Aug. 13, 2015, 6:11 a.m.
Message ID <f036602935a851b0194a.1439446292@feefifofum>
Download mbox | patch
Permalink /patch/10200/
State Accepted
Headers show

Comments

Katsunori FUJIWARA - Aug. 13, 2015, 6:11 a.m.
# HG changeset patch
# User FUJIWARA Katsunori <foozy@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
Gregory Szorc - Aug. 13, 2015, 1:30 p.m.
> On Aug 13, 2015, at 02:11, FUJIWARA Katsunori <foozy@lares.dti.ne.jp> wrote:
> 
> # HG changeset patch
> # User FUJIWARA Katsunori <foozy@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.
Matt Mackall - Aug. 13, 2015, 8:02 p.m.
On Thu, 2015-08-13 at 15:11 +0900, FUJIWARA Katsunori wrote:
> # HG changeset patch
> # User FUJIWARA Katsunori <foozy@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

Queued for stable, thanks.
Katsunori FUJIWARA - Aug. 13, 2015, 10:58 p.m.
At Thu, 13 Aug 2015 09:30:31 -0400,
Gregory Szorc wrote:
> 
> 
> 
> > On Aug 13, 2015, at 02:11, FUJIWARA Katsunori <foozy@lares.dti.ne.jp> wrote:
> > 
> > # HG changeset patch
> > # User FUJIWARA Katsunori <foozy@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@lares.dti.ne.jp

Patch

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