Merge branch 'hv/submodule-update-none'

* hv/submodule-update-none:
  add update 'none' flag to disable update of submodule by default
  submodule: move update configuration variable further up
This commit is contained in:
Junio C Hamano 2011-10-10 15:56:17 -07:00
Родитель efc5fb6a77 322bb6e12f
Коммит 61f9db7a50
2 изменённых файлов: 69 добавлений и 1 удалений

Просмотреть файл

@ -120,6 +120,8 @@ too (and can also report changes to a submodule's work tree).
init:: init::
Initialize the submodules, i.e. register each submodule name Initialize the submodules, i.e. register each submodule name
and url found in .gitmodules into .git/config. 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`. The key used in .git/config is `submodule.$name.url`.
This command does not alter existing information in .git/config. This command does not alter existing information in .git/config.
You can then customize the submodule clone URLs 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. checkout the commit specified in the index of the containing repository.
This will make the submodules HEAD be detached unless `--rebase` or This will make the submodules HEAD be detached unless `--rebase` or
`--merge` is specified or the key `submodule.$name.update` is set to `--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 If the submodule is not yet initialized, and you just want to use the
setting as stored in .gitmodules, you can automatically initialize 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 If `--recursive` is specified, this command will recurse into the
registered submodules, and update any nested submodules within. 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:: summary::
Show commit summary between the given commit (defaults to HEAD) and Show commit summary between the given commit (defaults to HEAD) and

Просмотреть файл

@ -30,6 +30,7 @@ test_expect_success 'setup a submodule tree' '
git clone super submodule && git clone super submodule &&
git clone super rebasing && git clone super rebasing &&
git clone super merging && git clone super merging &&
git clone super none &&
(cd super && (cd super &&
git submodule add ../submodule submodule && git submodule add ../submodule submodule &&
test_tick && test_tick &&
@ -58,6 +59,11 @@ test_expect_success 'setup a submodule tree' '
test_tick && test_tick &&
git commit -m "rebasing" 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 ' ' 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' ' test_expect_success 'submodule update continues after checkout error' '
(cd super && (cd super &&
git reset --hard HEAD && git reset --hard HEAD &&