-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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: Clemens Buchacher <drizzd@aon.at> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Clemens Buchacher
authored and
Junio C Hamano
committed
Mar 14, 2008
1 parent
bb12ac5
commit 1affea4
Showing
2 changed files
with
62 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
#!/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 |