From: Patrick Steinhardt <ps@pks.im>
To: git@vger.kernel.org
Subject: [PATCH 4/8] builtin/config: move modes into separate functions
Date: Wed, 6 Mar 2024 12:31:46 +0100 [thread overview]
Message-ID: <b258f31b7d9d7bb104175b7dedc3e13506cea9e9.1709724089.git.ps@pks.im> (raw)
In-Reply-To: <cover.1709724089.git.ps@pks.im>
[-- Attachment #1: Type: text/plain, Size: 15126 bytes --]
The git-config(1) command has several different modes which cause it to
do different things. The logic for each of these modes is hosted in a
giant switch in `cmd_config()` itself. For one, this is hard to read.
But second, we're about to introduce proper subcommands to git-config(1)
that will require separate functions for each of the modes.
Refactor the code and move each mode into its own function to prepare
for this.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
builtin/config.c | 410 +++++++++++++++++++++++++++++------------------
1 file changed, 255 insertions(+), 155 deletions(-)
diff --git a/builtin/config.c b/builtin/config.c
index 8a2d1a5de7..a6ab9b8204 100644
--- a/builtin/config.c
+++ b/builtin/config.c
@@ -44,6 +44,7 @@ static struct config_options config_options;
static int show_origin;
static int show_scope;
static int fixed_value;
+static int config_flags;
#define ACTION_GET (1<<0)
#define ACTION_GET_ALL (1<<1)
@@ -622,6 +623,225 @@ static char *default_user_config(void)
return strbuf_detach(&buf, NULL);
}
+static int cmd_config_list(int argc, const char **argv, const char *prefix)
+{
+ check_argc(argc, 0, 0);
+ if (config_with_options(show_all_config, NULL,
+ &given_config_source, the_repository,
+ &config_options) < 0) {
+ if (given_config_source.file)
+ die_errno(_("unable to read config file '%s'"),
+ given_config_source.file);
+ else
+ die(_("error processing config file(s)"));
+ }
+
+ return 0;
+}
+
+static int cmd_config_edit(int argc, const char **argv, const char *prefix)
+{
+ char *config_file;
+
+ check_argc(argc, 0, 0);
+ if (!given_config_source.file && !startup_info->have_repository)
+ die(_("not in a git directory"));
+ if (given_config_source.use_stdin)
+ die(_("editing stdin is not supported"));
+ if (given_config_source.blob)
+ die(_("editing blobs is not supported"));
+ git_config(git_default_config, NULL);
+ config_file = given_config_source.file ?
+ xstrdup(given_config_source.file) :
+ git_pathdup("config");
+ if (use_global_config) {
+ int fd = open(config_file, O_CREAT | O_EXCL | O_WRONLY, 0666);
+ if (fd >= 0) {
+ char *content = default_user_config();
+ write_str_in_full(fd, content);
+ free(content);
+ close(fd);
+ }
+ else if (errno != EEXIST)
+ die_errno(_("cannot create configuration file %s"), config_file);
+ }
+ launch_editor(config_file, NULL, NULL);
+ free(config_file);
+
+ return 0;
+}
+
+static int cmd_config_set(int argc, const char **argv, const char *prefix)
+{
+ struct key_value_info default_kvi = KVI_INIT;
+ char *value = NULL;
+ int ret;
+
+ check_write();
+ check_argc(argc, 2, 2);
+ value = normalize_value(argv[0], argv[1], &default_kvi);
+ ret = git_config_set_in_file_gently(given_config_source.file, argv[0], value);
+ if (ret == CONFIG_NOTHING_SET)
+ error(_("cannot overwrite multiple values with a single value\n"
+ " Use a regexp, --add or --replace-all to change %s."), argv[0]);
+
+ free(value);
+ return ret;
+}
+
+static int cmd_config_set_all(int argc, const char **argv, const char *prefix)
+{
+ struct key_value_info default_kvi = KVI_INIT;
+ char *value = NULL;
+ int ret;
+
+ check_write();
+ check_argc(argc, 2, 3);
+ value = normalize_value(argv[0], argv[1], &default_kvi);
+ ret = git_config_set_multivar_in_file_gently(given_config_source.file,
+ argv[0], value, argv[2],
+ config_flags);
+
+ free(value);
+ return ret;
+}
+
+static int cmd_config_add(int argc, const char **argv, const char *prefix)
+{
+ struct key_value_info default_kvi = KVI_INIT;
+ char *value = NULL;
+ int ret;
+
+ check_write();
+ check_argc(argc, 2, 2);
+ value = normalize_value(argv[0], argv[1], &default_kvi);
+ ret = git_config_set_multivar_in_file_gently(given_config_source.file,
+ argv[0], value,
+ CONFIG_REGEX_NONE,
+ config_flags);
+
+ free(value);
+ return ret;
+}
+
+static int cmd_config_replace_all(int argc, const char **argv, const char *prefix)
+{
+ struct key_value_info default_kvi = KVI_INIT;
+ char *value = NULL;
+ int ret;
+
+ check_write();
+ check_argc(argc, 2, 3);
+ value = normalize_value(argv[0], argv[1], &default_kvi);
+ ret = git_config_set_multivar_in_file_gently(given_config_source.file,
+ argv[0], value, argv[2],
+ config_flags | CONFIG_FLAGS_MULTI_REPLACE);
+
+ free(value);
+ return ret;
+}
+
+static int cmd_config_get(int argc, const char **argv, const char *prefix)
+{
+ check_argc(argc, 1, 2);
+ return get_value(argv[0], argv[1], config_flags);
+}
+
+static int cmd_config_get_all(int argc, const char **argv, const char *prefix)
+{
+ do_all = 1;
+ check_argc(argc, 1, 2);
+ return get_value(argv[0], argv[1], config_flags);
+}
+
+static int cmd_config_get_regexp(int argc, const char **argv, const char *prefix)
+{
+ show_keys = 1;
+ use_key_regexp = 1;
+ do_all = 1;
+ check_argc(argc, 1, 2);
+ return get_value(argv[0], argv[1], config_flags);
+}
+
+static int cmd_config_get_urlmatch(int argc, const char **argv, const char *prefix)
+{
+ check_argc(argc, 2, 2);
+ return get_urlmatch(argv[0], argv[1]);
+}
+
+static int cmd_config_unset(int argc, const char **argv, const char *prefix)
+{
+ check_write();
+ check_argc(argc, 1, 2);
+ if (argc == 2)
+ return git_config_set_multivar_in_file_gently(given_config_source.file,
+ argv[0], NULL, argv[1],
+ config_flags);
+ else
+ return git_config_set_in_file_gently(given_config_source.file,
+ argv[0], NULL);
+}
+
+static int cmd_config_unset_all(int argc, const char **argv, const char *prefix)
+{
+ check_write();
+ check_argc(argc, 1, 2);
+ return git_config_set_multivar_in_file_gently(given_config_source.file,
+ argv[0], NULL, argv[1],
+ config_flags | CONFIG_FLAGS_MULTI_REPLACE);
+}
+
+static int cmd_config_rename_section(int argc, const char **argv, const char *prefix)
+{
+ int ret;
+
+ check_write();
+ check_argc(argc, 2, 2);
+ ret = git_config_rename_section_in_file(given_config_source.file,
+ argv[0], argv[1]);
+ if (ret < 0)
+ return ret;
+ else if (!ret)
+ die(_("no such section: %s"), argv[0]);
+ else
+ ret = 0;
+
+ return ret;
+}
+
+static int cmd_config_remove_section(int argc, const char **argv, const char *prefix)
+{
+ int ret;
+
+ check_write();
+ check_argc(argc, 1, 1);
+ ret = git_config_rename_section_in_file(given_config_source.file,
+ argv[0], NULL);
+ if (ret < 0)
+ return ret;
+ else if (!ret)
+ die(_("no such section: %s"), argv[0]);
+ else
+ ret = 0;
+
+ return ret;
+}
+
+static int cmd_config_get_color(int argc, const char **argv, const char *prefix)
+{
+ check_argc(argc, 1, 2);
+ get_color(argv[0], argv[1]);
+ return 0;
+}
+
+static int cmd_config_get_colorbool(int argc, const char **argv, const char *prefix)
+{
+ check_argc(argc, 1, 2);
+ if (argc == 2)
+ color_stdout_is_tty = git_config_bool("command line", argv[1]);
+ return get_colorbool(argv[0], argc == 2);
+}
+
static struct option builtin_config_options[] = {
OPT_GROUP(N_("Config file location")),
OPT_BOOL(0, "global", &use_global_config, N_("use global config file")),
@@ -671,12 +891,6 @@ static NORETURN void usage_builtin_config(void)
int cmd_config(int argc, const char **argv, const char *prefix)
{
- int nongit = !startup_info->have_repository;
- char *value = NULL;
- int flags = 0;
- int ret = 0;
- struct key_value_info default_kvi = KVI_INIT;
-
given_config_source.file = xstrdup_or_null(getenv(CONFIG_ENVIRONMENT));
argc = parse_options(argc, argv, prefix, builtin_config_options,
@@ -690,7 +904,7 @@ int cmd_config(int argc, const char **argv, const char *prefix)
usage_builtin_config();
}
- if (nongit) {
+ if (!startup_info->have_repository) {
if (use_local_config)
die(_("--local can only be used inside a git repository"));
if (given_config_source.blob)
@@ -751,7 +965,7 @@ int cmd_config(int argc, const char **argv, const char *prefix)
config_options.respect_includes = !given_config_source.file;
else
config_options.respect_includes = respect_includes_opt;
- if (!nongit) {
+ if (startup_info->have_repository) {
config_options.commondir = get_git_common_dir();
config_options.git_dir = get_git_dir();
}
@@ -826,159 +1040,45 @@ int cmd_config(int argc, const char **argv, const char *prefix)
usage_builtin_config();
}
- flags |= CONFIG_FLAGS_FIXED_VALUE;
+ config_flags |= CONFIG_FLAGS_FIXED_VALUE;
}
if (actions & PAGING_ACTIONS)
setup_auto_pager("config", 1);
if (actions == ACTION_LIST) {
- check_argc(argc, 0, 0);
- if (config_with_options(show_all_config, NULL,
- &given_config_source, the_repository,
- &config_options) < 0) {
- if (given_config_source.file)
- die_errno(_("unable to read config file '%s'"),
- given_config_source.file);
- else
- die(_("error processing config file(s)"));
- }
+ return cmd_config_list(argc, argv, prefix);
+ } else if (actions == ACTION_EDIT) {
+ return cmd_config_edit(argc, argv, prefix);
+ } else if (actions == ACTION_SET) {
+ return cmd_config_set(argc, argv, prefix);
+ } else if (actions == ACTION_SET_ALL) {
+ return cmd_config_set_all(argc, argv, prefix);
+ } else if (actions == ACTION_ADD) {
+ return cmd_config_add(argc, argv, prefix);
+ } else if (actions == ACTION_REPLACE_ALL) {
+ return cmd_config_replace_all(argc, argv, prefix);
+ } else if (actions == ACTION_GET) {
+ return cmd_config_get(argc, argv, prefix);
+ } else if (actions == ACTION_GET_ALL) {
+ return cmd_config_get_all(argc, argv, prefix);
+ } else if (actions == ACTION_GET_REGEXP) {
+ return cmd_config_get_regexp(argc, argv, prefix);
+ } else if (actions == ACTION_GET_URLMATCH) {
+ return cmd_config_get_urlmatch(argc, argv, prefix);
+ } else if (actions == ACTION_UNSET) {
+ return cmd_config_unset(argc, argv, prefix);
+ } else if (actions == ACTION_UNSET_ALL) {
+ return cmd_config_unset_all(argc, argv, prefix);
+ } else if (actions == ACTION_RENAME_SECTION) {
+ return cmd_config_rename_section(argc, argv, prefix);
+ } else if (actions == ACTION_REMOVE_SECTION) {
+ return cmd_config_remove_section(argc, argv, prefix);
+ } else if (actions == ACTION_GET_COLOR) {
+ return cmd_config_get_color(argc, argv, prefix);
+ } else if (actions == ACTION_GET_COLORBOOL) {
+ return cmd_config_get_colorbool(argc, argv, prefix);
}
- else if (actions == ACTION_EDIT) {
- char *config_file;
- check_argc(argc, 0, 0);
- if (!given_config_source.file && nongit)
- die(_("not in a git directory"));
- if (given_config_source.use_stdin)
- die(_("editing stdin is not supported"));
- if (given_config_source.blob)
- die(_("editing blobs is not supported"));
- git_config(git_default_config, NULL);
- config_file = given_config_source.file ?
- xstrdup(given_config_source.file) :
- git_pathdup("config");
- if (use_global_config) {
- int fd = open(config_file, O_CREAT | O_EXCL | O_WRONLY, 0666);
- if (fd >= 0) {
- char *content = default_user_config();
- write_str_in_full(fd, content);
- free(content);
- close(fd);
- }
- else if (errno != EEXIST)
- die_errno(_("cannot create configuration file %s"), config_file);
- }
- launch_editor(config_file, NULL, NULL);
- free(config_file);
- }
- else if (actions == ACTION_SET) {
- check_write();
- check_argc(argc, 2, 2);
- value = normalize_value(argv[0], argv[1], &default_kvi);
- ret = git_config_set_in_file_gently(given_config_source.file, argv[0], value);
- if (ret == CONFIG_NOTHING_SET)
- error(_("cannot overwrite multiple values with a single value\n"
- " Use a regexp, --add or --replace-all to change %s."), argv[0]);
- }
- else if (actions == ACTION_SET_ALL) {
- check_write();
- check_argc(argc, 2, 3);
- value = normalize_value(argv[0], argv[1], &default_kvi);
- ret = git_config_set_multivar_in_file_gently(given_config_source.file,
- argv[0], value, argv[2],
- flags);
- }
- else if (actions == ACTION_ADD) {
- check_write();
- check_argc(argc, 2, 2);
- value = normalize_value(argv[0], argv[1], &default_kvi);
- ret = git_config_set_multivar_in_file_gently(given_config_source.file,
- argv[0], value,
- CONFIG_REGEX_NONE,
- flags);
- }
- else if (actions == ACTION_REPLACE_ALL) {
- check_write();
- check_argc(argc, 2, 3);
- value = normalize_value(argv[0], argv[1], &default_kvi);
- ret = git_config_set_multivar_in_file_gently(given_config_source.file,
- argv[0], value, argv[2],
- flags | CONFIG_FLAGS_MULTI_REPLACE);
- }
- else if (actions == ACTION_GET) {
- check_argc(argc, 1, 2);
- return get_value(argv[0], argv[1], flags);
- }
- else if (actions == ACTION_GET_ALL) {
- do_all = 1;
- check_argc(argc, 1, 2);
- return get_value(argv[0], argv[1], flags);
- }
- else if (actions == ACTION_GET_REGEXP) {
- show_keys = 1;
- use_key_regexp = 1;
- do_all = 1;
- check_argc(argc, 1, 2);
- return get_value(argv[0], argv[1], flags);
- }
- else if (actions == ACTION_GET_URLMATCH) {
- check_argc(argc, 2, 2);
- return get_urlmatch(argv[0], argv[1]);
- }
- else if (actions == ACTION_UNSET) {
- check_write();
- check_argc(argc, 1, 2);
- if (argc == 2)
- return git_config_set_multivar_in_file_gently(given_config_source.file,
- argv[0], NULL, argv[1],
- flags);
- else
- return git_config_set_in_file_gently(given_config_source.file,
- argv[0], NULL);
- }
- else if (actions == ACTION_UNSET_ALL) {
- check_write();
- check_argc(argc, 1, 2);
- return git_config_set_multivar_in_file_gently(given_config_source.file,
- argv[0], NULL, argv[1],
- flags | CONFIG_FLAGS_MULTI_REPLACE);
- }
- else if (actions == ACTION_RENAME_SECTION) {
- check_write();
- check_argc(argc, 2, 2);
- ret = git_config_rename_section_in_file(given_config_source.file,
- argv[0], argv[1]);
- if (ret < 0)
- return ret;
- else if (!ret)
- die(_("no such section: %s"), argv[0]);
- else
- ret = 0;
- }
- else if (actions == ACTION_REMOVE_SECTION) {
- check_write();
- check_argc(argc, 1, 1);
- ret = git_config_rename_section_in_file(given_config_source.file,
- argv[0], NULL);
- if (ret < 0)
- return ret;
- else if (!ret)
- die(_("no such section: %s"), argv[0]);
- else
- ret = 0;
- }
- else if (actions == ACTION_GET_COLOR) {
- check_argc(argc, 1, 2);
- get_color(argv[0], argv[1]);
- }
- else if (actions == ACTION_GET_COLORBOOL) {
- check_argc(argc, 1, 2);
- if (argc == 2)
- color_stdout_is_tty = git_config_bool("command line", argv[1]);
- return get_colorbool(argv[0], argc == 2);
- }
-
- free(value);
- return ret;
+ BUG("invalid action");
}
--
2.44.0
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2024-03-06 11:32 UTC|newest]
Thread overview: 113+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-06 11:31 [PATCH 0/8] builtin/config: introduce subcommands Patrick Steinhardt
2024-03-06 11:31 ` [PATCH 1/8] builtin/config: move option array around Patrick Steinhardt
2024-03-06 11:31 ` [PATCH 2/8] builtin/config: move "fixed-value" option to correct group Patrick Steinhardt
2024-03-06 11:31 ` [PATCH 3/8] builtin/config: use `OPT_CMDMODE()` to specify modes Patrick Steinhardt
2024-03-06 23:52 ` Taylor Blau
2024-03-07 7:02 ` Patrick Steinhardt
2024-03-06 11:31 ` Patrick Steinhardt [this message]
2024-03-06 11:31 ` [PATCH 5/8] builtin/config: track subcommands by action Patrick Steinhardt
2024-03-06 21:54 ` Jean-Noël AVILA
2024-03-07 6:37 ` Patrick Steinhardt
2024-03-07 0:10 ` Taylor Blau
2024-03-07 6:36 ` Patrick Steinhardt
2024-03-06 11:31 ` [PATCH 6/8] builtin/config: introduce subcommands Patrick Steinhardt
2024-03-06 21:38 ` Karthik Nayak
2024-03-07 7:14 ` Patrick Steinhardt
2024-03-06 11:31 ` [PATCH 7/8] t1300: exercise both old- and new-style modes Patrick Steinhardt
2024-03-06 11:32 ` [PATCH 8/8] Documentation/git-config: update to new-style syntax Patrick Steinhardt
2024-03-07 6:57 ` Eric Sunshine
2024-03-07 7:33 ` Patrick Steinhardt
2024-03-06 17:06 ` [PATCH 0/8] builtin/config: introduce subcommands Junio C Hamano
2024-03-06 23:46 ` Taylor Blau
2024-03-06 23:52 ` Junio C Hamano
2024-03-07 0:13 ` Taylor Blau
2024-03-07 0:31 ` Dragan Simic
2024-03-07 6:31 ` Patrick Steinhardt
2024-03-07 13:22 ` Junio C Hamano
2024-03-06 22:49 ` Kristoffer Haugsbakk
2024-03-11 23:19 ` [PATCH v2 00/13] " Patrick Steinhardt
2024-03-11 23:19 ` [PATCH v2 01/13] builtin/config: move option array around Patrick Steinhardt
2024-03-11 23:19 ` [PATCH v2 02/13] builtin/config: move "fixed-value" option to correct group Patrick Steinhardt
2024-03-11 23:20 ` [PATCH v2 03/13] builtin/config: use `OPT_CMDMODE()` to specify modes Patrick Steinhardt
2024-03-11 23:20 ` [PATCH v2 04/13] builtin/config: pull out function to handle config location Patrick Steinhardt
2024-03-11 23:20 ` [PATCH v2 05/13] builtin/config: pull out function to handle `--null` Patrick Steinhardt
2024-03-11 23:20 ` [PATCH v2 06/13] builtin/config: introduce "list" subcommand Patrick Steinhardt
2024-03-13 2:45 ` Eric Sunshine
2024-03-27 8:42 ` Patrick Steinhardt
2024-03-11 23:20 ` [PATCH v2 07/13] builtin/config: introduce "get" subcommand Patrick Steinhardt
2024-03-13 3:11 ` Eric Sunshine
2024-03-27 8:42 ` Patrick Steinhardt
2024-03-11 23:20 ` [PATCH v2 08/13] builtin/config: introduce "set" subcommand Patrick Steinhardt
2024-03-11 23:21 ` [PATCH v2 09/13] builtin/config: introduce "unset" subcommand Patrick Steinhardt
2024-03-11 23:21 ` [PATCH v2 10/13] builtin/config: introduce "rename-section" subcommand Patrick Steinhardt
2024-03-11 23:21 ` [PATCH v2 11/13] builtin/config: introduce "remove-section" subcommand Patrick Steinhardt
2024-03-11 23:21 ` [PATCH v2 12/13] builtin/config: introduce "edit" subcommand Patrick Steinhardt
2024-03-11 23:21 ` [PATCH v2 13/13] builtin/config: display subcommand help Patrick Steinhardt
2024-03-27 8:46 ` [PATCH v3 00/13] builtin/config: introduce subcommands Patrick Steinhardt
2024-03-27 8:46 ` [PATCH v3 01/13] builtin/config: move option array around Patrick Steinhardt
2024-03-27 8:46 ` [PATCH v3 02/13] builtin/config: move "fixed-value" option to correct group Patrick Steinhardt
2024-03-27 8:46 ` [PATCH v3 03/13] builtin/config: use `OPT_CMDMODE()` to specify modes Patrick Steinhardt
2024-03-27 8:46 ` [PATCH v3 04/13] builtin/config: pull out function to handle config location Patrick Steinhardt
2024-03-27 8:46 ` [PATCH v3 05/13] builtin/config: pull out function to handle `--null` Patrick Steinhardt
2024-03-27 8:46 ` [PATCH v3 06/13] builtin/config: introduce "list" subcommand Patrick Steinhardt
2024-03-27 8:46 ` [PATCH v3 07/13] builtin/config: introduce "get" subcommand Patrick Steinhardt
2024-03-27 8:46 ` [PATCH v3 08/13] builtin/config: introduce "set" subcommand Patrick Steinhardt
2024-03-27 8:46 ` [PATCH v3 09/13] builtin/config: introduce "unset" subcommand Patrick Steinhardt
2024-03-27 8:46 ` [PATCH v3 10/13] builtin/config: introduce "rename-section" subcommand Patrick Steinhardt
2024-03-27 8:46 ` [PATCH v3 11/13] builtin/config: introduce "remove-section" subcommand Patrick Steinhardt
2024-03-27 8:46 ` [PATCH v3 12/13] builtin/config: introduce "edit" subcommand Patrick Steinhardt
2024-03-27 8:47 ` [PATCH v3 13/13] builtin/config: display subcommand help Patrick Steinhardt
2024-03-27 8:53 ` [PATCH v3 00/13] builtin/config: introduce subcommands Eric Sunshine
2024-03-27 9:16 ` Patrick Steinhardt
2024-05-03 9:56 ` [PATCH v4 00/14] " Patrick Steinhardt
2024-05-03 9:56 ` [PATCH v4 01/14] config: clarify memory ownership when preparing comment strings Patrick Steinhardt
2024-05-03 10:13 ` Kristoffer Haugsbakk
2024-05-03 9:56 ` [PATCH v4 02/14] builtin/config: move option array around Patrick Steinhardt
2024-05-03 9:56 ` [PATCH v4 03/14] builtin/config: move "fixed-value" option to correct group Patrick Steinhardt
2024-05-03 12:28 ` Karthik Nayak
2024-05-06 9:34 ` Patrick Steinhardt
2024-05-03 9:57 ` [PATCH v4 04/14] builtin/config: use `OPT_CMDMODE()` to specify modes Patrick Steinhardt
2024-05-03 9:57 ` [PATCH v4 05/14] builtin/config: pull out function to handle config location Patrick Steinhardt
2024-05-03 9:57 ` [PATCH v4 06/14] builtin/config: pull out function to handle `--null` Patrick Steinhardt
2024-05-03 9:57 ` [PATCH v4 07/14] builtin/config: introduce "list" subcommand Patrick Steinhardt
2024-05-03 13:08 ` Karthik Nayak
2024-05-03 13:13 ` rsbecker
2024-05-03 16:01 ` Junio C Hamano
2024-05-06 7:51 ` Patrick Steinhardt
2024-05-06 17:13 ` Junio C Hamano
2024-05-06 18:33 ` rsbecker
2024-05-06 18:45 ` Dragan Simic
2024-05-07 6:20 ` Kristoffer Haugsbakk
2024-05-06 21:33 ` Git 3.0? Junio C Hamano
2024-05-07 4:18 ` Patrick Steinhardt
2024-05-07 4:02 ` [PATCH v4 07/14] builtin/config: introduce "list" subcommand Patrick Steinhardt
2024-05-06 7:58 ` Patrick Steinhardt
2024-05-06 11:26 ` Karthik Nayak
2024-05-03 9:57 ` [PATCH v4 08/14] builtin/config: introduce "get" subcommand Patrick Steinhardt
2024-05-03 9:57 ` [PATCH v4 09/14] builtin/config: introduce "set" subcommand Patrick Steinhardt
2024-05-03 9:57 ` [PATCH v4 10/14] builtin/config: introduce "unset" subcommand Patrick Steinhardt
2024-05-03 9:57 ` [PATCH v4 11/14] builtin/config: introduce "rename-section" subcommand Patrick Steinhardt
2024-05-03 9:57 ` [PATCH v4 12/14] builtin/config: introduce "remove-section" subcommand Patrick Steinhardt
2024-05-03 9:57 ` [PATCH v4 13/14] builtin/config: introduce "edit" subcommand Patrick Steinhardt
2024-05-03 9:57 ` [PATCH v4 14/14] builtin/config: display subcommand help Patrick Steinhardt
2024-05-03 13:36 ` [PATCH v4 00/14] builtin/config: introduce subcommands Dragan Simic
2024-05-03 16:09 ` Junio C Hamano
2024-05-06 8:55 ` [PATCH v5 " Patrick Steinhardt
2024-05-06 8:55 ` [PATCH v5 01/14] config: clarify memory ownership when preparing comment strings Patrick Steinhardt
2024-05-06 8:56 ` [PATCH v5 02/14] builtin/config: move option array around Patrick Steinhardt
2024-05-06 8:56 ` [PATCH v5 03/14] builtin/config: move "fixed-value" option to correct group Patrick Steinhardt
2024-05-06 8:56 ` [PATCH v5 04/14] builtin/config: use `OPT_CMDMODE()` to specify modes Patrick Steinhardt
2024-05-06 8:56 ` [PATCH v5 05/14] builtin/config: pull out function to handle config location Patrick Steinhardt
2024-05-06 8:56 ` [PATCH v5 06/14] builtin/config: pull out function to handle `--null` Patrick Steinhardt
2024-05-06 8:56 ` [PATCH v5 07/14] builtin/config: introduce "list" subcommand Patrick Steinhardt
2024-05-06 8:56 ` [PATCH v5 08/14] builtin/config: introduce "get" subcommand Patrick Steinhardt
2024-05-06 8:56 ` [PATCH v5 09/14] builtin/config: introduce "set" subcommand Patrick Steinhardt
2024-05-06 8:56 ` [PATCH v5 10/14] builtin/config: introduce "unset" subcommand Patrick Steinhardt
2024-05-06 8:56 ` [PATCH v5 11/14] builtin/config: introduce "rename-section" subcommand Patrick Steinhardt
2024-05-06 8:56 ` [PATCH v5 12/14] builtin/config: introduce "remove-section" subcommand Patrick Steinhardt
2024-05-06 8:56 ` [PATCH v5 13/14] builtin/config: introduce "edit" subcommand Patrick Steinhardt
2024-05-06 8:56 ` [PATCH v5 14/14] builtin/config: display subcommand help Patrick Steinhardt
2024-05-06 11:30 ` [PATCH v5 00/14] builtin/config: introduce subcommands Karthik Nayak
2024-05-06 20:21 ` Taylor Blau
2024-05-06 20:38 ` rsbecker
2024-05-07 4:07 ` Patrick Steinhardt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b258f31b7d9d7bb104175b7dedc3e13506cea9e9.1709724089.git.ps@pks.im \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).