Notes: I am aware this test is not probably the best one and maybe I should have first one test that does a one level non-default, before trying a test with 2 levels of submodules, but I wanted to express the goal of the patch. Currently the test fails, so I am obviously missing something. Help would be appreciated. 2018-04-04 1:20 GMT+03:00 Eddy Petrișor <eddy.petrisor@xxxxxxxxxxxxxx>: > From: Eddy Petrișor <eddy.petrisor@xxxxxxxxx> > > If a submodule uses a non-default branch and the branch info is versioned, on > submodule update --recursive --init the correct branch should be checked out. > > Signed-off-by: Eddy Petrișor <eddy.petrisor@xxxxxxxxx> > --- > t/t7406-submodule-update.sh | 54 +++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 54 insertions(+) > > diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh > index 6f083c4d6..7b65f1dd1 100755 > --- a/t/t7406-submodule-update.sh > +++ b/t/t7406-submodule-update.sh > @@ -259,6 +259,60 @@ test_expect_success 'submodule update --remote should fetch upstream changes wit > ) > ' > > +test_expect_success 'submodule update --remote --recursive --init should fetch module branch from .gitmodules' ' > + git clone . super5 && > + git clone super5 submodl2b2 && > + git clone super5 submodl1b1 && > + cd submodl2b2 && > + echo linel2b2 > l2b2 && > + git checkout -b b2 && > + git add l2b2 && > + test_tick && > + git commit -m "commit on b2 branch in l2" && > + git rev-parse --verify HEAD >../expectl2 && > + git checkout master && > + cd ../submodl1b1 && > + git checkout -b b1 && > + echo linel1b1 > l1b1 && > + git add l1b1 && > + test_tick && > + git commit -m "commit on b1 branch in l1" && > + git submodule add ../submodl2b2 submodl2b2 && > + git config -f .gitmodules submodule."submodl2b2".branch b2 && > + git add .gitmodules && > + test_tick && > + git commit -m "add l2 module with branch b2 in l1 module in branch b1" && > + git submodule init submodl2b2 && > + git rev-parse --verify HEAD >../expectl1 && > + git checkout master && > + cd ../super5 && > + echo super_with_2_chained_modules > super5 && > + git add super5 && > + test_tick && > + git commit -m "commit on default branch in super5" && > + git submodule add ../submodl1b1 submodl1b1 && > + git config -f .gitmodules submodule."submodl1b1".branch b1 && > + git add .gitmodules && > + test_tick && > + git commit -m "add l1 module with branch b1 in super5" && > + git submodule init submodl1b1 && > + git clone super5 super && > + ( > + cd super && > + git submodule update --recursive --init > + ) && > + ( > + cd submodl1b1 && > + git rev-parse --verify HEAD >../../actuall1 && > + test_cmp ../../expectl1 ../../actuall1 > + ) && > + ( > + cd submodl2b2 && > + git rev-parse --verify HEAD >../../../actuall2 && > + test_cmp ../../../expectl2 ../../../actuall2 > + ) > +' > + > test_expect_success 'local config should override .gitmodules branch' ' > (cd submodule && > git checkout test-branch && > -- > 2.16.2 > -- Eddy Petrișor