maintenance: add option to register in a specific config
maintenance register currently records the maintenance repo exclusively within the user's global configuration, but other configuration files may be relevant when running maintenance if they are included from the global config. This option allows the user to choose where maintenance repos are recorded. Signed-off-by: Ronan Pigott <ronan@rjp.ie> Signed-off-by: Taylor Blau <me@ttaylorr.com>
This commit is contained in:
committed by
Taylor Blau
parent
13d5bbdf72
commit
1f80129d61
45
builtin/gc.c
45
builtin/gc.c
@ -1454,13 +1454,15 @@ static char *get_maintpath(void)
|
||||
}
|
||||
|
||||
static char const * const builtin_maintenance_register_usage[] = {
|
||||
"git maintenance register",
|
||||
"git maintenance register [--config-file <path>]",
|
||||
NULL
|
||||
};
|
||||
|
||||
static int maintenance_register(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
char *config_file = NULL;
|
||||
struct option options[] = {
|
||||
OPT_STRING(0, "config-file", &config_file, N_("file"), N_("use given config file")),
|
||||
OPT_END(),
|
||||
};
|
||||
int found = 0;
|
||||
@ -1497,12 +1499,16 @@ static int maintenance_register(int argc, const char **argv, const char *prefix)
|
||||
|
||||
if (!found) {
|
||||
int rc;
|
||||
char *user_config, *xdg_config;
|
||||
git_global_config(&user_config, &xdg_config);
|
||||
if (!user_config)
|
||||
die(_("$HOME not set"));
|
||||
char *user_config = NULL, *xdg_config = NULL;
|
||||
|
||||
if (!config_file) {
|
||||
git_global_config(&user_config, &xdg_config);
|
||||
config_file = user_config;
|
||||
if (!user_config)
|
||||
die(_("$HOME not set"));
|
||||
}
|
||||
rc = git_config_set_multivar_in_file_gently(
|
||||
user_config, "maintenance.repo", maintpath,
|
||||
config_file, "maintenance.repo", maintpath,
|
||||
CONFIG_REGEX_NONE, 0);
|
||||
free(user_config);
|
||||
free(xdg_config);
|
||||
@ -1517,14 +1523,16 @@ static int maintenance_register(int argc, const char **argv, const char *prefix)
|
||||
}
|
||||
|
||||
static char const * const builtin_maintenance_unregister_usage[] = {
|
||||
"git maintenance unregister [--force]",
|
||||
"git maintenance unregister [--config-file <path>] [--force]",
|
||||
NULL
|
||||
};
|
||||
|
||||
static int maintenance_unregister(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int force = 0;
|
||||
char *config_file = NULL;
|
||||
struct option options[] = {
|
||||
OPT_STRING(0, "config-file", &config_file, N_("file"), N_("use given config file")),
|
||||
OPT__FORCE(&force,
|
||||
N_("return success even if repository was not registered"),
|
||||
PARSE_OPT_NOCOMPLETE),
|
||||
@ -1542,7 +1550,14 @@ static int maintenance_unregister(int argc, const char **argv, const char *prefi
|
||||
usage_with_options(builtin_maintenance_unregister_usage,
|
||||
options);
|
||||
|
||||
list = git_config_get_value_multi(key);
|
||||
struct config_set cs;
|
||||
if (config_file) {
|
||||
git_configset_init(&cs);
|
||||
git_configset_add_file(&cs, config_file);
|
||||
list = git_configset_get_value_multi(&cs, key);
|
||||
} else {
|
||||
list = git_config_get_value_multi(key);
|
||||
}
|
||||
if (list) {
|
||||
for_each_string_list_item(item, list) {
|
||||
if (!strcmp(maintpath, item->string)) {
|
||||
@ -1554,12 +1569,15 @@ static int maintenance_unregister(int argc, const char **argv, const char *prefi
|
||||
|
||||
if (found) {
|
||||
int rc;
|
||||
char *user_config, *xdg_config;
|
||||
git_global_config(&user_config, &xdg_config);
|
||||
if (!user_config)
|
||||
die(_("$HOME not set"));
|
||||
char *user_config = NULL, *xdg_config = NULL;
|
||||
if (!config_file) {
|
||||
git_global_config(&user_config, &xdg_config);
|
||||
config_file = user_config;
|
||||
if (!user_config)
|
||||
die(_("$HOME not set"));
|
||||
}
|
||||
rc = git_config_set_multivar_in_file_gently(
|
||||
user_config, key, NULL, maintpath,
|
||||
config_file, key, NULL, maintpath,
|
||||
CONFIG_FLAGS_MULTI_REPLACE | CONFIG_FLAGS_FIXED_VALUE);
|
||||
free(user_config);
|
||||
free(xdg_config);
|
||||
@ -1572,6 +1590,7 @@ static int maintenance_unregister(int argc, const char **argv, const char *prefi
|
||||
die(_("repository '%s' is not registered"), maintpath);
|
||||
}
|
||||
|
||||
git_configset_clear(&cs);
|
||||
free(maintpath);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user