On 06/22, Antonio Ospite wrote:
> Use one callback per configuration setting to handle the generic options
> which have to be supported for backward compatibility.
>
> This removes some duplication and some support code at the cost of
> parsing the .gitmodules file twice when calling the fetch command.
>
> Signed-off-by: Antonio Ospite <[email protected]>
I'm not sure how I feel about this patch, I'm leaning towards not
needing it but I like the idea of eliminating the duplicate code. One
way you could get rid of having to read the .gitmodules file twice would
be something like the following but I don't really think its needed:
diff --git a/submodule-config.c b/submodule-config.c
index ce204fb53..7cc1864b5 100644
--- a/submodule-config.c
+++ b/submodule-config.c
@@ -681,19 +681,24 @@ void submodule_free(struct repository *r)
submodule_cache_clear(r->submodule_cache);
}
-struct fetch_config {
- int *max_children;
+struct fetch_clone_config {
+ int *fetchjobs;
int *recurse_submodules;
};
-static int gitmodules_fetch_config(const char *var, const char *value, void
*cb)
+static int gitmodules_fetch_clone_config(const char *var, const char *value,
+ void *cb)
{
- struct fetch_config *config = cb;
+ struct fetch_clone_config *config = cb;
if (!strcmp(var, "submodule.fetchjobs")) {
- *(config->max_children) = parse_submodule_fetchjobs(var, value);
+ if (config->fetchjobs)
+ *(config->fetchjobs) =
+ parse_submodule_fetchjobs(var, value);
return 0;
} else if (!strcmp(var, "fetch.recursesubmodules")) {
- *(config ->recurse_submodules) =
parse_fetch_recurse_submodules_arg(var, value);
+ if (config->recurse_submodules)
+ *(config->recurse_submodules) =
+ parse_fetch_recurse_submodules_arg(var, value);
return 0;
}
@@ -702,23 +707,20 @@ static int gitmodules_fetch_config(const char *var, const
char *value, void *cb)
void fetch_config_from_gitmodules(int *max_children, int *recurse_submodules)
{
- struct fetch_config config = {
- .max_children = max_children,
- .recurse_submodules = recurse_submodules
+ struct fetch_clone_config config = {
+ .fetchjobs = max_children,
+ .recurse_submodules = recurse_submodules,
};
- config_from_gitmodules(gitmodules_fetch_config, the_repository,
&config);
-}
-
-static int gitmodules_update_clone_config(const char *var, const char *value,
- void *cb)
-{
- int *max_jobs = cb;
- if (!strcmp(var, "submodule.fetchjobs"))
- *max_jobs = parse_submodule_fetchjobs(var, value);
- return 0;
+ config_from_gitmodules(gitmodules_fetch_clone_config, the_repository,
+ &config);
}
void update_clone_config_from_gitmodules(int *max_jobs)
{
- config_from_gitmodules(gitmodules_update_clone_config, the_repository,
&max_jobs);
+ struct fetch_clone_config config = {
+ .fetchjobs = max_jobs,
+ .recurse_submodules = NULL,
+ };
+ config_from_gitmodules(gitmodules_fetch_clone_config, the_repository,
+ &config);
}
--
Brandon Williams