зеркало из https://github.com/microsoft/git.git
Merge branch 'jt/merge-recursive-symlink-is-not-a-dir-in-way'
A bug in merge-recursive code that triggers when a branch with a symbolic link is merged with a branch that replaces it with a directory has been fixed. * jt/merge-recursive-symlink-is-not-a-dir-in-way: merge-recursive: symlink's descendants not in way
This commit is contained in:
Коммит
1f4485b219
|
@ -764,7 +764,8 @@ static int dir_in_way(struct index_state *istate, const char *path,
|
|||
|
||||
strbuf_release(&dirpath);
|
||||
return check_working_copy && !lstat(path, &st) && S_ISDIR(st.st_mode) &&
|
||||
!(empty_ok && is_empty_dir(path));
|
||||
!(empty_ok && is_empty_dir(path)) &&
|
||||
!has_symlink_leading_path(path, strlen(path));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -452,6 +452,34 @@ test_expect_success 'merge-recursive d/f conflict result' '
|
|||
|
||||
'
|
||||
|
||||
test_expect_success SYMLINKS 'dir in working tree with symlink ancestor does not produce d/f conflict' '
|
||||
git init sym &&
|
||||
(
|
||||
cd sym &&
|
||||
ln -s . foo &&
|
||||
mkdir bar &&
|
||||
>bar/file &&
|
||||
git add foo bar/file &&
|
||||
git commit -m "foo symlink" &&
|
||||
|
||||
git checkout -b branch1 &&
|
||||
git commit --allow-empty -m "empty commit" &&
|
||||
|
||||
git checkout master &&
|
||||
git rm foo &&
|
||||
mkdir foo &&
|
||||
>foo/bar &&
|
||||
git add foo/bar &&
|
||||
git commit -m "replace foo symlink with real foo dir and foo/bar file" &&
|
||||
|
||||
git checkout branch1 &&
|
||||
|
||||
git cherry-pick master &&
|
||||
test_path_is_dir foo &&
|
||||
test_path_is_file foo/bar
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'reset and 3-way merge' '
|
||||
|
||||
git reset --hard "$c2" &&
|
||||
|
|
Загрузка…
Ссылка в новой задаче