All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: Miklos Vajna <vmiklos@collabora.com>
Cc: gitster@pobox.com, szeder.dev@gmail.com, git@vger.kernel.org
Subject: Re: [PATCH v3 4/4] log: speed up --follow following renames for non-linear history
Date: Mon, 26 Oct 2026 12:40:41 +0100	[thread overview]
Message-ID: <at88ORA5midZJctp@pks.im> (raw)
In-Reply-To: <6f249099cf214f83d31bc04980bc2e9dfd861bba.1792701579.git.vmiklos@collabora.com>

On Thu, Oct 22, 2026 at 10:47:06PM +0200, Miklos Vajna wrote:
> diff --git a/log-tree.c b/log-tree.c
> index c5ac6c2bcb..d5ce58d91d 100644
> --- a/log-tree.c
> +++ b/log-tree.c
> @@ -1153,6 +1169,29 @@ void release_follow_pathspec_slab(struct rev_info *opt)
>  	FREE_AND_NULL(opt->follow_pathspec_slab);
>  }
>  
> +/*
> + * When the path in a merge is the same as in 'same', does the path still need
> + * renames to be followed in 'parent'? Only if the merge has the path, 'parent'
> + * doesn't have it, but its fork point with 'same' had it, e.g. 'parent'
> + * renamed the path.
> + */
> +static int follow_needs_renames(struct rev_info *opt, struct commit *parent,
> +				struct commit *same, const char *path)
> +{
> +	struct commit_list *bases = NULL, *base;
> +	int ret = 0;
> +
> +	if (commit_has_path(opt, parent, path) ||
> +	    !commit_has_path(opt, same, path))
> +		return 0;

Doesn't this miss the reverse case where we have the path in "parent",
but not in "same"? So basically this test case, which is very similar to
the one you already added to 4219:

test_expect_success 'setup merge keeping the renamed path, other side edited the old one' '
	git init keep-renamed &&
	printf "line 1\nline 2\nline 3\nline 4\nline 5\n" >keep-renamed/F &&
	git -C keep-renamed add F &&
	test_tick &&
	git -C keep-renamed commit -m "O: add F" &&
	git -C keep-renamed branch B &&
	git -C keep-renamed mv F G &&
	test_tick &&
	git -C keep-renamed commit -m "A1: rename F to G on master" &&

	git -C keep-renamed checkout B &&
	printf "line 1\nline 2\nline 3\nline 4 T\nline 5\n" >keep-renamed/F &&
	test_tick &&
	git -C keep-renamed commit -am "B2: update F on B" &&

	git -C keep-renamed checkout master &&
	test_tick &&
	git -C keep-renamed merge -s ours -m "M: merge B, keep G, drop F" B
'

test_expect_success '--follow follows an edit on the side the merge did not take' '
	git -C keep-renamed log --follow --pretty=tformat:%s G >actual &&
	cat >expect <<-\EOF &&
	B2: update F on B
	A1: rename F to G on master
	O: add F
	EOF
	test_cmp expect actual
'

That test passes with HEAD~, but fails with HEAD.

Patrick

  reply	other threads:[~2026-10-26 11:40 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-13 13:55 Performance regression in `git log --follow` Patrick Steinhardt
2026-10-13 21:24 ` SZEDER Gábor
2026-10-15 14:48   ` [PATCH] log: speed up --follow following renames for non-linear history Miklos Vajna
2026-10-15 16:57     ` Junio C Hamano
2026-10-19  6:10       ` [PATCH v2] " Miklos Vajna
2026-10-22 20:45         ` [PATCH v3 0/4] " Miklos Vajna
2026-10-22 20:45           ` [PATCH v3 1/4] t4219: test more --follow cases across merges Miklos Vajna
2026-10-22 20:46           ` [PATCH v3 2/4] log: extract showing the remerge/combined diff of a merge commit Miklos Vajna
2026-10-22 20:46           ` [PATCH v3 3/4] log: simplify --follow following renames for non-linear history Miklos Vajna
2026-10-26 11:40             ` Patrick Steinhardt
2026-10-22 20:47           ` [PATCH v3 4/4] log: speed up " Miklos Vajna
2026-10-26 11:40             ` Patrick Steinhardt [this message]
2026-10-26 11:42           ` [PATCH v3 0/4] " Patrick Steinhardt
2026-10-16 20:37     ` [PATCH] " Junio C Hamano
2026-10-14  6:16 ` Performance regression in `git log --follow` Miklos Vajna

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=at88ORA5midZJctp@pks.im \
    --to=ps@pks.im \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=szeder.dev@gmail.com \
    --cc=vmiklos@collabora.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.