mirror of
https://github.com/git/git.git
synced 2024-11-08 18:23:01 +01:00
c1a3c3640d
The new boolean "fetchRecurseSubmodules" config option controls the behavior for "git fetch" and "git pull". It specifies if these commands should recurse into submodules and fetch new commits there too and can be set separately for each submodule. In the .gitmodules file "submodule.<name>.fetchRecurseSubmodules" entries are read before looking for them in .git/config. Thus settings found in .git/config will override those from .gitmodules, thereby allowing the user to ignore settings given by the remote side while also letting upstream set reasonable defaults for those users who don't have special needs. This configuration can be overridden by the command line option "--[no-]recurse-submodules" of "git fetch" and "git pull". Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
195 lines
4.9 KiB
Bash
Executable file
195 lines
4.9 KiB
Bash
Executable file
#!/bin/sh
|
|
# Copyright (c) 2010, Jens Lehmann
|
|
|
|
test_description='Recursive "git fetch" for submodules'
|
|
|
|
. ./test-lib.sh
|
|
|
|
pwd=$(pwd)
|
|
|
|
add_upstream_commit() {
|
|
(
|
|
cd submodule &&
|
|
head1=$(git rev-parse --short HEAD) &&
|
|
echo new >> subfile &&
|
|
test_tick &&
|
|
git add subfile &&
|
|
git commit -m new subfile &&
|
|
head2=$(git rev-parse --short HEAD) &&
|
|
echo "From $pwd/submodule" > ../expect.err &&
|
|
echo " $head1..$head2 master -> origin/master" >> ../expect.err
|
|
) &&
|
|
(
|
|
cd deepsubmodule &&
|
|
head1=$(git rev-parse --short HEAD) &&
|
|
echo new >> deepsubfile &&
|
|
test_tick &&
|
|
git add deepsubfile &&
|
|
git commit -m new deepsubfile &&
|
|
head2=$(git rev-parse --short HEAD) &&
|
|
echo "From $pwd/deepsubmodule" >> ../expect.err &&
|
|
echo " $head1..$head2 master -> origin/master" >> ../expect.err
|
|
)
|
|
}
|
|
|
|
test_expect_success setup '
|
|
mkdir deepsubmodule &&
|
|
(
|
|
cd deepsubmodule &&
|
|
git init &&
|
|
echo deepsubcontent > deepsubfile &&
|
|
git add deepsubfile &&
|
|
git commit -m new deepsubfile
|
|
) &&
|
|
mkdir submodule &&
|
|
(
|
|
cd submodule &&
|
|
git init &&
|
|
echo subcontent > subfile &&
|
|
git add subfile &&
|
|
git submodule add "$pwd/deepsubmodule" deepsubmodule &&
|
|
git commit -a -m new
|
|
) &&
|
|
git submodule add "$pwd/submodule" submodule &&
|
|
git commit -am initial &&
|
|
git clone . downstream &&
|
|
(
|
|
cd downstream &&
|
|
git submodule update --init --recursive
|
|
) &&
|
|
echo "Fetching submodule submodule" > expect.out &&
|
|
echo "Fetching submodule submodule/deepsubmodule" >> expect.out
|
|
'
|
|
|
|
test_expect_success "fetch --recurse-submodules recurses into submodules" '
|
|
add_upstream_commit &&
|
|
(
|
|
cd downstream &&
|
|
git fetch --recurse-submodules >../actual.out 2>../actual.err
|
|
) &&
|
|
test_cmp expect.out actual.out &&
|
|
test_cmp expect.err actual.err
|
|
'
|
|
|
|
test_expect_success "fetch alone only fetches superproject" '
|
|
add_upstream_commit &&
|
|
(
|
|
cd downstream &&
|
|
git fetch >../actual.out 2>../actual.err
|
|
) &&
|
|
! test -s actual.out &&
|
|
! test -s actual.err
|
|
'
|
|
|
|
test_expect_success "fetch --no-recurse-submodules only fetches superproject" '
|
|
(
|
|
cd downstream &&
|
|
git fetch --no-recurse-submodules >../actual.out 2>../actual.err
|
|
) &&
|
|
! test -s actual.out &&
|
|
! test -s actual.err
|
|
'
|
|
|
|
test_expect_success "using fetchRecurseSubmodules=true in .gitmodules recurses into submodules" '
|
|
(
|
|
cd downstream &&
|
|
git config -f .gitmodules submodule.submodule.fetchRecurseSubmodules true &&
|
|
git fetch >../actual.out 2>../actual.err
|
|
) &&
|
|
test_cmp expect.out actual.out &&
|
|
test_cmp expect.err actual.err
|
|
'
|
|
|
|
test_expect_success "--no-recurse-submodules overrides .gitmodules config" '
|
|
add_upstream_commit &&
|
|
(
|
|
cd downstream &&
|
|
git fetch --no-recurse-submodules >../actual.out 2>../actual.err
|
|
) &&
|
|
! test -s actual.out &&
|
|
! test -s actual.err
|
|
'
|
|
|
|
test_expect_success "using fetchRecurseSubmodules=false in .git/config overrides setting in .gitmodules" '
|
|
(
|
|
cd downstream &&
|
|
git config submodule.submodule.fetchRecurseSubmodules false &&
|
|
git fetch >../actual.out 2>../actual.err
|
|
) &&
|
|
! test -s actual.out &&
|
|
! test -s actual.err
|
|
'
|
|
|
|
test_expect_success "--recurse-submodules overrides fetchRecurseSubmodules setting from .git/config" '
|
|
(
|
|
cd downstream &&
|
|
git fetch --recurse-submodules >../actual.out 2>../actual.err &&
|
|
git config -f --unset .gitmodules submodule.submodule.fetchRecurseSubmodules true &&
|
|
git config --unset submodule.submodule.fetchRecurseSubmodules
|
|
) &&
|
|
test_cmp expect.out actual.out &&
|
|
test_cmp expect.err actual.err
|
|
'
|
|
|
|
test_expect_success "--quiet propagates to submodules" '
|
|
(
|
|
cd downstream &&
|
|
git fetch --recurse-submodules --quiet >../actual.out 2>../actual.err
|
|
) &&
|
|
! test -s actual.out &&
|
|
! test -s actual.err
|
|
'
|
|
|
|
test_expect_success "--dry-run propagates to submodules" '
|
|
add_upstream_commit &&
|
|
(
|
|
cd downstream &&
|
|
git fetch --recurse-submodules --dry-run >../actual.out 2>../actual.err
|
|
) &&
|
|
test_cmp expect.out actual.out &&
|
|
test_cmp expect.err actual.err &&
|
|
(
|
|
cd downstream &&
|
|
git fetch --recurse-submodules >../actual.out 2>../actual.err
|
|
) &&
|
|
test_cmp expect.out actual.out &&
|
|
test_cmp expect.err actual.err
|
|
'
|
|
|
|
test_expect_success "recurseSubmodules=true propagates into submodules" '
|
|
add_upstream_commit &&
|
|
(
|
|
cd downstream &&
|
|
git config fetch.recurseSubmodules true
|
|
git fetch >../actual.out 2>../actual.err
|
|
) &&
|
|
test_cmp expect.out actual.out &&
|
|
test_cmp expect.err actual.err
|
|
'
|
|
|
|
test_expect_success "--recurse-submodules overrides config in submodule" '
|
|
add_upstream_commit &&
|
|
(
|
|
cd downstream &&
|
|
(
|
|
cd submodule &&
|
|
git config fetch.recurseSubmodules false
|
|
) &&
|
|
git fetch --recurse-submodules >../actual.out 2>../actual.err
|
|
) &&
|
|
test_cmp expect.out actual.out &&
|
|
test_cmp expect.err actual.err
|
|
'
|
|
|
|
test_expect_success "--no-recurse-submodules overrides config setting" '
|
|
add_upstream_commit &&
|
|
(
|
|
cd downstream &&
|
|
git config fetch.recurseSubmodules true
|
|
git fetch --no-recurse-submodules >../actual.out 2>../actual.err
|
|
) &&
|
|
! test -s actual.out &&
|
|
! test -s actual.err
|
|
'
|
|
|
|
test_done
|