builtin/checkout: add --recurse-submodules switch

This exposes a flag to recurse into submodules
in builtin/checkout making use of the code implemented
in prior patches.

A new failure mode is introduced in the submodule
update library, as the directory/submodule conflict
is not solved in prior patches.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Stefan Beller
2017-03-14 14:46:41 -07:00
committed by Junio C Hamano
parent 6d14eac3ec
commit 1fc458d958
4 changed files with 62 additions and 5 deletions

View File

@ -782,6 +782,16 @@ test_submodule_forced_switch () {
test_submodule_switch_recursing () {
command="$1"
RESULTDS=success
if test "$KNOWN_FAILURE_DIRECTORY_SUBMODULE_CONFLICTS" = 1
then
RESULTDS=failure
fi
RESULTR=success
if test "$KNOWN_FAILURE_SUBMODULE_RECURSIVE_NESTED" = 1
then
RESULTR=failure
fi
######################### Appearing submodule #########################
# Switching to a commit letting a submodule appear checks it out ...
test_expect_success "$command: added submodule is checked out" '
@ -891,7 +901,7 @@ test_submodule_switch_recursing () {
'
# Replacing a submodule with files in a directory must succeeds
# when the submodule is clean
test_expect_success "$command: replace submodule with a directory" '
test_expect_$RESULTDS "$command: replace submodule with a directory" '
prolog &&
reset_work_tree_to_interested add_sub1 &&
(
@ -903,7 +913,7 @@ test_submodule_switch_recursing () {
)
'
# ... absorbing a .git directory.
test_expect_success "$command: replace submodule containing a .git directory with a directory must absorb the git dir" '
test_expect_$RESULTDS "$command: replace submodule containing a .git directory with a directory must absorb the git dir" '
prolog &&
reset_work_tree_to_interested add_sub1 &&
(
@ -931,7 +941,7 @@ test_submodule_switch_recursing () {
'
# ... must check its local work tree for untracked files
test_expect_success "$command: replace submodule with a file must fail with untracked files" '
test_expect_$RESULTDS "$command: replace submodule with a file must fail with untracked files" '
prolog &&
reset_work_tree_to_interested add_sub1 &&
(
@ -987,7 +997,8 @@ test_submodule_switch_recursing () {
)
'
test_expect_success "$command: modified submodule updates submodule recursively" '
# recursing deeper than one level doesn't work yet.
test_expect_$RESULTR "$command: modified submodule updates submodule recursively" '
prolog &&
reset_work_tree_to_interested add_nested_sub &&
(
@ -1006,6 +1017,11 @@ test_submodule_switch_recursing () {
# the superproject as well as the submodule is allowed.
test_submodule_forced_switch_recursing () {
command="$1"
RESULT=success
if test "$KNOWN_FAILURE_DIRECTORY_SUBMODULE_CONFLICTS" = 1
then
RESULT=failure
fi
######################### Appearing submodule #########################
# Switching to a commit letting a submodule appear creates empty dir ...
test_expect_success "$command: added submodule is checked out" '
@ -1151,7 +1167,7 @@ test_submodule_forced_switch_recursing () {
'
# ... but stops for untracked files that would be lost
test_expect_success "$command: replace submodule with a file" '
test_expect_$RESULT "$command: replace submodule with a file stops for untracked files" '
prolog &&
reset_work_tree_to_interested add_sub1 &&
(