]> git.ipfire.org Git - thirdparty/git.git/commit
merge-ort: handle cached rename & trivial resolution interaction better
authorElijah Newren <newren@gmail.com>
Mon, 20 Apr 2026 22:30:14 +0000 (22:30 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 22 Apr 2026 23:21:05 +0000 (16:21 -0700)
commitb2eec6663f10a53dead5e7a4e5e9b91220bf9473
tree36ea9d47219040e46943aee4ca2e1b41a72063c5
parent94f057755b7941b321fd11fec1b2e3ca5313a4e0
merge-ort: handle cached rename & trivial resolution interaction better

Back in commit a562d90a350d (merge-ort: fix failing merges in special
corner case, 2025-11-03), we hit a rename assertion due to a trivial
directory resolution affecting the parent of a cached rename.  Since
the path didn't need to be considered, we side-stepped it with

   if (!newinfo)
     continue;

in process_renames().  We have since run into a case in production
where a trivial resolution of a file affects the direct target of a
cached rename rather than a parent directory of it.  Add a testcase
demonstrating this additional case.

Now, if we were to follow the lead of commit a562d90a350d, we could
resolve this alternate case with an extra condition on the above if:

   if (!newinfo || newinfo->merged.clean)
     continue;

However, if we had done that earlier, we would have made 979ee83e8a90
(merge-ort: fix corner case recursive submodule/directory conflict
handling, 2025-12-29) harder to find and fix, and this particular
position for this condition isn't actually at the root of the issue
but downstream from it.

Instead, let's rip out this if-check from a562d90a350d and put in an
alternative that more directly addresses trivially resolved paths that
happen to be cached renames or parent directories thereof, which is a
better fix for the original testcase and which also solves the newly
added testcase as well.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
merge-ort.c
t/t6429-merge-sequence-rename-caching.sh