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;
|
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,
|
static int has_remote(const char *refname, const struct object_id *oid,
|
||||||
int flags, void *cb_data)
|
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);
|
const struct diff_options *opt);
|
||||||
extern void set_config_fetch_recurse_submodules(int value);
|
extern void set_config_fetch_recurse_submodules(int value);
|
||||||
extern void set_config_update_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 void check_for_new_submodule_commits(unsigned char new_sha1[20]);
|
||||||
extern int fetch_populated_submodules(const struct argv_array *options,
|
extern int fetch_populated_submodules(const struct argv_array *options,
|
||||||
const char *prefix, int command_line_option,
|
const char *prefix, int command_line_option,
|
||||||
|
Loading…
Reference in New Issue
Block a user