git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Elijah Newren <newren@gmail.com>
Subject: [PATCH 0/6] Fix various rename corner cases
Date: Tue, 22 Jul 2025 15:23:05 +0000	[thread overview]
Message-ID: <pull.1943.git.1753197791.gitgitgadget@gmail.com> (raw)

At GitHub, we've got a real-world repository that has been triggering
failures of the form:

git: merge-ort.c:3007: process_renames: Assertion `newinfo && !newinfo->merged.clean' failed.


Digging in, this particular corner case requires multiple things to trigger:
(1) a rename/delete of one file, and (2) a directory rename modifying an
unrelated rename such that this unrelated rename's target becomes the source
of the rename/delete from (1).

Unfortunately, looking around, it's not the only bug in the area. Plus, some
of our testcases in tangential situations were not checked closely enough or
were weird or buggy in various ways. Adding to the challenge was the fact
that the relevant renames optimization was sometimes triggering making
renames look like delete-and-add, and overlooking this meant I sometimes
wasn't triggering what I thought I was triggering.

The combination of challenges sometimes made me think my fixes were breaking
things when sometimes I was just unaware of other bugs. I went in circles a
few times and took a rather non-linear path to finding and fixing these
issues. While I think I've turned it into a nice linear progression of
patches, I might be a bit too deep in the mud and it might not be as linear
or clear as I think. Let me know and I'll try to clarify anything needed.

Elijah Newren (6):
  merge-ort: update comments to modern testfile location
  merge-ort: drop unnecessary temporary in check_for_directory_rename()
  t6423: document two bugs with rename-to-self testcases
  t6423: fix missed staging of file in testcases 12i,12j,12k
  merge-ort: fix incorrect file handling
  merge-ort: fix directory rename on top of source of other
    rename/delete

 merge-ort.c                         |  41 ++-
 t/t6423-merge-rename-directories.sh | 520 +++++++++++++++++++++++++++-
 2 files changed, 534 insertions(+), 27 deletions(-)


base-commit: 16bd9f20a403117f2e0d9bcda6c6e621d3763e77
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1943%2Fnewren%2Ffix-rename-corner-cases-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1943/newren/fix-rename-corner-cases-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1943
-- 
gitgitgadget

             reply	other threads:[~2025-07-22 15:23 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-22 15:23 Elijah Newren via GitGitGadget [this message]
2025-07-22 15:23 ` [PATCH 1/6] merge-ort: update comments to modern testfile location Elijah Newren via GitGitGadget
2025-07-22 15:23 ` [PATCH 2/6] merge-ort: drop unnecessary temporary in check_for_directory_rename() Elijah Newren via GitGitGadget
2025-07-22 15:23 ` [PATCH 3/6] t6423: document two bugs with rename-to-self testcases Elijah Newren via GitGitGadget
2025-08-01  8:30   ` Patrick Steinhardt
2025-08-04 19:15     ` Elijah Newren
2025-08-05  4:38       ` Patrick Steinhardt
2025-08-05 18:33         ` Elijah Newren
2025-07-22 15:23 ` [PATCH 4/6] t6423: fix missed staging of file in testcases 12i,12j,12k Elijah Newren via GitGitGadget
2025-08-01  8:30   ` Patrick Steinhardt
2025-08-04 19:23     ` Elijah Newren
2025-08-05  4:38       ` Patrick Steinhardt
2025-08-05 18:33         ` Elijah Newren
2025-07-22 15:23 ` [PATCH 5/6] merge-ort: fix incorrect file handling Elijah Newren via GitGitGadget
2025-08-01  8:31   ` Patrick Steinhardt
2025-08-04 22:08     ` Elijah Newren
2025-08-05  4:39       ` Patrick Steinhardt
2025-08-05 18:34         ` Elijah Newren
2025-07-22 15:23 ` [PATCH 6/6] merge-ort: fix directory rename on top of source of other rename/delete Elijah Newren via GitGitGadget
2025-08-01  8:31   ` Patrick Steinhardt
2025-08-04 22:33     ` Elijah Newren
2025-08-01  8:31 ` [PATCH 0/6] Fix various rename corner cases Patrick Steinhardt
2025-08-05 19:35 ` [PATCH v2 " Elijah Newren via GitGitGadget
2025-08-05 19:35   ` [PATCH v2 1/6] merge-ort: update comments to modern testfile location Elijah Newren via GitGitGadget
2025-08-05 19:35   ` [PATCH v2 2/6] merge-ort: drop unnecessary temporary in check_for_directory_rename() Elijah Newren via GitGitGadget
2025-08-05 19:35   ` [PATCH v2 3/6] t6423: document two bugs with rename-to-self testcases Elijah Newren via GitGitGadget
2025-08-05 19:35   ` [PATCH v2 4/6] t6423: fix missed staging of file in testcases 12i,12j,12k Elijah Newren via GitGitGadget
2025-08-05 19:35   ` [PATCH v2 5/6] merge-ort: fix incorrect file handling Elijah Newren via GitGitGadget
2025-08-05 19:35   ` [PATCH v2 6/6] merge-ort: fix directory rename on top of source of other rename/delete Elijah Newren via GitGitGadget
2025-08-05 20:18     ` Junio C Hamano
2025-08-05 20:47       ` Elijah Newren
2025-08-06 23:15   ` [PATCH v3 0/7] Fix various rename corner cases Elijah Newren via GitGitGadget
2025-08-06 23:15     ` [PATCH v3 1/7] merge-ort: update comments to modern testfile location Elijah Newren via GitGitGadget
2025-08-06 23:15     ` [PATCH v3 2/7] merge-ort: drop unnecessary temporary in check_for_directory_rename() Elijah Newren via GitGitGadget
2025-08-06 23:15     ` [PATCH v3 3/7] t6423: document two bugs with rename-to-self testcases Elijah Newren via GitGitGadget
2025-08-06 23:15     ` [PATCH v3 4/7] t6423: fix missed staging of file in testcases 12i,12j,12k Elijah Newren via GitGitGadget
2025-08-06 23:15     ` [PATCH v3 5/7] merge-ort: clarify the interning of strings in opt->priv->path Elijah Newren via GitGitGadget
2025-08-06 23:15     ` [PATCH v3 6/7] merge-ort: fix incorrect file handling Elijah Newren via GitGitGadget
2025-08-06 23:15     ` [PATCH v3 7/7] merge-ort: fix directory rename on top of source of other rename/delete Elijah Newren via GitGitGadget

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=pull.1943.git.1753197791.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=newren@gmail.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 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).