From: "Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Elijah Newren <newren@gmail.com>,
Jonathan Tan <jonathantanmy@google.com>,
Calvin Wan <calvinwan@google.com>,
Elijah Newren <newren@gmail.com>
Subject: [PATCH v2 0/3] Fix dual rename into each other plus conflicting adds
Date: Thu, 30 Jun 2022 06:57:02 +0000 [thread overview]
Message-ID: <pull.1268.v2.git.1656572225.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1268.git.1655871651.gitgitgadget@gmail.com>
This series adds some testcases based on the tensorflow repository issue
reported by Glen Choo at [1], demonstrating bugs in both the ort and
recursive strategies. It also provides a fix for the ort strategy.
Changes since v1:
* Fixed some wording issues in comments, and added a bit more details to
one of the commit messages
[1]
https://lore.kernel.org/git/kl6lee006mle.fsf@chooglen-macbookpro.roam.corp.google.com/
Elijah Newren (3):
t6423: add tests of dual directory rename plus add/add conflict
merge-ort: shuffle the computation and cleanup of potential collisions
merge-ort: fix issue with dual rename and add/add conflict
merge-ort.c | 63 +++++++++++------
t/t6423-merge-rename-directories.sh | 102 ++++++++++++++++++++++++++++
2 files changed, 145 insertions(+), 20 deletions(-)
base-commit: e54793a95afeea1e10de1e5ad7eab914e7416250
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1268%2Fnewren%2Ffix-dual-rename-into-each-other-plus-conflicting-adds-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1268/newren/fix-dual-rename-into-each-other-plus-conflicting-adds-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/1268
Range-diff vs v1:
1: 69d62041843 ! 1: bf4c03d01d5 t6423: add tests of dual directory rename plus add/add conflict
@@ t/t6423-merge-rename-directories.sh: test_expect_success '12k: Directory rename
'
+# Testcase 12l, Both sides rename a directory into the other side, both add
-+# a file with after directory renames are the same filename
++# a file which after directory renames are the same filename
+# Commit O: sub1/file, sub2/other
+# Commit A: sub3/file, sub2/{other, new_add_add_file_1}
+# Commit B: sub1/{file, newfile}, sub1/sub2/{other, new_add_add_file_2}
@@ t/t6423-merge-rename-directories.sh: test_expect_success '12k: Directory rename
+# B: sub2/ -> sub1/sub2, add sub1/newfile, add sub1/sub2/new_add_add_file_2
+#
+# Expected: sub3/{file, newfile, sub2/other}
-+# CONFLICT (add/add): sub3/sub2/new_add_add_file
++# CONFLICT (add/add): sub1/sub2/new_add_add_file
+
+test_setup_12l () {
+ test_create_repo 12l_$1 &&
2: d8c13e56209 = 2: cfa38f01481 merge-ort: shuffle the computation and cleanup of potential collisions
3: bb2badccb71 ! 3: da3ae38e390 merge-ort: fix issue with dual rename and add/add conflict
@@ Commit message
with it. So, let's just turn off directory rename detection in this
case as well.
+ Another way to look at this is that if the source name involved in a
+ directory rename on one side is the target name of a directory rename
+ operation for a file from the other side, then we avoid the doubly
+ transitive rename. (More concretely, if a directory rename on side D
+ wants to rename a file on side E from OLD_NAME -> NEW_NAME, and side D
+ already had a file named NEW_NAME, and a directory rename on side E
+ wants to rename side D's NEW_NAME -> NEWER_NAME, then we turn off the
+ directory rename detection for NEW_NAME to prevent the
+ NEW_NAME -> NEWER_NAME rename, and instead end up with an add/add
+ conflict on NEW_NAME.)
+
Signed-off-by: Elijah Newren <newren@gmail.com>
## merge-ort.c ##
@@ merge-ort.c: static char *check_for_directory_rename(struct merge_options *opt,
const char *new_dir;
+ int other_side = 3 - side_index;
-+ /* Cases where there is no new path, so we return NULL */
++ /*
++ * Cases where we don't have or don't want a directory rename for
++ * this path, so we return NULL.
++ */
if (strmap_empty(dir_renames))
return new_path;
+ if (strmap_get(&collisions[other_side], path))
--
gitgitgadget
next prev parent reply other threads:[~2022-06-30 6:57 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-22 4:20 [PATCH 0/3] Fix dual rename into each other plus conflicting adds Elijah Newren via GitGitGadget
2022-06-22 4:20 ` [PATCH 1/3] t6423: add tests of dual directory rename plus add/add conflict Elijah Newren via GitGitGadget
2022-06-27 18:20 ` Jonathan Tan
2022-06-30 0:06 ` Elijah Newren
2022-06-30 22:32 ` Jonathan Tan
2022-07-01 2:57 ` Elijah Newren
2022-06-27 22:30 ` Calvin Wan
2022-06-30 0:07 ` Elijah Newren
2022-06-22 4:20 ` [PATCH 2/3] merge-ort: shuffle the computation and cleanup of potential collisions Elijah Newren via GitGitGadget
2022-06-27 18:48 ` Jonathan Tan
2022-06-27 21:04 ` Calvin Wan
2022-06-30 0:05 ` Elijah Newren
2022-06-22 4:20 ` [PATCH 3/3] merge-ort: fix issue with dual rename and add/add conflict Elijah Newren via GitGitGadget
2022-06-27 18:47 ` Jonathan Tan
2022-06-30 0:05 ` Elijah Newren
2022-07-06 17:25 ` Jonathan Tan
2022-06-22 4:36 ` [PATCH 0/3] Fix dual rename into each other plus conflicting adds Elijah Newren
2022-06-30 6:57 ` Elijah Newren via GitGitGadget [this message]
2022-06-30 6:57 ` [PATCH v2 1/3] t6423: add tests of dual directory rename plus add/add conflict Elijah Newren via GitGitGadget
2022-06-30 10:21 ` Ævar Arnfjörð Bjarmason
2022-07-01 2:57 ` Elijah Newren
2022-07-01 9:29 ` Ævar Arnfjörð Bjarmason
2022-06-30 6:57 ` [PATCH v2 2/3] merge-ort: shuffle the computation and cleanup of potential collisions Elijah Newren via GitGitGadget
2022-06-30 10:28 ` Ævar Arnfjörð Bjarmason
2022-07-01 3:02 ` Elijah Newren
2022-06-30 6:57 ` [PATCH v2 3/3] merge-ort: fix issue with dual rename and add/add conflict Elijah Newren via GitGitGadget
2022-06-30 10:31 ` Ævar Arnfjörð Bjarmason
2022-07-01 3:03 ` Elijah Newren
2022-07-01 5:23 ` [PATCH v3 0/5] Fix dual rename into each other plus conflicting adds Elijah Newren via GitGitGadget
2022-07-01 5:23 ` [PATCH v3 1/5] t6423: add tests of dual directory rename plus add/add conflict Elijah Newren via GitGitGadget
2022-07-01 5:23 ` [PATCH v3 2/5] merge-ort: small cleanups of check_for_directory_rename Elijah Newren via GitGitGadget
2022-07-01 5:23 ` [PATCH v3 3/5] merge-ort: make a separate function for freeing struct collisions Elijah Newren via GitGitGadget
2022-07-01 5:23 ` [PATCH v3 4/5] merge-ort: shuffle the computation and cleanup of potential collisions Elijah Newren via GitGitGadget
2022-07-01 9:16 ` Ævar Arnfjörð Bjarmason
2022-07-25 12:00 ` C99 "for (int ..." form on "master" (was: [PATCH v3 4/5] merge-ort: shuffle the computation and cleanup of potential collisions) Ævar Arnfjörð Bjarmason
2022-07-26 2:14 ` Elijah Newren
2022-07-26 4:48 ` C99 "for (int ..." form on "master" Junio C Hamano
2022-07-01 5:23 ` [PATCH v3 5/5] merge-ort: fix issue with dual rename and add/add conflict Elijah Newren via GitGitGadget
2022-07-05 1:33 ` [PATCH v4 0/5] Fix dual rename into each other plus conflicting adds Elijah Newren via GitGitGadget
2022-07-05 1:33 ` [PATCH v4 1/5] t6423: add tests of dual directory rename plus add/add conflict Elijah Newren via GitGitGadget
2022-07-05 1:33 ` [PATCH v4 2/5] merge-ort: small cleanups of check_for_directory_rename Elijah Newren via GitGitGadget
2022-07-05 1:33 ` [PATCH v4 3/5] merge-ort: make a separate function for freeing struct collisions Elijah Newren via GitGitGadget
2022-07-05 1:33 ` [PATCH v4 4/5] merge-ort: shuffle the computation and cleanup of potential collisions Elijah Newren via GitGitGadget
2022-07-05 1:33 ` [PATCH v4 5/5] merge-ort: fix issue with dual rename and add/add conflict Elijah Newren via GitGitGadget
2022-07-06 16:52 ` [PATCH v4 0/5] Fix dual rename into each other plus conflicting adds Junio C Hamano
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.1268.v2.git.1656572225.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=calvinwan@google.com \
--cc=git@vger.kernel.org \
--cc=jonathantanmy@google.com \
--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 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.