-
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 branch 'jk/merge-one-file-working-tree'
* jk/merge-one-file-working-tree: merge-one-file: fix broken merges with alternate work trees add tests for merge-index / merge-one-file
- Loading branch information
Showing
2 changed files
with
106 additions
and
1 deletion.
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,100 @@ | ||
#!/bin/sh | ||
|
||
test_description='basic git merge-index / git-merge-one-file tests' | ||
. ./test-lib.sh | ||
|
||
test_expect_success 'setup diverging branches' ' | ||
for i in 1 2 3 4 5 6 7 8 9 10; do | ||
echo $i | ||
done >file && | ||
git add file && | ||
git commit -m base && | ||
git tag base && | ||
sed s/2/two/ <file >tmp && | ||
mv tmp file && | ||
git commit -a -m two && | ||
git tag two && | ||
git checkout -b other HEAD^ && | ||
sed s/10/ten/ <file >tmp && | ||
mv tmp file && | ||
git commit -a -m ten && | ||
git tag ten | ||
' | ||
|
||
cat >expect-merged <<'EOF' | ||
1 | ||
two | ||
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
ten | ||
EOF | ||
|
||
test_expect_success 'read-tree does not resolve content merge' ' | ||
git read-tree -i -m base ten two && | ||
echo file >expect && | ||
git diff-files --name-only --diff-filter=U >unmerged && | ||
test_cmp expect unmerged | ||
' | ||
|
||
test_expect_success 'git merge-index git-merge-one-file resolves' ' | ||
git merge-index git-merge-one-file -a && | ||
git diff-files --name-only --diff-filter=U >unmerged && | ||
>expect && | ||
test_cmp expect unmerged && | ||
test_cmp expect-merged file && | ||
git cat-file blob :file >file-index && | ||
test_cmp expect-merged file-index | ||
' | ||
|
||
test_expect_success 'setup bare merge' ' | ||
git clone --bare . bare.git && | ||
(cd bare.git && | ||
GIT_INDEX_FILE=$PWD/merge.index && | ||
export GIT_INDEX_FILE && | ||
git read-tree -i -m base ten two | ||
) | ||
' | ||
|
||
test_expect_success 'merge-one-file fails without a work tree' ' | ||
(cd bare.git && | ||
GIT_INDEX_FILE=$PWD/merge.index && | ||
export GIT_INDEX_FILE && | ||
test_must_fail git merge-index git-merge-one-file -a | ||
) | ||
' | ||
|
||
test_expect_success 'merge-one-file respects GIT_WORK_TREE' ' | ||
(cd bare.git && | ||
mkdir work && | ||
GIT_WORK_TREE=$PWD/work && | ||
export GIT_WORK_TREE && | ||
GIT_INDEX_FILE=$PWD/merge.index && | ||
export GIT_INDEX_FILE && | ||
git merge-index git-merge-one-file -a && | ||
git cat-file blob :file >work/file-index | ||
) && | ||
test_cmp expect-merged bare.git/work/file && | ||
test_cmp expect-merged bare.git/work/file-index | ||
' | ||
|
||
test_expect_success 'merge-one-file respects core.worktree' ' | ||
mkdir subdir && | ||
git clone . subdir/child && | ||
(cd subdir && | ||
GIT_DIR=$PWD/child/.git && | ||
export GIT_DIR && | ||
git config core.worktree "$PWD/child" && | ||
git read-tree -i -m base ten two && | ||
git merge-index git-merge-one-file -a && | ||
git cat-file blob :file >file-index | ||
) && | ||
test_cmp expect-merged subdir/child/file && | ||
test_cmp expect-merged subdir/file-index | ||
' | ||
|
||
test_done |