Squashed 'third_party/git/' content from commit cb71568594
git-subtree-dir: third_party/git git-subtree-split: cb715685942260375e1eb8153b0768a376e4ece7
This commit is contained in:
commit
1b593e1ea4
3629 changed files with 1139935 additions and 0 deletions
118
t/t7402-submodule-rebase.sh
Executable file
118
t/t7402-submodule-rebase.sh
Executable file
|
|
@ -0,0 +1,118 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2008 Johannes Schindelin
|
||||
#
|
||||
|
||||
test_description='Test rebasing, stashing, etc. with submodules'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
test_expect_success setup '
|
||||
|
||||
echo file > file &&
|
||||
git add file &&
|
||||
test_tick &&
|
||||
git commit -m initial &&
|
||||
git clone . submodule &&
|
||||
git add submodule &&
|
||||
test_tick &&
|
||||
git commit -m submodule &&
|
||||
echo second line >> file &&
|
||||
(cd submodule && git pull) &&
|
||||
test_tick &&
|
||||
git commit -m file-and-submodule -a &&
|
||||
git branch added-submodule
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'rebase with a dirty submodule' '
|
||||
|
||||
(cd submodule &&
|
||||
echo 3rd line >> file &&
|
||||
test_tick &&
|
||||
git commit -m fork -a) &&
|
||||
echo unrelated >> file2 &&
|
||||
git add file2 &&
|
||||
test_tick &&
|
||||
git commit -m unrelated file2 &&
|
||||
echo other line >> file &&
|
||||
test_tick &&
|
||||
git commit -m update file &&
|
||||
CURRENT=$(cd submodule && git rev-parse HEAD) &&
|
||||
EXPECTED=$(git rev-parse HEAD~2:submodule) &&
|
||||
GIT_TRACE=1 git rebase --onto HEAD~2 HEAD^ &&
|
||||
STORED=$(git rev-parse HEAD:submodule) &&
|
||||
test $EXPECTED = $STORED &&
|
||||
test $CURRENT = $(cd submodule && git rev-parse HEAD)
|
||||
|
||||
'
|
||||
|
||||
cat > fake-editor.sh << \EOF
|
||||
#!/bin/sh
|
||||
echo $EDITOR_TEXT
|
||||
EOF
|
||||
chmod a+x fake-editor.sh
|
||||
|
||||
test_expect_success 'interactive rebase with a dirty submodule' '
|
||||
|
||||
test submodule = $(git diff --name-only) &&
|
||||
HEAD=$(git rev-parse HEAD) &&
|
||||
GIT_EDITOR="\"$(pwd)/fake-editor.sh\"" EDITOR_TEXT="pick $HEAD" \
|
||||
git rebase -i HEAD^ &&
|
||||
test submodule = $(git diff --name-only)
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'rebase with dirty file and submodule fails' '
|
||||
|
||||
echo yet another line >> file &&
|
||||
test_tick &&
|
||||
git commit -m next file &&
|
||||
echo rewrite > file &&
|
||||
test_tick &&
|
||||
git commit -m rewrite file &&
|
||||
echo dirty > file &&
|
||||
test_must_fail git rebase --onto HEAD~2 HEAD^
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'stash with a dirty submodule' '
|
||||
|
||||
echo new > file &&
|
||||
CURRENT=$(cd submodule && git rev-parse HEAD) &&
|
||||
git stash &&
|
||||
test new != $(cat file) &&
|
||||
test submodule = $(git diff --name-only) &&
|
||||
test $CURRENT = $(cd submodule && git rev-parse HEAD) &&
|
||||
git stash apply &&
|
||||
test new = $(cat file) &&
|
||||
test $CURRENT = $(cd submodule && git rev-parse HEAD)
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'rebasing submodule that should conflict' '
|
||||
git reset --hard &&
|
||||
git checkout added-submodule &&
|
||||
git add submodule &&
|
||||
test_tick &&
|
||||
git commit -m third &&
|
||||
(
|
||||
cd submodule &&
|
||||
git commit --allow-empty -m extra
|
||||
) &&
|
||||
git add submodule &&
|
||||
test_tick &&
|
||||
git commit -m fourth &&
|
||||
|
||||
test_must_fail git rebase --onto HEAD^^ HEAD^ HEAD^0 &&
|
||||
git ls-files -s submodule >actual &&
|
||||
(
|
||||
cd submodule &&
|
||||
echo "160000 $(git rev-parse HEAD^) 1 submodule" &&
|
||||
echo "160000 $(git rev-parse HEAD^^) 2 submodule" &&
|
||||
echo "160000 $(git rev-parse HEAD) 3 submodule"
|
||||
) >expect &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
Loading…
Add table
Add a link
Reference in a new issue