git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v7 05/10] config: split repo scope to local and worktree

From
MGMatthew Rogers via GitGitGadget <gitgitgadget@gmail.com>
Date
Feb 10, 2020, 00:30 UTC
Message-ID
<1af0237b8e76f0fd84ccac1e29d0cdc326303d7e.1581294660.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.478.v7.git.1581294660.gitgitgadget@gmail.com>
From: Matthew Rogers <mattr94@gmail.com>

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, 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.

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 CONFIG_SCOPE_WORKTREE and CONFIG_SCOPE_LOCAL to preserve previous behavior.

Signed-off-by: Matthew Rogers <mattr94@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 config.c              | 13 ++++++-------
 config.h              |  3 ++-
 remote.c              |  3 ++-
 t/t1308-config-set.sh |  2 +-
 upload-pack.c         |  3 ++-
 5 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/config.c b/config.c
index 83bb98d65e..7422bdebb1 100644
--- a/config.c
+++ b/config.c
@@ -1724,15 +1724,12 @@ static int do_git_config_sequence(const struct config_options *opts,
 	if (user_config && !access_or_die(user_config, R_OK, ACCESS_EACCES_OK))
 		ret += git_config_from_file(fn, user_config, data);
 
-	current_parsing_scope = CONFIG_SCOPE_REPO;
+	current_parsing_scope = CONFIG_SCOPE_LOCAL;
 	if (!opts->ignore_repo && repo_config &&
 	    !access_or_die(repo_config, R_OK, 0))
 		ret += git_config_from_file(fn, repo_config, data);
 
-	/*
-	 * Note: this should have a new scope, CONFIG_SCOPE_WORKTREE.
-	 * But let's not complicate things before it's actually needed.
-	 */
+	current_parsing_scope = CONFIG_SCOPE_WORKTREE;
 	if (!opts->ignore_worktree && repository_format_worktree_config) {
 		char *path = git_pathdup("config.worktree");
 		if (!access_or_die(path, R_OK, 0))
@@ -3304,8 +3301,10 @@ const char *config_scope_name(enum config_scope scope)
 		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
index dcb8c274d4..d3ed41ef8e 100644
--- a/config.h
+++ b/config.h
@@ -299,7 +299,8 @@ enum config_scope {
 	CONFIG_SCOPE_UNKNOWN = 0,
 	CONFIG_SCOPE_SYSTEM,
 	CONFIG_SCOPE_GLOBAL,
-	CONFIG_SCOPE_REPO,
+	CONFIG_SCOPE_LOCAL,
+	CONFIG_SCOPE_WORKTREE,
 	CONFIG_SCOPE_CMDLINE,
 };
 const char *config_scope_name(enum config_scope scope);
diff --git a/remote.c b/remote.c
index 5c4666b53a..593ce297ed 100644
--- a/remote.c
+++ b/remote.c
@@ -369,7 +369,8 @@ static int handle_config(const char *key, const char *value, void *cb)
 	}
 	remote = make_remote(name, namelen);
 	remote->origin = REMOTE_CONFIG;
-	if (current_config_scope() == CONFIG_SCOPE_REPO)
+	if (current_config_scope() == CONFIG_SCOPE_LOCAL ||
+	current_config_scope() == CONFIG_SCOPE_WORKTREE)
 		remote->configured_in_repo = 1;
 	if (!strcmp(subkey, "mirror"))
 		remote->mirror = git_config_bool(key, value);
diff --git a/t/t1308-config-set.sh b/t/t1308-config-set.sh
index 5f3e71a160..728a2b87ce 100755
--- a/t/t1308-config-set.sh
+++ b/t/t1308-config-set.sh
@@ -259,7 +259,7 @@ test_expect_success 'iteration shows correct origins' '
 	value=from-repo
 	origin=file
 	name=.git/config
-	scope=repo
+	scope=local
 
 	key=foo.bar
 	value=from-cmdline
diff --git a/upload-pack.c b/upload-pack.c
index a00d7ece6b..c53249cac1 100644
--- a/upload-pack.c
+++ b/upload-pack.c
@@ -1073,7 +1073,8 @@ static int upload_pack_config(const char *var, const char *value, void *unused)
 		precomposed_unicode = git_config_bool(var, value);
 	}
 
