From: Philippe Blain <levraiphilippeblain@gmail.com>
To: phillip.wood@dunelm.org.uk, git@vger.kernel.org
Cc: Johannes Sixt <j6t@kdbg.org>, Elijah Newren <newren@gmail.com>,
Michael Lohmann <mial.lohmann@gmail.com>,
Patrick Steinhardt <ps@pks.im>,
Michael Lohmann <mi.al.lohmann@gmail.com>,
Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v4 2/2] revision: implement `git log --merge` also for rebase/cherry-pick/revert
Date: Tue, 13 Feb 2024 08:27:20 -0500 [thread overview]
Message-ID: <790a3f11-5a8c-42f2-7a35-f2900c0299b4@gmail.com> (raw)
In-Reply-To: <c5d60b5b-3181-4bb7-a7f8-eb97474526d7@gmail.com>
Hi Phillip,
Le 2024-02-12 à 06:02, Phillip Wood a écrit :
> Hi Philippe
>
> On 10/02/2024 23:35, Philippe Blain wrote:
>> From: Michael Lohmann <mi.al.lohmann@gmail.com>
>>
>> 'git log' learned in ae3e5e1ef2 (git log -p --merge [[--] paths...],
>> 2006-07-03) to show commits touching conflicted files in the range
>> HEAD...MERGE_HEAD, an addition documented in d249b45547 (Document
>> rev-list's option --merge, 2006-08-04).
>>
>> It can be useful to look at the commit history to understand what lead
>> to merge conflicts also for other mergy operations besides merges, like
>> cherry-pick, revert and rebase.
>>
>> For rebases, an interesting range to look at is HEAD...REBASE_HEAD,
>> since the conflicts are usually caused by how the code changed
>> differently on HEAD since REBASE_HEAD forked from it.
>>
>> For cherry-picks and revert, it is less clear that
>> HEAD...CHERRY_PICK_HEAD and HEAD...REVERT_HEAD are indeed interesting
>> ranges, since these commands are about applying or unapplying a single
>> (or a few, for cherry-pick) commit(s) on top of HEAD. However, conflicts
>> encountered during these operations can indeed be caused by changes
>> introduced in preceding commits on both sides of the history.
>
> I tend to think that there isn't much difference between rebase and cherry-pick here - they are both cherry-picking commits and it is perfectly possible to rebase a branch onto an unrelated upstream. The important part for me is that we're showing these commits because even though they aren't part of the 3-way merge they are relevant for investigating where any merge conflicts come from.
>
> For revert I'd argue that the only sane use is reverting an ancestor of HEAD but maybe I'm missing something. In that case REVERT_HEAD...HEAD is the same as REVERT_HEAD..HEAD so it shows the changes since the commit that is being reverted which will be the ones causing the conflict.
Thanks, I can rework the wording from that angle.
>> Adjust the code in prepare_show_merge so it constructs the range
>> HEAD...$OTHER for each of OTHER={MERGE_HEAD, CHERRY_PICK_HEAD,
>> REVERT_HEAD or REBASE_HEAD}. Note that we try these pseudorefs in order,
>> so keep REBASE_HEAD last since the three other operations can be
>> performed during a rebase. Note also that in the uncommon case where
>> $OTHER and HEAD do not share a common ancestor, this will show the
>> complete histories of both sides since their root commits, which is the
>> same behaviour as currently happens in that case for HEAD and
>> MERGE_HEAD.
>>
>> Adjust the documentation of this option accordingly.
>
> Thanks for the comprehensive commit message.
>
>> diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt
>> index 2bf239ff03..5b4672c346 100644
>> --- a/Documentation/rev-list-options.txt
>> +++ b/Documentation/rev-list-options.txt
>> @@ -341,8 +341,10 @@ See also linkgit:git-reflog[1].
>> Under `--pretty=reference`, this information will not be shown at all.
>> --merge::
>> - After a failed merge, show refs that touch files having a
>> - conflict and don't exist on all heads to merge.
>> + Show commits touching conflicted paths in the range `HEAD...$OTHER`,
>> + where `$OTHER` is the first existing pseudoref in `MERGE_HEAD`,
>> + `CHERRY_PICK_HEAD`, `REVERT_HEAD` or `REBASE_HEAD`. Only works
>> + when the index has unmerged entries.
>
> Do you know what "and don't exist on all heads to merge" in the original is referring to? The new text doesn't mention anything that sounds like that but I don't understand what the original was trying to say.
Yes, it took me a while to understand what that meant. I think it is simply
describing the range of commits shown. If we substitute "refs" for "commits"
and switch the order of the sentence, it reads:
After a failed merge, show commits that don't exist on all heads to merge
and that touch files having a conflict.
So it's just describing (a bit awkwardly) the HEAD...MERGE_HEAD range.
> It might be worth adding a sentence explaining when this option is useful.
>
> This option can be used to show the commits that are relevant
> when resolving conflicts from a 3-way merge
>
> or something like that.
Nice idea, I'll add that.
>
>> --boundary::
>> Output excluded boundary commits. Boundary commits are
>> diff --git a/revision.c b/revision.c
>> index aa4c4dc778..36dc2f94f7 100644
>> --- a/revision.c
>> +++ b/revision.c
>> @@ -1961,11 +1961,31 @@ static void add_pending_commit_list(struct rev_info *revs,
>> }
>> }
>> +static const char *lookup_other_head(struct object_id *oid)
>> +{
>> + int i;
>> + static const char *const other_head[] = {
>> + "MERGE_HEAD", "CHERRY_PICK_HEAD", "REVERT_HEAD", "REBASE_HEAD"
>> + };
>> +
>> + for (i = 0; i < ARRAY_SIZE(other_head); i++)
>> + if (!read_ref_full(other_head[i],
>> + RESOLVE_REF_READING | RESOLVE_REF_NO_RECURSE,
>> + oid, NULL)) {
>> + if (is_null_oid(oid))
>> + die("%s is a symbolic ref???", other_head[i]);
>
> This would benefit from being translated and I think one '?' would suffice (I'm not sure we even need that - are there other possible causes of a null oid here?)
This bit was suggested by Junio upthread in <xmqqzfxa9usx.fsf@gitster.g>.
I'm not sure if the are other causes of null oid, as I don't know well this
part of the code.
I agree that a single '?' would be enough, but I'm not sure about marking
this for translation, I think maybe this situation would be best handled with
BUG() ?
>> + return other_head[i];
>> + }
>> +
>> + die("--merge without MERGE_HEAD, CHERRY_PICK_HEAD, REVERT_HEAD or REBASE_HEAD?");
>
> This is not a question and would also benefit from translation. It might be more helpful to say that "--merge" requires one of those pseudorefs.
Yes, I agree. I'll tweak that.
> Thanks for pick this series up and polishing it
>
> Phillip
>
Thanks,
Philippe.
next prev parent reply other threads:[~2024-02-13 13:27 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-11 23:33 [RFC PATCH] `log --merge` also for rebase/cherry pick/revert Michael Lohmann
2024-01-12 0:15 ` Junio C Hamano
2024-01-12 15:50 ` [PATCH v2 1/2] revision: ensure MERGE_HEAD is a ref in prepare_show_merge Michael Lohmann
2024-01-12 15:50 ` [PATCH v2 2/2] revision: Implement `git log --merge` also for rebase/cherry_pick/revert Michael Lohmann
2024-01-12 20:10 ` [PATCH v2 1/2] revision: ensure MERGE_HEAD is a ref in prepare_show_merge Junio C Hamano
2024-01-15 11:36 ` Patrick Steinhardt
2024-01-15 17:19 ` Junio C Hamano
2024-01-17 8:14 ` [PATCH v3 " Michael Lohmann
2024-01-17 8:14 ` [PATCH v3 2/2] revision: Implement `git log --merge` also for rebase/cherry_pick/revert Michael Lohmann
2024-01-17 9:19 ` Full disclosure Michael Lohmann
2024-01-17 9:58 ` Christian Couder
2024-01-17 17:41 ` Michael Lohmann
2024-01-21 0:41 ` Ruben Safir
2024-01-17 18:33 ` Junio C Hamano
2024-01-24 7:06 ` [PATCH v3 2/2] revision: Implement `git log --merge` also for rebase/cherry_pick/revert Elijah Newren
2024-01-24 17:19 ` Johannes Sixt
2024-01-24 19:46 ` Junio C Hamano
2024-01-24 22:06 ` Johannes Sixt
2024-01-24 22:13 ` Junio C Hamano
2024-02-09 23:54 ` Junio C Hamano
2024-01-24 17:34 ` Junio C Hamano
2024-02-10 23:35 ` [PATCH v4 0/2] Implement `git log --merge` also for rebase/cherry-pick/revert Philippe Blain
2024-02-10 23:35 ` [PATCH v4 1/2] revision: ensure MERGE_HEAD is a ref in prepare_show_merge Philippe Blain
2024-02-10 23:35 ` [PATCH v4 2/2] revision: implement `git log --merge` also for rebase/cherry-pick/revert Philippe Blain
2024-02-11 8:34 ` Johannes Sixt
2024-02-11 16:43 ` Philippe Blain
2024-02-11 17:59 ` Johannes Sixt
2024-02-12 18:27 ` Junio C Hamano
2024-02-12 11:02 ` Phillip Wood
2024-02-13 13:27 ` Philippe Blain [this message]
2024-02-14 11:02 ` Phillip Wood
2024-02-13 8:33 ` Jean-Noël Avila
2024-02-13 13:14 ` Philippe Blain
2024-02-25 21:56 ` [PATCH v5 0/2] Implement " Philippe Blain
2024-02-25 21:56 ` [PATCH v5 1/2] revision: ensure MERGE_HEAD is a ref in prepare_show_merge Philippe Blain
2024-02-26 17:22 ` Jean-Noël Avila
2024-02-26 17:54 ` Philippe Blain
2024-02-25 21:56 ` [PATCH v5 2/2] revision: implement `git log --merge` also for rebase/cherry-pick/revert Philippe Blain
2024-02-26 4:35 ` Junio C Hamano
2024-02-26 17:43 ` Philippe Blain
2024-02-27 14:00 ` [PATCH v5 0/2] Implement " Phillip Wood
2024-02-27 18:30 ` Junio C Hamano
2024-02-28 13:54 ` [PATCH v6 " Philippe Blain
2024-02-28 13:54 ` [PATCH v6 1/2] revision: ensure MERGE_HEAD is a ref in prepare_show_merge Philippe Blain
2024-02-28 13:54 ` [PATCH v6 2/2] revision: implement `git log --merge` also for rebase/cherry-pick/revert Philippe Blain
2024-02-28 14:40 ` [PATCH v6 0/2] Implement " phillip.wood123
2024-03-02 15:35 ` Philippe Blain
2024-01-12 7:35 ` [RFC PATCH] `log --merge` also for rebase/cherry pick/revert Johannes Sixt
2024-01-12 7:59 ` Johannes Sixt
2024-01-12 20:18 ` Junio C Hamano
2024-01-12 11:01 ` phillip.wood123
2024-01-12 15:03 ` Michael Lohmann
2024-01-12 21:14 ` Junio C Hamano
2024-01-15 10:48 ` Phillip Wood
2024-01-12 20:21 ` Junio C Hamano
2024-01-12 21:06 ` Michael Lohmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=790a3f11-5a8c-42f2-7a35-f2900c0299b4@gmail.com \
--to=levraiphilippeblain@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=j6t@kdbg.org \
--cc=mi.al.lohmann@gmail.com \
--cc=mial.lohmann@gmail.com \
--cc=newren@gmail.com \
--cc=phillip.wood@dunelm.org.uk \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).