Re: clarification of `rev-list --no-walk ^<rev>`?
- From
Michael J Gruber <git@drmicha.warpmail.net>
- Date
- Sep 19, 2016, 13:46 UTC
- Message-ID
- <3b06b9ee-3975-acf1-41d8-02b774a2dd3c@drmicha.warpmail.net>
- In-Reply-To
- <2AD952BD65034D25BF26C7F138D24F25@PhilipOakley>
Philip Oakley venit, vidit, dixit 19.09.2016 12:56:
Show 42 quoted lines
> A question came up on the Git user list regarding cherry-pick that got me > reading the manual (again), in this case regarding --no-walk ranges. > > Essentially my question is: If --no-walk is given to rev-list (e.g. via > charry-pick), and the user includes a caret prefixed rev, when does that > range definition take effect on the command line, especially in light of > the --do-walk option? > > In rev-list(1) there are only 8 references to 'range', with only > the --no-walk option saying "This has no effect if a range is specified." > but leaving open the decision as to what does (and does not) comprises the > specification of a range on the cli. > > The two and three dot notations are fairly obvious ranges from > gitrevisions(7) as they are complete strings, while the caret prefix is an > implied range (it needs additional parameters to complete the range, and > there-in lies the issue). > > It can be read that > > $ git cherry-pick maint next > > would pick two single commits, while > > $ git cherry-pick maint next ^master > > could implicitly be read as > > $ git cherry-pick maint next --do-walk ^master > > because the ^ caret starts the range that cancels the --no-walk. > > Clearly that's not what is intended, which is > > $ git cherry-pick --do-walk maint next ^master > > but it is open to interpretation as to where in the command line the caret > range prefix's --do-walk (to countermand the --no-walk) should applied. > > If the user did want just the single commit at the tip of maint, and then > the range master..next, what would be their command line, and also, how > would the man page warn against false expectations?
Maybe:
Every negative rev (rev prefixed with ^, or a range) implies a `--do-walk` (right at its position on the command line).
And then curb the misleading range sentence in the `--no-walk` description.
Michael