From: Mark Levedahl Date: Sat, 09 Feb 2008 16:57:25 GMT Subject: [PATCH 3/3] Add t/t7401 - test submodule interaction with remotes machinery Message-ID: <1202576245-284-3-git-send-email-mlevedahl@gmail.com> In-Reply-To: <1202576245-284-2-git-send-email-mlevedahl@gmail.com> This adds a sequence of tests to assure that the following two sequences work: git clone -o frotz foo cd foo git submodule init git submodule update This should result in the top-level project and subproject having "frotz" as the only defined remote, and should succeed with the branch..remote mechanism supplying frotz as the remote. Then, in the same working directory git remote add fork git fetch fork git checkout --track -b fork fork/ git submodule init git submodule update will retrive new submodules from remote "fork", and define fork in the existing modules. Signed-off-by: Mark Levedahl --- t/t7401-submodule-remote.sh | 118 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 118 insertions(+), 0 deletions(-) create mode 100755 t/t7401-submodule-remote.sh diff --git a/t/t7401-submodule-remote.sh b/t/t7401-submodule-remote.sh new file mode 100755 index 0000000..e5bef27 --- /dev/null +++ b/t/t7401-submodule-remote.sh @@ -0,0 +1,118 @@ +#!/bin/sh + +test_description='Porcelain support for submodules with multiple remotes + +This test verifies operation of submodules using multiple remotes and +differing remote per top-level branch. This includes ability to follow +the top-level remote., and to propagate definition of new remotes +down to submodules as needed.' + +. ./test-lib.sh + +# the standard tests all work with one repo, but we need several.. +rm -rf .git + +test_expect_success 'Prepare master repository with 1 submodule' ' + ( + mkdir master && + cd master && + git init && + echo "on master" > master.txt && + git add master.txt && + git commit -m "Add master.txt" && + mkdir submod1 && + cd submod1 && + git init && + echo "submod1" > submod1.txt && + git add submod1.txt && + git commit -m "Added submod1.txt" && + cd .. && + git submodule add ./submod1 submod1 && + git commit -m "Added submodule submod1" + ) +' + +test_expect_success 'Clone master as fork' ' + ( + git clone master fork && + cd fork && + test "$(git remote)" = "origin" && + git submodule init && + git submodule update && + test -e submod1/.git + ) +' + +test_expect_success 'Add second submodule in fork' ' + ( + cd fork && + mkdir submod2 && + cd submod2 && + git init && + echo "submod2" > submod2.txt && + git add submod2.txt && + git commit -m "Added submod2.txt" && + cd .. && + git submodule add ./submod2 submod2 && + git commit -m "Added submodule submod2 on fork" + ) +' + +test_expect_success 'Clone master using frotz instead of origin' ' + ( + git clone -o frotz master worker && + cd worker && + test "$(git remote)" = "frotz" + ) +' + +test_expect_success 'Get submodules using frotz instead of origin' ' + ( + cd worker && + git submodule init && + git submodule update && + test -e submod1/.git && + cd submod1 && + test "$(git remote)" = "frotz" + ) +' + +test_expect_success 'submodule update fails on detached head' ' + ( + cd worker && + git checkout $(git rev-parse HEAD) && + ! git submodule update + ) +' + +test_expect_success 'submodule update -r remote succeeds on detached head' ' + ( + cd worker && + git checkout $(git rev-parse HEAD) && + git submodule update -r frotz + ) +' + +test_expect_success 'Update using fork to get additional submodule' ' + ( + cd worker && + git remote add fork $(pwd)/../fork && + git fetch fork && + git checkout --track -b fork_master fork/master && + git submodule init && + git submodule update && + test -e submod2/.git && + cd submod2 && + test "$(git remote)" = "fork" && + cd ../submod1 && + remotes1=$(git remote) && + case $remotes1 in + fork*frotz|frotz*fork) + true ;; + *) + false ;; + esac + ) +' + +test_done -- 1.5.4.47.gcca7b3