Re: clarification of `rev-list --no-walk ^<rev>`?
- From
Philip Oakley <philipoakley@iee.org>
- Date
- Sep 19, 2016, 14:46 UTC
- Message-ID
- <033051503D8C4F618B1E4879AFF8C28D@PhilipOakley>
- In-Reply-To
- <3b06b9ee-3975-acf1-41d8-02b774a2dd3c@drmicha.warpmail.net>
From: "Michael J Gruber" <git@drmicha.warpmail.net>
Show 54 quoted lines
> Philip Oakley venit, vidit, dixit 19.09.2016 12:56: >> 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.
At the moment the cherry-pick man page's example implies that --do-walk is applied from the beginning, rather from the point given on the command line.
I had a very quick search of the *.c code for the options but didn't get any further. Hopefully the user issue/misunderstanding is elsewhere... I'll add this to my little list.
-- Philip