git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* git remote rename problem with trailing \\ for remote.url config entries (on Windows)
@ 2017-02-13 16:49 Marc Strapetz
  2017-02-13 18:47 ` Junio C Hamano
  0 siblings, 1 reply; 4+ messages in thread
From: Marc Strapetz @ 2017-02-13 16:49 UTC (permalink / raw)
  To: git

One of our users has just reported that:

$ git remote rename origin origin2

will turn following remote entry:

[remote "origin"]
	url = c:\\repo\\
	fetch = +refs/heads/*:refs/remotes/origin/*

into following entry for which the url is skipped:

[remote "origin2"]
[remote "origin2"]
	fetch = +refs/heads/*:refs/remotes/origin2/*

I understand that this is caused by the trailing \\ and it's easy to 
fix, but 'git push' and 'git pull' work properly with such URLs and a

$ git clone c:\repo\

will even result in the problematic remote-entry. So I guess some kind 
of validation could be helpful.

Tested with git version 2.11.0.windows.1

-Marc





^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: git remote rename problem with trailing \\ for remote.url config entries (on Windows)
  2017-02-13 16:49 git remote rename problem with trailing \\ for remote.url config entries (on Windows) Marc Strapetz
@ 2017-02-13 18:47 ` Junio C Hamano
  2018-04-10 22:35   ` Johannes Schindelin
  0 siblings, 1 reply; 4+ messages in thread
From: Junio C Hamano @ 2017-02-13 18:47 UTC (permalink / raw)
  To: Marc Strapetz; +Cc: git, Johannes Schindelin

Marc Strapetz <marc.strapetz@syntevo.com> writes:

> One of our users has just reported that:
>
> $ git remote rename origin origin2
>
> will turn following remote entry:
>
> [remote "origin"]
> 	url = c:\\repo\\
> 	fetch = +refs/heads/*:refs/remotes/origin/*
>
> into following entry for which the url is skipped:
>
> [remote "origin2"]
> [remote "origin2"]
> 	fetch = +refs/heads/*:refs/remotes/origin2/*
>
> I understand that this is caused by the trailing \\ and it's easy to
> fix, but 'git push' and 'git pull' work properly with such URLs and a
>
> $ git clone c:\repo\
>
> will even result in the problematic remote-entry. So I guess some kind
> of validation could be helpful.

If you change the original definition of the "origin" to

        [remote "origin"]
               url = "c:\\repo\\"
               fetch = +refs/heads/*:refs/remotes/origin/*

or

        [remote "origin"]
               url = c:\\repo\\ # ends with bs
               fetch = +refs/heads/*:refs/remotes/origin/*

it seems to give me a better result.  I didn't dig to determine
where things go wrong in "remote rename", and it is possible that
the problem is isolated to that command, or the same problem exists
with any value that ends with a backslash.  If the latter, "git clone"
and anything that writes to configuration such a value needs to be
taught about this glitch and learn a workaround, I would think.

Dscho Cc'ed, not for Windows expertise, but as somebody who has done
a lot in <config.c>.




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: git remote rename problem with trailing \\ for remote.url config entries (on Windows)
  2017-02-13 18:47 ` Junio C Hamano
@ 2018-04-10 22:35   ` Johannes Schindelin
  2018-04-10 23:31     ` Junio C Hamano
  0 siblings, 1 reply; 4+ messages in thread
From: Johannes Schindelin @ 2018-04-10 22:35 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Marc Strapetz, git

Hi,

[I know, blast from the past...]

On Mon, 13 Feb 2017, Junio C Hamano wrote:

> Marc Strapetz <marc.strapetz@syntevo.com> writes:
> 
> > One of our users has just reported that:
> >
> > $ git remote rename origin origin2
> >
> > will turn following remote entry:
> >
> > [remote "origin"]
> > 	url = c:\\repo\\
> > 	fetch = +refs/heads/*:refs/remotes/origin/*
> >
> > into following entry for which the url is skipped:
> >
> > [remote "origin2"]
> > [remote "origin2"]
> > 	fetch = +refs/heads/*:refs/remotes/origin2/*
> >
> > I understand that this is caused by the trailing \\ and it's easy to
> > fix, but 'git push' and 'git pull' work properly with such URLs and a
> >
> > $ git clone c:\repo\
> >
> > will even result in the problematic remote-entry. So I guess some kind
> > of validation could be helpful.
> 
> If you change the original definition of the "origin" to
> 
>         [remote "origin"]
>                url = "c:\\repo\\"
>                fetch = +refs/heads/*:refs/remotes/origin/*
> 
> or
> 
>         [remote "origin"]
>                url = c:\\repo\\ # ends with bs
>                fetch = +refs/heads/*:refs/remotes/origin/*
> 
> it seems to give me a better result.  I didn't dig to determine
> where things go wrong in "remote rename", and it is possible that
> the problem is isolated to that command, or the same problem exists
> with any value that ends with a backslash.  If the latter, "git clone"
> and anything that writes to configuration such a value needs to be
> taught about this glitch and learn a workaround, I would think.
> 
> Dscho Cc'ed, not for Windows expertise, but as somebody who has done
> a lot in <config.c>.

So... I finally had a look at this, and while I agree that the quoted
version is better, I also agree that the backslash is mistaken for a
continuation character (which is not even allowed in section headers).

A quick test with my `empty-config-section` patch series shows that it
addresses this issue. A quick bisec confirms that the patch with the
online "git_config_set: make use of the config parser's event stream" is
responsible for this fix.

At first, I was puzzled by this, because I expected `git remote rename` to
be backed by the `git_config_copy_or_rename_section_in_file()` function
(which my patch series does not touch).

But then I looked at the code of the `mv()` function in builtin/remote.c
and it uses `git_config_set_multivar()` and `git_config_set()`. And those
functions were indeed touched (and fixed) by above-mentioned commit.

Ciao,
Johannes

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: git remote rename problem with trailing \\ for remote.url config entries (on Windows)
  2018-04-10 22:35   ` Johannes Schindelin
@ 2018-04-10 23:31     ` Junio C Hamano
  0 siblings, 0 replies; 4+ messages in thread
From: Junio C Hamano @ 2018-04-10 23:31 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Marc Strapetz, git

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> A quick test with my `empty-config-section` patch series shows that it
> addresses this issue. A quick bisec confirms that the patch with the
> online "git_config_set: make use of the config parser's event stream" is
> responsible for this fix.
>
> At first, I was puzzled by this, because I expected `git remote rename` to
> be backed by the `git_config_copy_or_rename_section_in_file()` function
> (which my patch series does not touch).

I played around with this test data:

        [sec "tio"]
                val = a\\
                ue = b

and saw "git config --rename-section sec.tio sec.tion" just work
fine (without the event stream change).  Without the event stream
change, "git config --unset sec.tio.ue" loses "sec.tio.val" but with
it we see we only lose the last line, which is the correct thing to
happen.

Nice.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-04-10 23:31 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-13 16:49 git remote rename problem with trailing \\ for remote.url config entries (on Windows) Marc Strapetz
2017-02-13 18:47 ` Junio C Hamano
2018-04-10 22:35   ` Johannes Schindelin
2018-04-10 23:31     ` Junio C Hamano

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).