| #!/bin/sh |
| # |
| # Copyright (c) 2009 Red Hat, Inc. |
| # |
| |
| test_description='Test updating submodules |
| |
| This test verifies that "git submodule update" detaches the HEAD of the |
| submodule and "git submodule update --rebase/--merge" does not detach the HEAD. |
| ' |
| |
| . ./test-lib.sh |
| |
| |
| compare_head() |
| { |
| sha_master=`git rev-list --max-count=1 master` |
| sha_head=`git rev-list --max-count=1 HEAD` |
| |
| test "$sha_master" = "$sha_head" |
| } |
| |
| |
| test_expect_success 'setup a submodule tree' ' |
| echo file > file && |
| git add file && |
| test_tick && |
| git commit -m upstream |
| git clone . super && |
| git clone super submodule && |
| git clone super rebasing && |
| git clone super merging && |
| (cd super && |
| git submodule add ../submodule submodule && |
| test_tick && |
| git commit -m "submodule" && |
| git submodule init submodule |
| ) && |
| (cd submodule && |
| echo "line2" > file && |
| git add file && |
| git commit -m "Commit 2" |
| ) && |
| (cd super && |
| (cd submodule && |
| git pull --rebase origin |
| ) && |
| git add submodule && |
| git commit -m "submodule update" |
| ) && |
| (cd super && |
| git submodule add ../rebasing rebasing && |
| test_tick && |
| git commit -m "rebasing" |
| ) && |
| (cd super && |
| git submodule add ../merging merging && |
| test_tick && |
| git commit -m "rebasing" |
| ) |
| ' |
| |
| test_expect_success 'submodule update detaching the HEAD ' ' |
| (cd super/submodule && |
| git reset --hard HEAD~1 |
| ) && |
| (cd super && |
| (cd submodule && |
| compare_head |
| ) && |
| git submodule update submodule && |
| cd submodule && |
| ! compare_head |
| ) |
| ' |
| |
| test_expect_success 'submodule update --rebase staying on master' ' |
| (cd super/submodule && |
| git checkout master |
| ) && |
| (cd super && |
| (cd submodule && |
| compare_head |
| ) && |
| git submodule update --rebase submodule && |
| cd submodule && |
| compare_head |
| ) |
| ' |
| |
| test_expect_success 'submodule update --merge staying on master' ' |
| (cd super/submodule && |
| git reset --hard HEAD~1 |
| ) && |
| (cd super && |
| (cd submodule && |
| compare_head |
| ) && |
| git submodule update --merge submodule && |
| cd submodule && |
| compare_head |
| ) |
| ' |
| |
| test_expect_success 'submodule update - rebase in .git/config' ' |
| (cd super && |
| git config submodule.submodule.update rebase |
| ) && |
| (cd super/submodule && |
| git reset --hard HEAD~1 |
| ) && |
| (cd super && |
| (cd submodule && |
| compare_head |
| ) && |
| git submodule update submodule && |
| cd submodule && |
| compare_head |
| ) |
| ' |
| |
| test_expect_success 'submodule update - checkout in .git/config but --rebase given' ' |
| (cd super && |
| git config submodule.submodule.update checkout |
| ) && |
| (cd super/submodule && |
| git reset --hard HEAD~1 |
| ) && |
| (cd super && |
| (cd submodule && |
| compare_head |
| ) && |
| git submodule update --rebase submodule && |
| cd submodule && |
| compare_head |
| ) |
| ' |
| |
| test_expect_success 'submodule update - merge in .git/config' ' |
| (cd super && |
| git config submodule.submodule.update merge |
| ) && |
| (cd super/submodule && |
| git reset --hard HEAD~1 |
| ) && |
| (cd super && |
| (cd submodule && |
| compare_head |
| ) && |
| git submodule update submodule && |
| cd submodule && |
| compare_head |
| ) |
| ' |
| |
| test_expect_success 'submodule update - checkout in .git/config but --merge given' ' |
| (cd super && |
| git config submodule.submodule.update checkout |
| ) && |
| (cd super/submodule && |
| git reset --hard HEAD~1 |
| ) && |
| (cd super && |
| (cd submodule && |
| compare_head |
| ) && |
| git submodule update --merge submodule && |
| cd submodule && |
| compare_head |
| ) |
| ' |
| |
| test_expect_success 'submodule update - checkout in .git/config' ' |
| (cd super && |
| git config submodule.submodule.update checkout |
| ) && |
| (cd super/submodule && |
| git reset --hard HEAD^ |
| ) && |
| (cd super && |
| (cd submodule && |
| compare_head |
| ) && |
| git submodule update submodule && |
| cd submodule && |
| ! compare_head |
| ) |
| ' |
| |
| test_expect_success 'submodule init picks up rebase' ' |
| (cd super && |
| git config -f .gitmodules submodule.rebasing.update rebase && |
| git submodule init rebasing && |
| test "rebase" = "$(git config submodule.rebasing.update)" |
| ) |
| ' |
| |
| test_expect_success 'submodule init picks up merge' ' |
| (cd super && |
| git config -f .gitmodules submodule.merging.update merge && |
| git submodule init merging && |
| test "merge" = "$(git config submodule.merging.update)" |
| ) |
| ' |
| |
| test_done |