diff options
author | Elijah Newren <newren@gmail.com> | 2017-11-14 09:31:24 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-11-15 12:42:34 +0900 |
commit | c641ca67072946f95f87e7b21f13f3d4e73701e3 (patch) | |
tree | f8005b79d1dd6cb8e7359a08ae83bfca83c8654c | |
parent | 89c4ee4e74269635e69c84800ece0f8b754636f6 (diff) | |
download | git-c641ca67072946f95f87e7b21f13f3d4e73701e3.tar.gz git-c641ca67072946f95f87e7b21f13f3d4e73701e3.tar.xz |
merge-recursive: handle addition of submodule on our side of history
The code for a newly added path assumed that the path was a normal file,
and thus checked for there being a directory still being in the way of
the file. Note that since unpack_trees() does path-in-the-way checks
already, the only way for there to be a directory in the way at this
point in the code, is if there is some kind of D/F conflict in the merge.
For a submodule addition on HEAD's side of history, the submodule would
have already been present. This means that we do expect there to be a
directory present but should not consider it to be "in the way"; instead,
it's the expected submodule. So, when there's a submodule addition from
HEAD's side, don't bother checking the working copy for a directory in
the way.
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | merge-recursive.c | 5 | ||||
-rwxr-xr-x | t/t3512-cherry-pick-submodule.sh | 2 |
2 files changed, 4 insertions, 3 deletions
diff --git a/merge-recursive.c b/merge-recursive.c index 1d3f8f0d2..9fb0b9f8f 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -1901,8 +1901,9 @@ static int process_entry(struct merge_options *o, oid = b_oid; conf = _("directory/file"); } - if (dir_in_way(path, !o->call_depth, - S_ISGITLINK(a_mode))) { + if (dir_in_way(path, + !o->call_depth && !S_ISGITLINK(a_mode), + 0)) { char *new_path = unique_path(o, path, add_branch); clean_merge = 0; output(o, 1, _("CONFLICT (%s): There is a directory with name %s in %s. " diff --git a/t/t3512-cherry-pick-submodule.sh b/t/t3512-cherry-pick-submodule.sh index 1b1e31100..ce48c4fcc 100755 --- a/t/t3512-cherry-pick-submodule.sh +++ b/t/t3512-cherry-pick-submodule.sh @@ -10,7 +10,7 @@ KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1 KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1 test_submodule_switch "git cherry-pick" -test_expect_failure 'unrelated submodule/file conflict is ignored' ' +test_expect_success 'unrelated submodule/file conflict is ignored' ' test_create_repo sub && touch sub/file && |