Re: [PATCH 0/3] --end-of-options marker
- From
Jeff King <peff@peff.net>
- Date
- Aug 8, 2019, 10:03 UTC
- Message-ID
- <20190808100318.GC12257@sigill.intra.peff.net>
- In-Reply-To
- <20190806181459.GG20404@szeder.dev>
On Tue, Aug 06, 2019 at 08:14:59PM +0200, SZEDER Gábor wrote:
Show 11 quoted lines
> On Tue, Aug 06, 2019 at 01:38:17PM -0400, Jeff King wrote: > > Nothing about "--" is changed by my series; it will still stop option > > interpretation in rev-list and in other commands. But as before, > > rev-list (and other Git commands that use the revision.c parser) use it > > to separate revisions and pathspecs. That's unlike how most other > > programs use "--", but that ship sailed for Git in 2005. > > I'd like to draw attention to the oddball 'git filter-branch' command, > which uses '--' as a separator between 'filter-branch' and 'rev-list' > options. Will it still work with this new option? I think it will, > but not sure.
Good question.
Certainly "--" will work as it did before, since the code here only changes behavior when it sees --end-of-options.
filter-branch doesn't use any of our parseopt infrastructure itself, so it won't understand the new option itself. I.e., this won't work[1]:
git filter-branch --end-of-options -this-is-a-branch-name
But since it passes rev-list options as-is, this does successfully pass the name to rev-list:
git filter-branch -- --end-of-options -this-is-a-branch-name
However, filter-branch itself seems to do some magic of its own with the rev-list options, and will try to filter HEAD in that case. So I think it needs further work to cover all cases correctly.
-Peff
[1] I think the first one there would work if filter-branch actually
used "rev-parse --parseopt". E.g.: git rev-parse --parseopt -- --foo --end-of-options --bar <<-\EOF
cmd
--
foo an option
bar another option
EOFyields:
set -- --foo -- '--bar'