submodules: introduce check to see whether to touch a submodule
In later patches we introduce the --recurse-submodule flag for commands that modify the working directory, e.g. git-checkout. It is potentially expensive to check if a submodule needs an update, because a common theme to interact with submodules is to spawn a child process for each interaction. So let's introduce a function that checks if a submodule needs to be checked for an update before attempting the update. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
cf055e465f
commit
84f8925eeb
16
submodule.c
16
submodule.c
@ -548,6 +548,22 @@ void set_config_update_recurse_submodules(int value)
|
||||
config_update_recurse_submodules = value;
|
||||
}
|
||||
|
||||
int should_update_submodules(void)
|
||||
{
|
||||
return config_update_recurse_submodules == RECURSE_SUBMODULES_ON;
|
||||
}
|
||||
|
||||
const struct submodule *submodule_from_ce(const struct cache_entry *ce)
|
||||
{
|
||||
if (!S_ISGITLINK(ce->ce_mode))
|
||||
return NULL;
|
||||
|
||||
if (!should_update_submodules())
|
||||
return NULL;
|
||||
|
||||
return submodule_from_path(null_sha1, ce->name);
|
||||
}
|
||||
|
||||
static int has_remote(const char *refname, const struct object_id *oid,
|
||||
int flags, void *cb_data)
|
||||
{
|
||||
|
@ -65,6 +65,13 @@ extern void show_submodule_inline_diff(FILE *f, const char *path,
|
||||
const struct diff_options *opt);
|
||||
extern void set_config_fetch_recurse_submodules(int value);
|
||||
extern void set_config_update_recurse_submodules(int value);
|
||||
/* Check if we want to update any submodule.*/
|
||||
extern int should_update_submodules(void);
|
||||
/*
|
||||
* Returns the submodule struct if the given ce entry is a submodule
|
||||
* and it should be updated. Returns NULL otherwise.
|
||||
*/
|
||||
extern const struct submodule *submodule_from_ce(const struct cache_entry *ce);
|
||||
extern void check_for_new_submodule_commits(unsigned char new_sha1[20]);
|
||||
extern int fetch_populated_submodules(const struct argv_array *options,
|
||||
const char *prefix, int command_line_option,
|
||||
|
Loading…
Reference in New Issue
Block a user