mirror of
https://github.com/git-for-windows/git.git
synced 2025-12-16 05:14:58 -06:00
builtin/read-tree: add --recurse-submodules switch
A new known failure mode is introduced[1], which is actually not a failure but a feature in read-tree. Unlike checkout for which the recursive submodule tests were originally written, read-tree does warn about ignored untracked files that would be overwritten. For the sake of keeping the test library for submodules generic, just mark the test as a failure. [1] KNOWN_FAILURE_SUBMODULE_OVERWRITE_IGNORED_UNTRACKED Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
1fc458d958
commit
25804914fa
@ -115,6 +115,12 @@ OPTIONS
|
|||||||
directories the index file and index output file are
|
directories the index file and index output file are
|
||||||
located in.
|
located in.
|
||||||
|
|
||||||
|
--[no-]recurse-submodules::
|
||||||
|
Using --recurse-submodules will update the content of all initialized
|
||||||
|
submodules according to the commit recorded in the superproject by
|
||||||
|
calling read-tree recursively, also setting the submodules HEAD to be
|
||||||
|
detached at that commit.
|
||||||
|
|
||||||
--no-sparse-checkout::
|
--no-sparse-checkout::
|
||||||
Disable sparse checkout support even if `core.sparseCheckout`
|
Disable sparse checkout support even if `core.sparseCheckout`
|
||||||
is true.
|
is true.
|
||||||
|
|||||||
@ -15,10 +15,13 @@
|
|||||||
#include "builtin.h"
|
#include "builtin.h"
|
||||||
#include "parse-options.h"
|
#include "parse-options.h"
|
||||||
#include "resolve-undo.h"
|
#include "resolve-undo.h"
|
||||||
|
#include "submodule.h"
|
||||||
|
#include "submodule-config.h"
|
||||||
|
|
||||||
static int nr_trees;
|
static int nr_trees;
|
||||||
static int read_empty;
|
static int read_empty;
|
||||||
static struct tree *trees[MAX_UNPACK_TREES];
|
static struct tree *trees[MAX_UNPACK_TREES];
|
||||||
|
static int recurse_submodules = RECURSE_SUBMODULES_DEFAULT;
|
||||||
|
|
||||||
static int list_tree(unsigned char *sha1)
|
static int list_tree(unsigned char *sha1)
|
||||||
{
|
{
|
||||||
@ -96,6 +99,23 @@ static int debug_merge(const struct cache_entry * const *stages,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int option_parse_recurse_submodules(const struct option *opt,
|
||||||
|
const char *arg, int unset)
|
||||||
|
{
|
||||||
|
if (unset) {
|
||||||
|
recurse_submodules = RECURSE_SUBMODULES_OFF;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (arg)
|
||||||
|
recurse_submodules =
|
||||||
|
parse_update_recurse_submodules_arg(opt->long_name,
|
||||||
|
arg);
|
||||||
|
else
|
||||||
|
recurse_submodules = RECURSE_SUBMODULES_ON;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static struct lock_file lock_file;
|
static struct lock_file lock_file;
|
||||||
|
|
||||||
int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
|
int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
|
||||||
@ -137,6 +157,9 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
|
|||||||
N_("skip applying sparse checkout filter")),
|
N_("skip applying sparse checkout filter")),
|
||||||
OPT_BOOL(0, "debug-unpack", &opts.debug_unpack,
|
OPT_BOOL(0, "debug-unpack", &opts.debug_unpack,
|
||||||
N_("debug unpack-trees")),
|
N_("debug unpack-trees")),
|
||||||
|
{ OPTION_CALLBACK, 0, "recurse-submodules", &recurse_submodules,
|
||||||
|
"checkout", "control recursive updating of submodules",
|
||||||
|
PARSE_OPT_OPTARG, option_parse_recurse_submodules },
|
||||||
OPT_END()
|
OPT_END()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -152,6 +175,12 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
|
|||||||
|
|
||||||
hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
|
hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
|
||||||
|
|
||||||
|
if (recurse_submodules != RECURSE_SUBMODULES_DEFAULT) {
|
||||||
|
gitmodules_config();
|
||||||
|
git_config(submodule_config, NULL);
|
||||||
|
set_config_update_recurse_submodules(RECURSE_SUBMODULES_ON);
|
||||||
|
}
|
||||||
|
|
||||||
prefix_set = opts.prefix ? 1 : 0;
|
prefix_set = opts.prefix ? 1 : 0;
|
||||||
if (1 < opts.merge + opts.reset + prefix_set)
|
if (1 < opts.merge + opts.reset + prefix_set)
|
||||||
die("Which one? -m, --reset, or --prefix?");
|
die("Which one? -m, --reset, or --prefix?");
|
||||||
|
|||||||
@ -792,6 +792,11 @@ test_submodule_switch_recursing () {
|
|||||||
then
|
then
|
||||||
RESULTR=failure
|
RESULTR=failure
|
||||||
fi
|
fi
|
||||||
|
RESULTOI=success
|
||||||
|
if test "$KNOWN_FAILURE_SUBMODULE_OVERWRITE_IGNORED_UNTRACKED" = 1
|
||||||
|
then
|
||||||
|
RESULTOI=failure
|
||||||
|
fi
|
||||||
######################### Appearing submodule #########################
|
######################### Appearing submodule #########################
|
||||||
# Switching to a commit letting a submodule appear checks it out ...
|
# Switching to a commit letting a submodule appear checks it out ...
|
||||||
test_expect_success "$command: added submodule is checked out" '
|
test_expect_success "$command: added submodule is checked out" '
|
||||||
@ -832,7 +837,7 @@ test_submodule_switch_recursing () {
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
# ... but an ignored file is fine.
|
# ... but an ignored file is fine.
|
||||||
test_expect_success "$command: added submodule removes an untracked ignored file" '
|
test_expect_$RESULTOI "$command: added submodule removes an untracked ignored file" '
|
||||||
test_when_finished "rm submodule_update/.git/info/exclude" &&
|
test_when_finished "rm submodule_update/.git/info/exclude" &&
|
||||||
prolog &&
|
prolog &&
|
||||||
reset_work_tree_to_interested no_submodule &&
|
reset_work_tree_to_interested no_submodule &&
|
||||||
|
|||||||
@ -5,6 +5,14 @@ test_description='read-tree can handle submodules'
|
|||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
. "$TEST_DIRECTORY"/lib-submodule-update.sh
|
. "$TEST_DIRECTORY"/lib-submodule-update.sh
|
||||||
|
|
||||||
|
KNOWN_FAILURE_SUBMODULE_RECURSIVE_NESTED=1
|
||||||
|
KNOWN_FAILURE_DIRECTORY_SUBMODULE_CONFLICTS=1
|
||||||
|
KNOWN_FAILURE_SUBMODULE_OVERWRITE_IGNORED_UNTRACKED=1
|
||||||
|
|
||||||
|
test_submodule_switch_recursing "git read-tree --recurse-submodules -u -m"
|
||||||
|
|
||||||
|
test_submodule_forced_switch_recursing "git read-tree --recurse-submodules -u --reset"
|
||||||
|
|
||||||
test_submodule_switch "git read-tree -u -m"
|
test_submodule_switch "git read-tree -u -m"
|
||||||
|
|
||||||
test_submodule_forced_switch "git read-tree -u --reset"
|
test_submodule_forced_switch "git read-tree -u --reset"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user