diff --git a/merge-ort.c b/merge-ort.c index 6491070d965835..9230afd0cd39e9 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -3292,6 +3292,13 @@ static int collect_renames(struct merge_options *opt, continue; } + if (opt->detect_directory_renames == MERGE_DIRECTORY_RENAMES_NONE && + p->status == 'R') { + possibly_cache_new_pair(renames, p, side_index, NULL); + pool_diff_free_filepair(&opt->priv->pool, p); + continue; + } + new_path = check_for_directory_rename(opt, p->two->path, side_index, dir_renames_for_side, diff --git a/t/t3650-replay-basics.sh b/t/t3650-replay-basics.sh index 389670262e458e..58b37599357827 100755 --- a/t/t3650-replay-basics.sh +++ b/t/t3650-replay-basics.sh @@ -195,4 +195,26 @@ test_expect_success 'using replay on bare repo to rebase multiple divergent bran done ' +test_expect_success 'merge.directoryRenames=false' ' + # create a test case that stress-tests the rename caching + git switch -c rename-onto && + + mkdir -p to-rename && + test_commit to-rename/move && + + mkdir -p renamed-directory && + git mv to-rename/move* renamed-directory/ && + test_tick && + git commit -m renamed-directory && + + git switch -c rename-from HEAD^ && + test_commit to-rename/add-a-file && + echo modified >to-rename/add-a-file.t && + test_tick && + git commit -m modified to-rename/add-a-file.t && + + git -c merge.directoryRenames=false replay \ + --onto rename-onto rename-onto..rename-from +' + test_done