summaryrefslogtreecommitdiff
path: root/t/t7402-submodule-rebase.sh
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2013-02-01 03:26:21 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-02-01 04:30:55 (GMT)
commit4ae6d4699f4d1df7cd3ffac9dd361c86d62eca42 (patch)
treeb76ce5e3ac64ea782bb5f5bb0b50ce6771f8d79b /t/t7402-submodule-rebase.sh
parent8c7a786b6c8eae8eac91083cdc9a6e337bc133b0 (diff)
downloadgit-4ae6d4699f4d1df7cd3ffac9dd361c86d62eca42.zip
git-4ae6d4699f4d1df7cd3ffac9dd361c86d62eca42.tar.gz
git-4ae6d4699f4d1df7cd3ffac9dd361c86d62eca42.tar.bz2
git-am: record full index line in the patch used while rebasing
Earlier, a230949 (am --rebasing: get patch body from commit, not from mailbox, 2012-06-26) learned to regenerate patch body from the commit object while rebasing, instead of reading from the rebase-am front-end. While doing so, it used "git diff-tree" but without giving it the "--full-index" option. This does not matter for in-repository objects; during rebasing, any abbreviated object name should uniquely identify them. But we may be rebasing a commit that contains a change to a gitlink, in which case we usually should not have the object (it names a commit in the submodule). A full object name is necessary to later reconstruct a fake ancestor index for them. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t7402-submodule-rebase.sh')
-rwxr-xr-xt/t7402-submodule-rebase.sh30
1 files changed, 28 insertions, 2 deletions
diff --git a/t/t7402-submodule-rebase.sh b/t/t7402-submodule-rebase.sh
index f919c8d..8e32f19 100755
--- a/t/t7402-submodule-rebase.sh
+++ b/t/t7402-submodule-rebase.sh
@@ -3,7 +3,7 @@
# Copyright (c) 2008 Johannes Schindelin
#
-test_description='Test rebasing and stashing with dirty submodules'
+test_description='Test rebasing, stashing, etc. with submodules'
. ./test-lib.sh
@@ -20,7 +20,8 @@ test_expect_success setup '
echo second line >> file &&
(cd submodule && git pull) &&
test_tick &&
- git commit -m file-and-submodule -a
+ git commit -m file-and-submodule -a &&
+ git branch added-submodule
'
@@ -89,4 +90,29 @@ test_expect_success 'stash with a dirty submodule' '
'
+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