From: "Matthew Rogers via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Matthew Rogers <mattr94@gmail.com>
Subject: [PATCH v7 00/10] config: allow user to know scope of config options
Date: Mon, 10 Feb 2020 00:30:49 +0000 [thread overview]
Message-ID: <pull.478.v7.git.1581294660.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.478.v6.git.1580268865.gitgitgadget@gmail.com>
This was originally a pull request to the git-for-windows repository
[https://github.com/git-for-windows/git/pull/2399]. It adds a new option
--show-scope which would allow a user to see what scope a given
configuration value has (sytem, local, global, etc.).
changes since v6: Split patch 6: config: add '--show-scope'... into several
parts, including moving the exposure of config_scope_name into its own
commit earlier in the series.
Matthew Rogers (10):
config: fix typo in variable name
t1300: fix over-indented HERE-DOCs
t1300: create custom config file without special characters
config: make scope_name non-static and rename it
config: split repo scope to local and worktree
config: clarify meaning of command line scoping
config: preserve scope in do_git_config_sequence
config: teach git_config_source to remember its scope
submodule-config: add subomdule config scope
config: add '--show-scope' to print the scope of a config value
Documentation/git-config.txt | 15 ++-
builtin/config.c | 46 +++++--
config.c | 35 ++++-
config.h | 20 +--
remote.c | 3 +-
submodule-config.c | 4 +-
t/helper/test-config.c | 17 +--
t/t1300-config.sh | 240 ++++++++++++++++++++++-------------
t/t1308-config-set.sh | 4 +-
upload-pack.c | 3 +-
10 files changed, 248 insertions(+), 139 deletions(-)
base-commit: de93cc14ab7e8db7645d8dbe4fd2603f76d5851f
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-478%2FROGERSM94%2Fadd-config-flags-v7
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-478/ROGERSM94/add-config-flags-v7
Pull-Request: https://github.com/gitgitgadget/git/pull/478
Range-diff vs v6:
1: 18f92f70cf = 1: 1c4faa7a36 config: fix typo in variable name
2: dc7b3f3b96 = 2: 2c38c72f89 t1300: fix over-indented HERE-DOCs
3: 975e652368 = 3: c832293ca7 t1300: create custom config file without special characters
-: ---------- > 4: 14b0f27819 config: make scope_name non-static and rename it
4: 1e406ba430 ! 5: 1af0237b8e config: split repo scope to local and worktree
@@ -45,6 +45,19 @@
if (!opts->ignore_worktree && repository_format_worktree_config) {
char *path = git_pathdup("config.worktree");
if (!access_or_die(path, R_OK, 0))
+@@
+ return "system";
+ case CONFIG_SCOPE_GLOBAL:
+ return "global";
+- case CONFIG_SCOPE_REPO:
+- return "repo";
++ case CONFIG_SCOPE_LOCAL:
++ return "local";
++ case CONFIG_SCOPE_WORKTREE:
++ return "worktree";
+ case CONFIG_SCOPE_CMDLINE:
+ return "command line";
+ default:
diff --git a/config.h b/config.h
--- a/config.h
@@ -58,7 +71,7 @@
+ CONFIG_SCOPE_WORKTREE,
CONFIG_SCOPE_CMDLINE,
};
-
+ const char *config_scope_name(enum config_scope scope);
diff --git a/remote.c b/remote.c
--- a/remote.c
@@ -74,23 +87,6 @@
if (!strcmp(subkey, "mirror"))
remote->mirror = git_config_bool(key, value);
- diff --git a/t/helper/test-config.c b/t/helper/test-config.c
- --- a/t/helper/test-config.c
- +++ b/t/helper/test-config.c
-@@
- return "system";
- case CONFIG_SCOPE_GLOBAL:
- return "global";
-- case CONFIG_SCOPE_REPO:
-- return "repo";
-+ case CONFIG_SCOPE_LOCAL:
-+ return "local";
-+ case CONFIG_SCOPE_WORKTREE:
-+ return "worktree";
- case CONFIG_SCOPE_CMDLINE:
- return "cmdline";
- default:
-
diff --git a/t/t1308-config-set.sh b/t/t1308-config-set.sh
--- a/t/t1308-config-set.sh
+++ b/t/t1308-config-set.sh
5: 936ce91c62 ! 6: 64c20d0556 config: clarify meaning of command line scoping
@@ -26,6 +26,17 @@
if (!opts->ignore_cmdline && git_config_from_parameters(fn, data) < 0)
die(_("unable to parse command-line config"));
+@@
+ return "local";
+ case CONFIG_SCOPE_WORKTREE:
+ return "worktree";
+- case CONFIG_SCOPE_CMDLINE:
+- return "command line";
++ case CONFIG_SCOPE_COMMAND:
++ return "command";
+ default:
+ return "unknown";
+ }
diff --git a/config.h b/config.h
--- a/config.h
@@ -37,23 +48,8 @@
- CONFIG_SCOPE_CMDLINE,
+ CONFIG_SCOPE_COMMAND,
};
+ const char *config_scope_name(enum config_scope scope);
- enum config_scope current_config_scope(void);
-
- diff --git a/t/helper/test-config.c b/t/helper/test-config.c
- --- a/t/helper/test-config.c
- +++ b/t/helper/test-config.c
-@@
- return "local";
- case CONFIG_SCOPE_WORKTREE:
- return "worktree";
-- case CONFIG_SCOPE_CMDLINE:
-- return "cmdline";
-+ case CONFIG_SCOPE_COMMAND:
-+ return "command";
- default:
- return "unknown";
- }
diff --git a/t/t1308-config-set.sh b/t/t1308-config-set.sh
--- a/t/t1308-config-set.sh
@@ -62,7 +58,7 @@
value=from-cmdline
origin=command line
name=
-- scope=cmdline
+- scope=command line
+ scope=command
EOF
GIT_CONFIG_PARAMETERS=$cmdline_config test-tool config iterate >actual &&
-: ---------- > 7: f61985375c config: preserve scope in do_git_config_sequence
-: ---------- > 8: 6c59c5cace config: teach git_config_source to remember its scope
-: ---------- > 9: dd376246ec submodule-config: add subomdule config scope
6: fc141e8689 ! 10: f76463ee90 config: add '--show-scope' to print the scope of a config value
@@ -12,7 +12,6 @@
parsing the '.gitmodules' file.
Signed-off-by: Matthew Rogers <mattr94@gmail.com>
- Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt
--- a/Documentation/git-config.txt
@@ -108,212 +107,6 @@
if (show_origin)
show_config_origin(buf);
if (show_keys)
-@@
- !strcmp(given_config_source.file, "-")) {
- given_config_source.file = NULL;
- given_config_source.use_stdin = 1;
-+ given_config_source.scope = CONFIG_SCOPE_COMMAND;
- }
-
- if (use_global_config) {
-@@
- */
- die(_("$HOME not set"));
-
-+ given_config_source.scope = CONFIG_SCOPE_GLOBAL;
-+
- if (access_or_warn(user_config, R_OK, 0) &&
- xdg_config && !access_or_warn(xdg_config, R_OK, 0)) {
- given_config_source.file = xdg_config;
-@@
- free(xdg_config);
- }
- }
-- else if (use_system_config)
-+ else if (use_system_config) {
- given_config_source.file = git_etc_gitconfig();
-- else if (use_local_config)
-+ given_config_source.scope = CONFIG_SCOPE_SYSTEM;
-+ } else if (use_local_config) {
- given_config_source.file = git_pathdup("config");
-- else if (use_worktree_config) {
-+ given_config_source.scope = CONFIG_SCOPE_LOCAL;
-+ } else if (use_worktree_config) {
- struct worktree **worktrees = get_worktrees(0);
- if (repository_format_worktree_config)
- given_config_source.file = git_pathdup("config.worktree");
-@@
- "section in \"git help worktree\" for details"));
- else
- given_config_source.file = git_pathdup("config");
-+ given_config_source.scope = CONFIG_SCOPE_LOCAL;
- free_worktrees(worktrees);
- } else if (given_config_source.file) {
- if (!is_absolute_path(given_config_source.file) && prefix)
- given_config_source.file =
- prefix_filename(prefix, given_config_source.file);
-+ given_config_source.scope = CONFIG_SCOPE_COMMAND;
-+ } else if (given_config_source.blob) {
-+ given_config_source.scope = CONFIG_SCOPE_COMMAND;
- }
-
-+
- if (respect_includes_opt == -1)
- config_options.respect_includes = !given_config_source.file;
- else
-
- diff --git a/config.c b/config.c
- --- a/config.c
- +++ b/config.c
-@@
- char *xdg_config = xdg_config_home("config");
- char *user_config = expand_user_path("~/.gitconfig", 0);
- char *repo_config;
-+ enum config_scope prev_parsing_scope = current_parsing_scope;
-
- if (opts->commondir)
- repo_config = mkpathdup("%s/config", opts->commondir);
-@@
- if (!opts->ignore_cmdline && git_config_from_parameters(fn, data) < 0)
- die(_("unable to parse command-line config"));
-
-- current_parsing_scope = CONFIG_SCOPE_UNKNOWN;
-+ current_parsing_scope = prev_parsing_scope;
- free(xdg_config);
- free(user_config);
- free(repo_config);
-@@
- data = &inc;
- }
-
-+ if (config_source)
-+ current_parsing_scope = config_source->scope;
-+
- /*
- * If we have a specific filename, use it. Otherwise, follow the
- * regular lookup sequence.
-@@
- }
- }
-
-+const char *config_scope_name(enum config_scope scope)
-+{
-+ switch (scope) {
-+ case CONFIG_SCOPE_SYSTEM:
-+ return "system";
-+ case CONFIG_SCOPE_GLOBAL:
-+ return "global";
-+ case CONFIG_SCOPE_LOCAL:
-+ return "local";
-+ case CONFIG_SCOPE_WORKTREE:
-+ return "worktree";
-+ case CONFIG_SCOPE_COMMAND:
-+ return "command";
-+ case CONFIG_SCOPE_SUBMODULE:
-+ return "submodule";
-+ default:
-+ return "unknown";
-+ }
-+}
-+
- const char *current_config_name(void)
- {
- const char *name;
-
- diff --git a/config.h b/config.h
- --- a/config.h
- +++ b/config.h
-@@
-
- #define CONFIG_REGEX_NONE ((void *)1)
-
-+enum config_scope {
-+ CONFIG_SCOPE_UNKNOWN = 0,
-+ CONFIG_SCOPE_SYSTEM,
-+ CONFIG_SCOPE_GLOBAL,
-+ CONFIG_SCOPE_LOCAL,
-+ CONFIG_SCOPE_WORKTREE,
-+ CONFIG_SCOPE_COMMAND,
-+ CONFIG_SCOPE_SUBMODULE,
-+};
-+const char *config_scope_name(enum config_scope scope);
-+
- struct git_config_source {
- unsigned int use_stdin:1;
- const char *file;
- const char *blob;
-+ enum config_scope scope;
- };
-
- enum config_origin_type {
-@@
-
- int git_config_parse_parameter(const char *, config_fn_t fn, void *data);
-
--enum config_scope {
-- CONFIG_SCOPE_UNKNOWN = 0,
-- CONFIG_SCOPE_SYSTEM,
-- CONFIG_SCOPE_GLOBAL,
-- CONFIG_SCOPE_LOCAL,
-- CONFIG_SCOPE_WORKTREE,
-- CONFIG_SCOPE_COMMAND,
--};
--
- enum config_scope current_config_scope(void);
- const char *current_config_origin_type(void);
- const char *current_config_name(void);
-
- diff --git a/submodule-config.c b/submodule-config.c
- --- a/submodule-config.c
- +++ b/submodule-config.c
-@@
- static void config_from_gitmodules(config_fn_t fn, struct repository *repo, void *data)
- {
- if (repo->worktree) {
-- struct git_config_source config_source = { 0 };
-+ struct git_config_source config_source = {
-+ 0, .scope = CONFIG_SCOPE_SUBMODULE
-+ };
- const struct config_options opts = { 0 };
- struct object_id oid;
- char *file;
-
- diff --git a/t/helper/test-config.c b/t/helper/test-config.c
- --- a/t/helper/test-config.c
- +++ b/t/helper/test-config.c
-@@
- *
- */
-
--static const char *scope_name(enum config_scope scope)
--{
-- switch (scope) {
-- case CONFIG_SCOPE_SYSTEM:
-- return "system";
-- case CONFIG_SCOPE_GLOBAL:
-- return "global";
-- case CONFIG_SCOPE_LOCAL:
-- return "local";
-- case CONFIG_SCOPE_WORKTREE:
-- return "worktree";
-- case CONFIG_SCOPE_COMMAND:
-- return "command";
-- default:
-- return "unknown";
-- }
--}
- static int iterate_cb(const char *var, const char *value, void *data)
- {
- static int nr;
-@@
- printf("value=%s\n", value ? value : "(null)");
- printf("origin=%s\n", current_config_origin_type());
- printf("name=%s\n", current_config_name());
-- printf("scope=%s\n", scope_name(current_config_scope()));
-+ printf("scope=%s\n", config_scope_name(current_config_scope()));
-
- return 0;
- }
diff --git a/t/t1300-config.sh b/t/t1300-config.sh
--- a/t/t1300-config.sh
--
gitgitgadget
next prev parent reply other threads:[~2020-02-10 0:31 UTC|newest]
Thread overview: 98+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-18 1:11 [PATCH 0/1] config: allow user to know scope of config options Matthew Rogers via GitGitGadget
2019-12-18 1:11 ` [PATCH 1/1] " Matthew Rogers via GitGitGadget
2019-12-18 19:46 ` Junio C Hamano
2019-12-19 5:05 ` Jeff King
2019-12-19 17:51 ` Junio C Hamano
2019-12-18 22:45 ` Philip Oakley
2019-12-19 0:12 ` mattr94
2019-12-19 17:56 ` Junio C Hamano
2019-12-20 22:58 ` Matt Rogers
2019-12-21 2:37 ` Junio C Hamano
2019-12-21 3:08 ` Matt Rogers
2019-12-21 23:47 ` Junio C Hamano
2020-01-09 10:16 ` [PATCH v2 0/4] " Matthew Rogers via GitGitGadget
2020-01-09 10:16 ` [PATCH v2 1/4] config: fix typo in variable name Matthew Rogers via GitGitGadget
2020-01-09 19:07 ` Junio C Hamano
2020-01-09 23:22 ` Matt Rogers
2020-01-10 11:55 ` Jeff King
2020-01-09 10:16 ` [PATCH v2 2/4] config: fix config scope enum Matthew Rogers via GitGitGadget
2020-01-09 19:06 ` Junio C Hamano
2020-01-09 23:29 ` Matt Rogers
2020-01-09 10:16 ` [PATCH v2 3/4] config: clarify meaning of command line scoping Matthew Rogers via GitGitGadget
2020-01-09 19:13 ` Junio C Hamano
2020-01-09 23:41 ` Matt Rogers
2020-01-09 10:16 ` [PATCH v2 4/4] config: add '--show-scope' to print the scope of a config value Matthew Rogers via GitGitGadget
2020-01-09 19:50 ` Junio C Hamano
2020-01-09 23:47 ` Matt Rogers
2020-01-17 15:31 ` [PATCH v3 0/4] config: allow user to know scope of config options Matthew Rogers via GitGitGadget
2020-01-17 15:31 ` [PATCH v3 1/4] config: fix typo in variable name Matthew Rogers via GitGitGadget
2020-01-17 15:31 ` [PATCH v3 2/4] config: refine config scope enum Matthew Rogers via GitGitGadget
2020-01-17 20:44 ` Junio C Hamano
2020-01-18 15:27 ` Matt Rogers
2020-01-18 18:09 ` Junio C Hamano
2020-01-17 15:31 ` [PATCH v3 3/4] config: clarify meaning of command line scoping Matthew Rogers via GitGitGadget
2020-01-17 21:00 ` Junio C Hamano
2020-01-18 15:33 ` Matt Rogers
2020-01-17 15:31 ` [PATCH v3 4/4] config: add '--show-scope' to print the scope of a config value Matthew Rogers via GitGitGadget
2020-01-17 21:21 ` Junio C Hamano
2020-01-17 21:26 ` Bert Wesarg
2020-01-18 15:42 ` Matt Rogers
2020-01-24 0:21 ` [PATCH v4 0/6] config: allow user to know scope of config options Matthew Rogers via GitGitGadget
2020-01-24 0:21 ` [PATCH v4 1/6] config: fix typo in variable name Matthew Rogers via GitGitGadget
2020-01-24 0:21 ` [PATCH v4 2/6] t1300: fix over-indented HERE-DOCs Matthew Rogers via GitGitGadget
2020-01-24 18:43 ` Junio C Hamano
2020-01-24 0:21 ` [PATCH v4 3/6] t1300: create custom config file without special characters Matthew Rogers via GitGitGadget
2020-01-24 18:45 ` Junio C Hamano
2020-01-24 0:21 ` [PATCH v4 4/6] config: split repo scope to local and worktree Matthew Rogers via GitGitGadget
2020-01-24 18:49 ` Junio C Hamano
2020-01-24 19:09 ` Junio C Hamano
2020-01-24 0:21 ` [PATCH v4 5/6] config: clarify meaning of command line scoping Matthew Rogers via GitGitGadget
2020-01-24 0:21 ` [PATCH v4 6/6] config: add '--show-scope' to print the scope of a config value Matthew Rogers via GitGitGadget
2020-01-24 19:18 ` Junio C Hamano
2020-01-24 20:22 ` Junio C Hamano
2020-01-24 20:49 ` Matt Rogers
2020-01-25 0:10 ` Junio C Hamano
2020-01-24 19:22 ` [PATCH v4 0/6] config: allow user to know scope of config options Junio C Hamano
2020-01-25 0:39 ` [PATCH v5 " Matthew Rogers via GitGitGadget
2020-01-25 0:39 ` [PATCH v5 1/6] config: fix typo in variable name Matthew Rogers via GitGitGadget
2020-01-25 0:39 ` [PATCH v5 2/6] t1300: fix over-indented HERE-DOCs Matthew Rogers via GitGitGadget
2020-01-25 0:39 ` [PATCH v5 3/6] t1300: create custom config file without special characters Matthew Rogers via GitGitGadget
2020-01-25 0:39 ` [PATCH v5 4/6] config: split repo scope to local and worktree Matthew Rogers via GitGitGadget
2020-01-27 23:09 ` Junio C Hamano
2020-01-25 0:39 ` [PATCH v5 5/6] config: clarify meaning of command line scoping Matthew Rogers via GitGitGadget
2020-01-25 0:39 ` [PATCH v5 6/6] config: add '--show-scope' to print the scope of a config value Matthew Rogers via GitGitGadget
2020-01-27 23:12 ` Junio C Hamano
2020-01-28 1:31 ` Matt Rogers
2020-01-29 3:34 ` [PATCH v6 0/6] config: allow user to know scope of config options Matthew Rogers via GitGitGadget
2020-01-29 3:34 ` [PATCH v6 1/6] config: fix typo in variable name Matthew Rogers via GitGitGadget
2020-01-29 3:34 ` [PATCH v6 2/6] t1300: fix over-indented HERE-DOCs Matthew Rogers via GitGitGadget
2020-01-29 3:34 ` [PATCH v6 3/6] t1300: create custom config file without special characters Matthew Rogers via GitGitGadget
2020-01-29 3:34 ` [PATCH v6 4/6] config: split repo scope to local and worktree Matthew Rogers via GitGitGadget
2020-01-29 3:34 ` [PATCH v6 5/6] config: clarify meaning of command line scoping Matthew Rogers via GitGitGadget
2020-01-29 3:34 ` [PATCH v6 6/6] config: add '--show-scope' to print the scope of a config value Matthew Rogers via GitGitGadget
2020-01-29 9:08 ` Bert Wesarg
2020-01-29 23:03 ` Matt Rogers
2020-02-05 19:01 ` Junio C Hamano
2020-01-29 5:29 ` [PATCH v6 0/6] config: allow user to know scope of config options Junio C Hamano
2020-02-10 0:30 ` Matthew Rogers via GitGitGadget [this message]
2020-02-10 0:30 ` [PATCH v7 01/10] config: fix typo in variable name Matthew Rogers via GitGitGadget
2020-02-10 0:30 ` [PATCH v7 02/10] t1300: fix over-indented HERE-DOCs Matthew Rogers via GitGitGadget
2020-02-10 0:30 ` [PATCH v7 03/10] t1300: create custom config file without special characters Matthew Rogers via GitGitGadget
2020-02-10 0:30 ` [PATCH v7 04/10] config: make scope_name non-static and rename it Matthew Rogers via GitGitGadget
2020-02-10 18:02 ` Junio C Hamano
2020-02-10 21:25 ` Junio C Hamano
2020-02-11 0:30 ` Matt Rogers
2020-02-11 1:58 ` Emily Shaffer
2020-02-11 6:10 ` Junio C Hamano
2020-02-11 12:37 ` Matt Rogers
2020-02-10 0:30 ` [PATCH v7 05/10] config: split repo scope to local and worktree Matthew Rogers via GitGitGadget
2020-02-10 18:07 ` Junio C Hamano
2020-02-10 0:30 ` [PATCH v7 06/10] config: clarify meaning of command line scoping Matthew Rogers via GitGitGadget
2020-02-10 18:10 ` Junio C Hamano
2020-02-10 0:30 ` [PATCH v7 07/10] config: preserve scope in do_git_config_sequence Matthew Rogers via GitGitGadget
2020-02-10 18:11 ` Junio C Hamano
2020-02-10 0:30 ` [PATCH v7 08/10] config: teach git_config_source to remember its scope Matthew Rogers via GitGitGadget
2020-02-10 18:14 ` Junio C Hamano
2020-02-10 0:30 ` [PATCH v7 09/10] submodule-config: add subomdule config scope Matthew Rogers via GitGitGadget
2020-02-10 18:15 ` Junio C Hamano
2020-02-10 0:30 ` [PATCH v7 10/10] config: add '--show-scope' to print the scope of a config value Matthew Rogers via GitGitGadget
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.478.v7.git.1581294660.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=mattr94@gmail.com \
/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.
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 NNTP newsgroup(s).