Re: [PATCH] remote-hg: fix path when cloning with tilde expansion

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [PATCH] remote-hg: fix path when cloning with tilde expansion

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:58:23

Antoine Pelisse [off-list ref] writes:
The current code fixes the path to make it absolute when cloning, but
doesn't consider tilde expansion, so that scenario fails throwing an
exception because /home/myuser/~/my/repository doesn't exists:

    $ git clone hg::~/my/repository && cd repository && git fetch

Expand the tilde when checking if the path is absolute, so that we don't
fix a path that doesn't need to be.

Signed-off-by: Antoine Pelisse <redacted>
---
On Mon, Aug 5, 2013 at 10:30 PM, Felipe Contreras [off-list ref] wrote:
quoted
Shouldn't that be the job of the shell? (s/~/$HOME/)
I'm not sure what you mean here. Does it mean that I should stop cloning using "~" ?
I think shells do not expand ~ when it appears in a string (e.g. hg::~/there);
you could work it around with

	git clone hg::$(echo ~/there)

and I suspect that is what Felipe is alluding to.  A tool (like
remote-hg bridge with this patch) that expands ~ in the middle of a
string also may be surprising to some people, especially to those
who know the shell does not.
I also send this patch as I think it makes more sense to keep the
~ in the path, but just make sure we don't build invalid absolute
path.

By the way, I don't exactly understand why:

    abs_url = urlparse.urljoin("%s/" % os.getcwd(), orig_url)

is done right after instead of:

    abs_url = os.path.abspath(orig_url)
That looks like a good cleanup to me, too, but I may be missing some
subtle points...

By the way, you earlier sent an updated 1/2; is this supposed to be
2/2 to conclude the two-patch series?
quoted hunk
Cheers,
Antoine

 contrib/remote-helpers/git-remote-hg |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg
index 1897327..861c498 100755
--- a/contrib/remote-helpers/git-remote-hg
+++ b/contrib/remote-helpers/git-remote-hg
@@ -1135,7 +1135,7 @@ def do_option(parser):

 def fix_path(alias, repo, orig_url):
     url = urlparse.urlparse(orig_url, 'file')
-    if url.scheme != 'file' or os.path.isabs(url.path):
+    if url.scheme != 'file' or os.path.isabs(os.path.expanduser(url.path)):
         return
     abs_url = urlparse.urljoin("%s/" % os.getcwd(), orig_url)
     cmd = ['git', 'config', 'remote.%s.url' % alias, "hg::%s" % abs_url]
--
1.7.9.5

Re: [PATCH] remote-hg: fix path when cloning with tilde expansion

From: Antoine Pelisse <hidden>
Date: 2016-06-15 22:58:23

On Fri, Aug 9, 2013 at 8:49 PM, Junio C Hamano [off-list ref] wrote:
Antoine Pelisse [off-list ref] writes:
quoted
On Mon, Aug 5, 2013 at 10:30 PM, Felipe Contreras [off-list ref] wrote:
quoted
Shouldn't that be the job of the shell? (s/~/$HOME/)
I'm not sure what you mean here. Does it mean that I should stop cloning using "~" ?
I think shells do not expand ~ when it appears in a string (e.g. hg::~/there);
you could work it around with

        git clone hg::$(echo ~/there)

and I suspect that is what Felipe is alluding to.  A tool (like
remote-hg bridge with this patch) that expands ~ in the middle of a
string also may be surprising to some people, especially to those
who know the shell does not.
It looks like mercurial will expand the tilde (it it starts with it):

   hg init \~

will create a $HOME/.hg. (while git init \~ will create ./~).

So when we run:

git clone hg::~/my/repo

Git will remove the "hg::" part, and Mercurial will expand tilde and
clone $HOME/my/repo.

So what should we do ? I think we should stick as close as possible to
Hg behavior:
That is consider that a path starting with tilde is absolute, and not
try to fix it by building /home/user/~/repo/path.
Of course if we could not depend on "I think Hg works like that", it
would be better if we could resolve that by asking Mercurial.
I will dig into it.
By the way, you earlier sent an updated 1/2; is this supposed to be
2/2 to conclude the two-patch series?
Those two patches don't interact with each other, but you can of
course join them if it makes it easier for you (and I don't think one
is going to have to go "faster" than the other anyway).
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help