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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.