From: Jens Lehmann <Jens.Lehmann@xxxxxx> Date: Mon, 18 Jun 2012 22:17:59 +0200 This commit adds the functions needed for configuration, for setting the default behavior and for determining if a submodule path should be updated automatically. Signed-off-by: Jens Lehmann <Jens.Lehmann@xxxxxx> Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- Should probably be squashed into a patch that uses and documents this configuration. submodule.c | 36 ++++++++++++++++++++++++++++++++++++ submodule.h | 3 +++ 2 files changed, 39 insertions(+) diff --git a/submodule.c b/submodule.c index 613857e..3f18d4d 100644 --- a/submodule.c +++ b/submodule.c @@ -16,6 +16,8 @@ static struct string_list config_name_for_path; static struct string_list config_fetch_recurse_submodules_for_name; static struct string_list config_ignore_for_name; static int config_fetch_recurse_submodules = RECURSE_SUBMODULES_ON_DEMAND; +static int config_update_recurse_submodules = RECURSE_SUBMODULES_OFF; +static int option_update_recurse_submodules = RECURSE_SUBMODULES_DEFAULT; static struct string_list changed_submodule_paths; static int initialized_fetch_ref_tips; static struct sha1_array ref_tips_before_fetch; @@ -382,6 +384,34 @@ int parse_fetch_recurse_submodules_arg(const char *opt, const char *arg) } } +int parse_update_recurse_submodules_arg(const char *opt, const char *arg) +{ + switch (git_config_maybe_bool(opt, arg)) { + case 1: + return RECURSE_SUBMODULES_ON; + case 0: + return RECURSE_SUBMODULES_OFF; + default: + if (!strcmp(arg, "checkout")) + return RECURSE_SUBMODULES_ON; + die("bad %s argument: %s", opt, arg); + } +} + +int submodule_needs_update(const char *path) +{ + struct string_list_item *path_option; + path_option = unsorted_string_list_lookup(&config_name_for_path, path); + if (!path_option) + return 0; + + /* update can't be "none", "merge" or "rebase" */ + + if (option_update_recurse_submodules != RECURSE_SUBMODULES_DEFAULT) + return 1; + return config_update_recurse_submodules != RECURSE_SUBMODULES_OFF; +} + void show_submodule_summary(FILE *f, const char *path, const char *line_prefix, unsigned char one[20], unsigned char two[20], @@ -589,6 +619,12 @@ int push_unpushed_submodules(unsigned char new_sha1[20], const char *remotes_nam return ret; } +void set_config_update_recurse_submodules(int default_value, int option_value) +{ + config_update_recurse_submodules = default_value; + option_update_recurse_submodules = option_value; +} + static int is_submodule_commit_present(const char *path, unsigned char sha1[20]) { int is_present = 0; diff --git a/submodule.h b/submodule.h index 7beec48..055918c 100644 --- a/submodule.h +++ b/submodule.h @@ -22,12 +22,15 @@ void gitmodules_config(void); int parse_submodule_config_option(const char *var, const char *value); void handle_ignore_submodules_arg(struct diff_options *diffopt, const char *); int parse_fetch_recurse_submodules_arg(const char *opt, const char *arg); +int parse_update_recurse_submodules_arg(const char *opt, const char *arg); +int submodule_needs_update(const char *path); void show_submodule_summary(FILE *f, const char *path, const char *line_prefix, unsigned char one[20], unsigned char two[20], unsigned dirty_submodule, const char *meta, const char *del, const char *add, const char *reset); void set_config_fetch_recurse_submodules(int value); +void set_config_update_recurse_submodules(int default_value, int option_value); void check_for_new_submodule_commits(unsigned char new_sha1[20]); int fetch_populated_submodules(const struct argv_array *options, const char *prefix, int command_line_option, -- 1.8.5.1 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html