From: "Matthew Rogers via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Matthew Rogers <mattr94@gmail.com>
Subject: [PATCH v3 0/4] config: allow user to know scope of config options
Date: Fri, 17 Jan 2020 15:31:38 +0000 [thread overview]
Message-ID: <pull.478.v3.git.1579275102.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.478.v2.git.1578565001.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 v2:
* Redid commit messages for content/clarity
* Minor fixes around using --show-scope with a single value (format_config)
Matthew Rogers (4):
config: fix typo in variable name
config: refine config scope enum
config: clarify meaning of command line scoping
config: add '--show-scope' to print the scope of a config value
Documentation/git-config.txt | 15 +++++---
builtin/config.c | 66 ++++++++++++++++++++++++++++++------
config.c | 15 ++++----
config.h | 19 ++++++-----
remote.c | 3 +-
submodule-config.c | 4 ++-
t/helper/test-config.c | 10 ++++--
t/t1300-config.sh | 58 +++++++++++++++++++++++++++++++
t/t1308-config-set.sh | 2 +-
upload-pack.c | 3 +-
10 files changed, 158 insertions(+), 37 deletions(-)
base-commit: 232378479ee6c66206d47a9be175e3a39682aea6
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-478%2FROGERSM94%2Fadd-config-flags-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-478/ROGERSM94/add-config-flags-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/478
Range-diff vs v2:
1: b40480f03a = 1: f5a81a4d25 config: fix typo in variable name
2: e8e05f3940 ! 2: f06f9291b7 config: fix config scope enum
@@ -1,14 +1,21 @@
Author: Matthew Rogers <mattr94@gmail.com>
- config: fix config scope enum
+ config: refine config scope enum
Previously when iterating through git config variables, worktree config
and local config were both considered "CONFIG_SCOPE_REPO". This was
never a problem before as no one had needed to differentiate between the
- two cases.
+ two cases, but future functionality may care whether or not the config
+ options come from a worktree or from the repository's actual local
+ config file. For example, the planned feature to add a '--show-scope'
+ to config to allow a user to see which scope listed config options come
+ from would confuse users if it just printed 'repo' rather than 'local'
+ or 'worktree' as the documentation would lead them to expect. As well
+ as the additional benefit of making the implementation look more like
+ how the documentation describes the interface.
- Additionally we rename what was CONFIG_SCOPE_REPO to CONFIG_SCOPE_LOCAL
- to reflect its new, more specific meaning.
+ To accomplish this we split out what was previously considered repo
+ scope to be local and worktree.
The clients of 'current_config_scope()' who cared about
CONFIG_SCOPE_REPO are also modified to similarly care about
@@ -82,6 +89,19 @@
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
+@@
+ value=from-cmdline
+ origin=command line
+ name=
+- scope=cmdline
++ scope=command
+ EOF
+ GIT_CONFIG_PARAMETERS=$cmdline_config test-tool config iterate >actual &&
+ test_cmp expect actual
+
diff --git a/upload-pack.c b/upload-pack.c
--- a/upload-pack.c
+++ b/upload-pack.c
3: 8225273546 ! 3: 97b8a7641d config: clarify meaning of command line scoping
@@ -3,11 +3,13 @@
config: clarify meaning of command line scoping
CONFIG_SCOPE_CMDLINE is generally used in the code to refer to config
- values passed in via the -c option. This is a little bit too specific
- as there are other methods to pass config values so that the last for a
- single command (namely --file and --blob). As the "visibility" of config
- values passed by these situations is common, we unify them as having a
- scope of "command" rather than "command line".
+ values passed in via the -c option. Options passed in using this
+ mechanism share similar scoping characteristics with the --file and
+ --blob options of the 'config' command, namely that they are only in use
+ for that single invocation of git, and that they supersede the normal
+ system/global/local hierarchy. This patch introduces
+ CONFIG_SCOPE_COMMAND to reflect this new idea, which also makes
+ CONFIG_SCOPE_CMDLINE redundant.
Signed-off-by: Matthew Rogers <mattr94@gmail.com>
4: 92ce9b7824 ! 4: 61ff3c64b5 config: add '--show-scope' to print the scope of a config value
@@ -76,7 +76,8 @@
strbuf_addch(buf, term);
}
-+static const char *scope_to_string(enum config_scope scope) {
++static const char *scope_to_string(enum config_scope scope)
++{
+ switch (scope) {
+ case CONFIG_SCOPE_LOCAL:
+ return "local";
@@ -95,7 +96,8 @@
+ }
+}
+
-+static void show_config_scope(struct strbuf *buf) {
++static void show_config_scope(struct strbuf *buf)
++{
+ const char term = end_nul ? '\0' : '\t';
+ const char *scope = scope_to_string(current_config_scope());
+
@@ -121,19 +123,10 @@
static int format_config(struct strbuf *buf, const char *key_, const char *value_)
{
+ if (show_scope)
-+ show_config_origin(buf);
++ show_config_scope(buf);
if (show_origin)
show_config_origin(buf);
if (show_keys)
-@@
- int nongit = !startup_info->have_repository;
- char *value;
-
-+
-+
- given_config_source.file = xstrdup_or_null(getenv(CONFIG_ENVIRONMENT));
-
- argc = parse_options(argc, argv, prefix, builtin_config_options,
@@
!strcmp(given_config_source.file, "-")) {
given_config_source.file = NULL;
@@ -286,11 +279,8 @@
+ case CONFIG_SCOPE_SUBMODULE:
+ return "submodule";
case CONFIG_SCOPE_COMMAND:
-- return "command";
-+ return "cmdline";
+ return "command";
default:
- return "unknown";
- }
diff --git a/t/t1300-config.sh b/t/t1300-config.sh
--- a/t/t1300-config.sh
@@ -333,6 +323,14 @@
+ test_cmp expect output
+'
+
++test_expect_success '--show-scope getting a single value' '
++ cat >expect <<-\EOF &&
++ local true
++ EOF
++ git config --show-scope --get user.local >output &&
++ test_cmp expect output
++'
++
+test_expect_success '--show-scope with --show-origin' '
+ cat >expect <<-EOF &&
+ global file:$HOME/.gitconfig user.global=true
--
gitgitgadget
next prev parent reply other threads:[~2020-01-17 15: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 ` Matthew Rogers via GitGitGadget [this message]
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 ` [PATCH v7 00/10] " Matthew Rogers via GitGitGadget
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.v3.git.1579275102.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).