This adds a sequence of tests to assure that the following two sequences work: git clone -o frotz <someurl> 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.<name>.remote mechanism supplying frotz as the remote. Then, in the same working directory git remote add fork <some url> git fetch fork git checkout --track -b fork fork/<somebranch> 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 <mlevedahl@xxxxxxxxx> --- 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.<branch>, 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 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html