Re: [PATCH v2 02/14] pull: improve default warning
- From
Felipe Contreras <felipe.contreras@gmail.com>
- Date
- Dec 15, 2020, 02:36 UTC
- Message-ID
- <5fd8213598c33_d7c4820837@natae.notmuch>
- In-Reply-To
- <xmqqzh2g9e0r.fsf@gitster.c.googlers.com>
Junio C Hamano wrote:
Show 11 quoted lines
> Felipe Contreras <felipe.contreras@gmail.com> writes: > > >> We do not have to or implement both, but either should give us the > >> "when pull sees a non-ff history, it should stop without merging or > >> rebasing, and the user won't be given the advice on how to choose > >> between merge and rebase" behaviour, I would think. > > > > Right, so both should error out. > > One of them, not both; the one we choose to implement would make it > fail, I would think.
If only one of them fail, then it's impossible to tell the user:
If you want to try the new behavior, type this command:
git config $something
We have to go straight for the error, with no deprecation period.
Show 5 quoted lines
> > And what should these do? > > > > git -c pull.rebase=no -c pull.ff=only pull --merge > > There is no --merge, so let's reread with s/--merge/--no-rebase/;
Back in 2013 everyone found it easier to speak in terms of --merge, even you, BTW, who was the first one to send a patch with --merge [1], after Linus suggested it [2].
Show 17 quoted lines
> the command line would be saying "I only want to fast-forward, or I > want the command to fail". The advice code should not trigger > (i.e. we gave an explicit preference to merge and not to rebase, so > rebase_unspecified would be false), but the configured preference > that says "we take only fast-forward merges" will still be in effect. > If the history is fast-forward, the merge backend will happily > advance our history. If not, the merge backend will happily fail > the pull. > > If you want to countermand the configured preference from the > command line and allow a merge to be done when non-ff history is > given, what you'd need to override is not --merge/--no-rebase. The > configuration pull.rebase=no already says you do not want rebase and > you want merge). You want to override --ff-only, so I'd expect > "pull --ff" (or "pull --no-ff") to be how you override your > configured preference and merge in a non-ff history, either by fast > forwarding or creating an extra merge commit.
Precisely, so you can't tell the user:
If you want to try the new behavior, type this command:
git config pull.ff only
Because, after the user gets the error:
Not a fast-forward, either merge or rebase.
She cannot do:
git pull --merge
Which is the best idiom to specify she wants a merge.
The command will still fail, even after the user has specified she wants the new mode, and that she wants to merge in this perticular case.
Show 5 quoted lines
> > git -c advice.pullnonff=false pull --merge > > Again with s/--merge/--no-rebase/; but that is showing the > preference not to rebase and to merge from the command line, so > shouldn't it just go ahead and merge without any advice?
Yes, but *before* we make this the default, what configuration get us there today?
Show 8 quoted lines
> > I'm going to answer because I think it's obvious what you would expect: > > if you pass --merge, both should succeed. > > > > Except they won't, because "git pull --ff-only --merge" fails. > > > > Correct? > > See above.
That's a "correct". There's no configuration today that gives us both:
1. fail: git -c $config pull 2. pass: git -c $config pull --merge
Like this does:
1. fail: git -c pull.mode=fast-forward pull 2. pass: git -c pull.mode=fast-forward pull --merge
Cheers.
[1] https://lore.kernel.org/git/7v4ncjs5az.fsf_-_@alter.siamese.dyndns.org/ [2] https://lore.kernel.org/git/CA+55aFz2Uvq4vmyjJPao5tS-uuVvKm6mbP7Uz8sdq1VMxMGJCw@mail.gmail.com/
-- Felipe Contreras