add update 'none' flag to disable update of submodule by default
This is useful to mark a submodule as unneeded by default. When this option is set and the user wants to work with such a submodule he needs to configure 'submodule.<name>.update=checkout' or pass the --checkout option. Then the submodule can be handled like a normal submodule. Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
817bac35f2
commit
322bb6e12f
@ -120,6 +120,8 @@ too (and can also report changes to a submodule's work tree).
|
||||
init::
|
||||
Initialize the submodules, i.e. register each submodule name
|
||||
and url found in .gitmodules into .git/config.
|
||||
It will also copy the value of `submodule.$name.update` into
|
||||
.git/config.
|
||||
The key used in .git/config is `submodule.$name.url`.
|
||||
This command does not alter existing information in .git/config.
|
||||
You can then customize the submodule clone URLs in .git/config
|
||||
@ -133,7 +135,7 @@ update::
|
||||
checkout the commit specified in the index of the containing repository.
|
||||
This will make the submodules HEAD be detached unless `--rebase` or
|
||||
`--merge` is specified or the key `submodule.$name.update` is set to
|
||||
`rebase` or `merge`.
|
||||
`rebase`, `merge` or `none`.
|
||||
+
|
||||
If the submodule is not yet initialized, and you just want to use the
|
||||
setting as stored in .gitmodules, you can automatically initialize the
|
||||
@ -141,6 +143,10 @@ submodule with the `--init` option.
|
||||
+
|
||||
If `--recursive` is specified, this command will recurse into the
|
||||
registered submodules, and update any nested submodules within.
|
||||
+
|
||||
If the configuration key `submodule.$name.update` is set to `none` the
|
||||
submodule with name `$name` will not be updated by default. This can be
|
||||
overriden by adding `--checkout` to the command.
|
||||
|
||||
summary::
|
||||
Show commit summary between the given commit (defaults to HEAD) and
|
||||
|
@ -429,6 +429,9 @@ cmd_update()
|
||||
--recursive)
|
||||
recursive=1
|
||||
;;
|
||||
--checkout)
|
||||
update="checkout"
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
@ -468,6 +471,12 @@ cmd_update()
|
||||
update_module=$(git config submodule."$name".update)
|
||||
fi
|
||||
|
||||
if test "$update_module" = "none"
|
||||
then
|
||||
echo "Skipping submodule '$path'"
|
||||
continue
|
||||
fi
|
||||
|
||||
if test -z "$url"
|
||||
then
|
||||
# Only mention uninitialized submodules when its
|
||||
|
@ -30,6 +30,7 @@ test_expect_success 'setup a submodule tree' '
|
||||
git clone super submodule &&
|
||||
git clone super rebasing &&
|
||||
git clone super merging &&
|
||||
git clone super none &&
|
||||
(cd super &&
|
||||
git submodule add ../submodule submodule &&
|
||||
test_tick &&
|
||||
@ -58,6 +59,11 @@ test_expect_success 'setup a submodule tree' '
|
||||
test_tick &&
|
||||
git commit -m "rebasing"
|
||||
)
|
||||
(cd super &&
|
||||
git submodule add ../none none &&
|
||||
test_tick &&
|
||||
git commit -m "none"
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'submodule update detaching the HEAD ' '
|
||||
@ -298,6 +304,62 @@ test_expect_success 'submodule update ignores update=rebase config for new submo
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'submodule init picks up update=none' '
|
||||
(cd super &&
|
||||
git config -f .gitmodules submodule.none.update none &&
|
||||
git submodule init none &&
|
||||
test "none" = "$(git config submodule.none.update)"
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'submodule update - update=none in .git/config' '
|
||||
(cd super &&
|
||||
git config submodule.submodule.update none &&
|
||||
(cd submodule &&
|
||||
git checkout master &&
|
||||
compare_head
|
||||
) &&
|
||||
git diff --raw | grep " submodule" &&
|
||||
git submodule update &&
|
||||
git diff --raw | grep " submodule" &&
|
||||
(cd submodule &&
|
||||
compare_head
|
||||
) &&
|
||||
git config --unset submodule.submodule.update &&
|
||||
git submodule update submodule
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'submodule update - update=none in .git/config but --checkout given' '
|
||||
(cd super &&
|
||||
git config submodule.submodule.update none &&
|
||||
(cd submodule &&
|
||||
git checkout master &&
|
||||
compare_head
|
||||
) &&
|
||||
git diff --raw | grep " submodule" &&
|
||||
git submodule update --checkout &&
|
||||
test_must_fail git diff --raw \| grep " submodule" &&
|
||||
(cd submodule &&
|
||||
test_must_fail compare_head
|
||||
) &&
|
||||
git config --unset submodule.submodule.update
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'submodule update --init skips submodule with update=none' '
|
||||
(cd super &&
|
||||
git add .gitmodules &&
|
||||
git commit -m ".gitmodules"
|
||||
) &&
|
||||
git clone super cloned &&
|
||||
(cd cloned &&
|
||||
git submodule update --init &&
|
||||
test -e submodule/.git &&
|
||||
test_must_fail test -e none/.git
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'submodule update continues after checkout error' '
|
||||
(cd super &&
|
||||
git reset --hard HEAD &&
|
||||
|
Loading…
Reference in New Issue
Block a user