提交 1affea4f 编写于 作者: C Clemens Buchacher 提交者: Junio C Hamano

merge-recursive: handle file mode changes

File mode changes should be handled similarly to changes of content.
That is, if the file mode changed in only one branch, keep the changed
version, and if both branch changed to different mode, mark it as a
conflict.
Signed-off-by: NClemens Buchacher <drizzd@aon.at>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 bb12ac51
......@@ -1028,9 +1028,20 @@ static struct merge_file_info merge_file(struct diff_filespec *o,
if (!sha_eq(a->sha1, o->sha1) && !sha_eq(b->sha1, o->sha1))
result.merge = 1;
result.mode = a->mode == o->mode ? b->mode: a->mode;
/*
* Merge modes
*/
if (a->mode == b->mode || a->mode == o->mode)
result.mode = b->mode;
else {
result.mode = a->mode;
if (b->mode != o->mode) {
result.clean = 0;
result.merge = 1;
}
}
if (sha_eq(a->sha1, o->sha1))
if (sha_eq(a->sha1, b->sha1) || sha_eq(a->sha1, o->sha1))
hashcpy(result.sha, b->sha1);
else if (sha_eq(b->sha1, o->sha1))
hashcpy(result.sha, a->sha1);
......
#!/bin/sh
test_description='merge-recursive: handle file mode'
. ./test-lib.sh
test_expect_success 'mode change in one branch: keep changed version' '
: >file1 &&
git add file1 &&
git commit -m initial &&
git checkout -b a1 master &&
: >dummy &&
git add dummy &&
git commit -m a &&
git checkout -b b1 master &&
chmod +x file1 &&
git add file1 &&
git commit -m b1 &&
git checkout a1 &&
git merge-recursive master -- a1 b1 &&
test -x file1
'
test_expect_success 'mode change in both branches: expect conflict' '
git reset --hard HEAD &&
git checkout -b a2 master &&
: >file2 &&
H=$(git hash-object file2) &&
chmod +x file2 &&
git add file2 &&
git commit -m a2 &&
git checkout -b b2 master &&
: >file2 &&
git add file2 &&
git commit -m b2 &&
git checkout a2 &&
(
git merge-recursive master -- a2 b2
test $? = 1
) &&
git ls-files -u >actual &&
(
echo "100755 $H 2 file2"
echo "100644 $H 3 file2"
) >expect &&
diff -u actual expect &&
test -x file2
'
test_done
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册