Re: [PATCH] rev-parse --git-path: fix output when running in a subdirectory
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Feb 9, 2017, 21:50 UTC
- Message-ID
- <xmqqo9ybnie0.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <alpine.DEB.2.20.1702092201080.3496@virtualbox>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 20 quoted lines
> On Wed, 8 Feb 2017, Junio C Hamano wrote: > >> How long has "rev-parse --git-path" been around? Had scripts in the >> wild chance to learn to live with the "output is relative to the top of >> the working tree" reality? I think the answers are "since 2.5" and >> "yes". > > Correct. And the third question is: How did the scripts work around this > feature? > > The answer is obvious: by switching back to `$(git rev-parse > --git-dir)/filename`. > > This is literally on what I spent the better part of Wednesday. > > There is just no way you can "fix" this otherwise. As an occasional shell > scripter, you may be tempted to use `$(git rev-parse --show-cdup)$(git > rev-parse --git-path filename)`, but of course that breaks in worktrees > and if you do not use worktrees you would not even know that your > workaround introduced another bug.
In case it is not clear, I understand all of the above.
I was just worried about the people who do *NOT* use worktrees and did the obvious "concatenate --cdup with --git-path" and thought their script were working happily and well. By prepending the path to the (real) location of the .git in the updated --git-path output ourselves, they will complain, our update broke their script.
If we introduced the fix gently, by (1) warn when "--git-path" is used but give the current output anyway, while adding the "fixed" one as another new option, and then (2) remove "--git-path" after several releases, they will not have to complain, even though they will see warning until they stop using "--git-path".
There may be gentler alternative ways to transition, and I do not worry about the specifics of them too much. I just think we cannot do this in a single step without harming existing users.