-	if (current_config_scope() != CONFIG_SCOPE_REPO) {
+	if (current_config_scope() != CONFIG_SCOPE_LOCAL &&
+	current_config_scope() != CONFIG_SCOPE_WORKTREE) {
 		if (!strcmp("uploadpack.packobjectshook", var))
 			return git_config_string(&pack_objects_hook, var, value);
 	}
-- 
gitgitgadget
Previous: Matthew Rogers via GitGitGadgetNext: Junio C Hamano
Message 80 of 98 in “config: allow user to know scope of config options”
  1. 0/1 config: allow user to know scope of config optionsMatthew Rogers via GitGitGadget, Dec 18, 2019
  2. 1/1 config: allow user to know scope of config optionsMatthew Rogers via GitGitGadget, Dec 18, 2019
  3. Junio C HamanoDec 18, 2019
  4. Jeff KingDec 19, 2019
  5. Junio C HamanoDec 19, 2019
  6. Philip OakleyDec 18, 2019
  7. mattr94@gmail.comDec 19, 2019
  8. Junio C HamanoDec 19, 2019
  9. Matt RogersDec 20, 2019
  10. Junio C HamanoDec 21, 2019
  11. Matt RogersDec 21, 2019
  12. Junio C HamanoDec 21, 2019
  13. 0/4 config: allow user to know scope of config optionsMatthew Rogers via GitGitGadget, Jan 9, 2020
  14. 1/4 config: fix typo in variable nameMatthew Rogers via GitGitGadget, Jan 9, 2020
  15. Junio C HamanoJan 9, 2020
  16. Matt RogersJan 9, 2020
  17. Jeff KingJan 10, 2020
  18. 2/4 config: fix config scope enumMatthew Rogers via GitGitGadget, Jan 9, 2020
  19. Junio C HamanoJan 9, 2020
  20. Matt RogersJan 9, 2020
  21. 3/4 config: clarify meaning of command line scopingMatthew Rogers via GitGitGadget, Jan 9, 2020
  22. Junio C HamanoJan 9, 2020
  23. Matt RogersJan 9, 2020
  24. 4/4 config: add '--show-scope' to print the scope of a config valueMatthew Rogers via GitGitGadget, Jan 9, 2020
  25. Junio C HamanoJan 9, 2020
  26. Matt RogersJan 9, 2020
  27. 0/4 config: allow user to know scope of config optionsMatthew Rogers via GitGitGadget, Jan 17, 2020
  28. 1/4 config: fix typo in variable nameMatthew Rogers via GitGitGadget, Jan 17, 2020
  29. 3/4 config: clarify meaning of command line scopingMatthew Rogers via GitGitGadget, Jan 17, 2020
  30. Junio C HamanoJan 17, 2020
  31. Matt RogersJan 18, 2020
  32. 4/4 config: add '--show-scope' to print the scope of a config valueMatthew Rogers via GitGitGadget, Jan 17, 2020
  33. Junio C HamanoJan 17, 2020
  34. Bert WesargJan 17, 2020
  35. Matt RogersJan 18, 2020
  36. 2/4 config: refine config scope enumMatthew Rogers via GitGitGadget, Jan 17, 2020
  37. Junio C HamanoJan 17, 2020
  38. Matt RogersJan 18, 2020
  39. Junio C HamanoJan 18, 2020
  40. 0/6 config: allow user to know scope of config optionsMatthew Rogers via GitGitGadget, Jan 24, 2020
  41. 1/6 config: fix typo in variable nameMatthew Rogers via GitGitGadget, Jan 24, 2020
  42. 2/6 t1300: fix over-indented HERE-DOCsMatthew Rogers via GitGitGadget, Jan 24, 2020
  43. Junio C HamanoJan 24, 2020
  44. 3/6 t1300: create custom config file without special charactersMatthew Rogers via GitGitGadget, Jan 24, 2020
  45. Junio C HamanoJan 24, 2020
  46. 5/6 config: clarify meaning of command line scopingMatthew Rogers via GitGitGadget, Jan 24, 2020
  47. 4/6 config: split repo scope to local and worktreeMatthew Rogers via GitGitGadget, Jan 24, 2020
  48. Junio C HamanoJan 24, 2020
  49. Junio C HamanoJan 24, 2020
  50. 6/6 config: add '--show-scope' to print the scope of a config valueMatthew Rogers via GitGitGadget, Jan 24, 2020
  51. Junio C HamanoJan 24, 2020
  52. Junio C HamanoJan 24, 2020
  53. Matt RogersJan 24, 2020
  54. Junio C HamanoJan 25, 2020
  55. Junio C HamanoJan 24, 2020
  56. 0/6 config: allow user to know scope of config optionsMatthew Rogers via GitGitGadget, Jan 25, 2020
  57. 1/6 config: fix typo in variable nameMatthew Rogers via GitGitGadget, Jan 25, 2020
  58. 3/6 t1300: create custom config file without special charactersMatthew Rogers via GitGitGadget, Jan 25, 2020
  59. 2/6 t1300: fix over-indented HERE-DOCsMatthew Rogers via GitGitGadget, Jan 25, 2020
  60. 5/6 config: clarify meaning of command line scopingMatthew Rogers via GitGitGadget, Jan 25, 2020
  61. 4/6 config: split repo scope to local and worktreeMatthew Rogers via GitGitGadget, Jan 25, 2020
  62. Junio C HamanoJan 27, 2020
  63. 6/6 config: add '--show-scope' to print the scope of a config valueMatthew Rogers via GitGitGadget, Jan 25, 2020
  64. Junio C HamanoJan 27, 2020
  65. Matt RogersJan 28, 2020
  66. 0/6 config: allow user to know scope of config optionsMatthew Rogers via GitGitGadget, Jan 29, 2020
  67. 1/6 config: fix typo in variable nameMatthew Rogers via GitGitGadget, Jan 29, 2020
  68. 3/6 t1300: create custom config file without special charactersMatthew Rogers via GitGitGadget, Jan 29, 2020
  69. 2/6 t1300: fix over-indented HERE-DOCsMatthew Rogers via GitGitGadget, Jan 29, 2020
  70. 5/6 config: clarify meaning of command line scopingMatthew Rogers via GitGitGadget, Jan 29, 2020
  71. 4/6 config: split repo scope to local and worktreeMatthew Rogers via GitGitGadget, Jan 29, 2020
  72. 6/6 config: add '--show-scope' to print the scope of a config valueMatthew Rogers via GitGitGadget, Jan 29, 2020
  73. Bert WesargJan 29, 2020
  74. Matt RogersJan 29, 2020
  75. Junio C HamanoFeb 5, 2020
  76. Junio C HamanoJan 29, 2020
  77. 00/10 config: allow user to know scope of config optionsMatthew Rogers via GitGitGadget, Feb 10, 2020
  78. 01/10 config: fix typo in variable nameMatthew Rogers via GitGitGadget, Feb 10, 2020
  79. 03/10 t1300: create custom config file without special charactersMatthew Rogers via GitGitGadget, Feb 10, 2020
  80. 05/10 config: split repo scope to local and worktreeMatthew Rogers via GitGitGadget, Feb 10, 2020
  81. Junio C HamanoFeb 10, 2020
  82. 02/10 t1300: fix over-indented HERE-DOCsMatthew Rogers via GitGitGadget, Feb 10, 2020
  83. 07/10 config: preserve scope in do_git_config_sequenceMatthew Rogers via GitGitGadget, Feb 10, 2020
  84. Junio C HamanoFeb 10, 2020
  85. 06/10 config: clarify meaning of command line scopingMatthew Rogers via GitGitGadget, Feb 10, 2020
  86. Junio C HamanoFeb 10, 2020
  87. 10/10 config: add '--show-scope' to print the scope of a config valueMatthew Rogers via GitGitGadget, Feb 10, 2020
  88. 09/10 submodule-config: add subomdule config scopeMatthew Rogers via GitGitGadget, Feb 10, 2020
  89. Junio C HamanoFeb 10, 2020
  90. 08/10 config: teach git_config_source to remember its scopeMatthew Rogers via GitGitGadget, Feb 10, 2020
  91. Junio C HamanoFeb 10, 2020
  92. 04/10 config: make scope_name non-static and rename itMatthew Rogers via GitGitGadget, Feb 10, 2020
  93. Junio C HamanoFeb 10, 2020
  94. Junio C HamanoFeb 10, 2020
  95. Matt RogersFeb 11, 2020
  96. Emily ShafferFeb 11, 2020
  97. Junio C HamanoFeb 11, 2020
  98. Matt RogersFeb 11, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.