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

Re: [PATCH v4 0/3] config: allow overriding global/system config

From
Junio C Hamano <gitster@pobox.com>
Date
Apr 13, 2021, 17:49 UTC
Message-ID
<xmqqblaim5vv.fsf@gitster.g>
In-Reply-To
<cover.1618297711.git.ps@pks.im>
Patrick Steinhardt <ps@pks.im> writes:
Show 19 quoted lines
> Compared to v3, I only dropped the special-casing of `/dev/null`. As
> Junio rightly pointed out, the special-casing was incomplete and would
> have required more work to do the right thing for all cases. It can
> still be re-added at a later point if the usecase actually comes up.
>
> Patrick
>
> Patrick Steinhardt (3):
>   config: rename `git_etc_config()`
>   config: unify code paths to get global config paths
>   config: allow overriding of global and system configuration
>
>  Documentation/git-config.txt |  5 +++
>  Documentation/git.txt        | 10 +++++
>  builtin/config.c             |  6 +--
>  config.c                     | 41 +++++++++++++++------
>  config.h                     |  4 +-
>  t/t1300-config.sh            | 71 ++++++++++++++++++++++++++++++++++++
>  6 files changed, 121 insertions(+), 16 deletions(-)

This round looks good to me. Sorry for suggesting the "/dev/null" thing in the first place to lead you into wild goose chase during the last round.

Will queue.  Thanks for working on it.
And thanks for reviewing, everybody.
Show 73 quoted lines
>
> Range-diff against v3:
> 1:  34bdbc27d6 = 1:  34bdbc27d6 config: rename `git_etc_config()`
> 2:  30f18679bd = 2:  30f18679bd config: unify code paths to get global config paths
> 3:  af663640ae ! 3:  d27efc0aa8 config: allow overriding of global and system configuration
>     @@ Commit message
>              - If unset, git continues to use the usual locations.
>      
>              - If set to a specific path, we skip reading the normal
>     -          configuration files and instead take the path.
>     -
>     -        - If set to `/dev/null`, we do not load either global- or
>     -          system-level configuration at all.
>     +          configuration files and instead take the path. By setting the path
>     +          to `/dev/null`, no configuration will be loaded for the respective
>     +          level.
>      
>          This implements the usecase where we want to execute code in a sanitized
>          environment without any potential misconfigurations via `/dev/null`, but
>     @@ Documentation/git.txt: for further details.
>       	Whether to skip reading settings from the system-wide
>       	`$(prefix)/etc/gitconfig` file.  This environment variable can
>      
>     - ## builtin/config.c ##
>     -@@ builtin/config.c: int cmd_config(int argc, const char **argv, const char *prefix)
>     - 		char *user_config, *xdg_config;
>     - 
>     - 		git_global_config(&user_config, &xdg_config);
>     --		if (!user_config)
>     -+		if (!user_config) {
>     -+			if (getenv("GIT_CONFIG_GLOBAL"))
>     -+				die(_("GIT_CONFIG_GLOBAL=/dev/null set"));
>     -+
>     - 			/*
>     - 			 * It is unknown if HOME/.gitconfig exists, so
>     - 			 * we do not know if we should write to XDG
>     -@@ builtin/config.c: int cmd_config(int argc, const char **argv, const char *prefix)
>     - 			 * is set and points at a sane location.
>     - 			 */
>     - 			die(_("$HOME not set"));
>     -+		}
>     - 
>     - 		given_config_source.scope = CONFIG_SCOPE_GLOBAL;
>     - 
>     -
>       ## config.c ##
>      @@ config.c: static int git_config_from_blob_ref(config_fn_t fn,
>       
>       char *git_system_config(void)
>       {
>      +	char *system_config = xstrdup_or_null(getenv("GIT_CONFIG_SYSTEM"));
>     -+	if (system_config) {
>     -+		if (!strcmp(system_config, "/dev/null"))
>     -+			FREE_AND_NULL(system_config);
>     ++	if (system_config)
>      +		return system_config;
>     -+	}
>       	return system_path(ETC_GITCONFIG);
>       }
>       
>     @@ config.c: static int git_config_from_blob_ref(config_fn_t fn,
>      +	char *user_config = xstrdup_or_null(getenv("GIT_CONFIG_GLOBAL"));
>      +	char *xdg_config = NULL;
>      +
>     -+	if (user_config) {
>     -+		if (!strcmp(user_config, "/dev/null"))
>     -+			FREE_AND_NULL(user_config);
>     -+		xdg_config = NULL;
>     -+	} else {
>     ++	if (!user_config) {
>      +		user_config = expand_user_path("~/.gitconfig", 0);
>      +		xdg_config = xdg_config_home("config");
>      +	}
Previous: Jeff KingNext: Patrick Steinhardt
Message 40 of 52 in “config: Introduce GIT_CONFIG_NOGLOBAL”
  1. config: Introduce GIT_CONFIG_NOGLOBALPatrick Steinhardt, Apr 8, 2021
  2. Eric SunshineApr 8, 2021
  3. Junio C HamanoApr 8, 2021
  4. Jeff KingApr 8, 2021
  5. Junio C HamanoApr 8, 2021
  6. Jeff KingApr 9, 2021
  7. Ævar Arnfjörð BjarmasonApr 8, 2021
  8. Ævar Arnfjörð BjarmasonApr 8, 2021
  9. Ævar Arnfjörð BjarmasonApr 8, 2021
  10. Junio C HamanoApr 8, 2021
  11. 0/3 config: allow overriding global/system configPatrick Steinhardt, Apr 9, 2021
  12. 1/3 config: rename `git_etc_config()`Patrick Steinhardt, Apr 9, 2021
  13. Jeff KingApr 9, 2021
  14. 2/3 config: unify code paths to get global config pathsPatrick Steinhardt, Apr 9, 2021
  15. Jeff KingApr 9, 2021
  16. 3/3 config: allow overriding of global and system configurationPatrick Steinhardt, Apr 9, 2021
  17. Jeff KingApr 9, 2021
  18. Patrick SteinhardtApr 12, 2021
  19. Junio C HamanoApr 9, 2021
  20. Jeff KingApr 9, 2021
  21. 0/3 config: allow overriding global/system configPatrick Steinhardt, Apr 12, 2021
  22. 1/3 config: rename `git_etc_config()`Patrick Steinhardt, Apr 12, 2021
  23. 2/3 config: unify code paths to get global config pathsPatrick Steinhardt, Apr 12, 2021
  24. 3/3 config: allow overriding of global and system configurationPatrick Steinhardt, Apr 12, 2021
  25. Junio C HamanoApr 12, 2021
  26. 0/3 config: allow overriding global/system configPatrick Steinhardt, Apr 13, 2021
  27. 1/3 config: rename `git_etc_config()`Patrick Steinhardt, Apr 13, 2021
  28. Jeff KingApr 13, 2021
  29. SZEDER GáborApr 16, 2021
  30. Jeff KingApr 17, 2021
  31. Junio C HamanoApr 17, 2021
  32. Jeff KingApr 18, 2021
  33. Patrick SteinhardtApr 19, 2021
  34. Jeff KingApr 23, 2021
  35. 2/3 config: unify code paths to get global config pathsPatrick Steinhardt, Apr 13, 2021
  36. 3/3 config: allow overriding of global and system configurationPatrick Steinhardt, Apr 13, 2021
  37. Jeff KingApr 13, 2021
  38. Patrick SteinhardtApr 13, 2021
  39. Jeff KingApr 13, 2021
  40. Junio C HamanoApr 13, 2021
  41. Patrick SteinhardtApr 14, 2021
  42. 0/3 config: allow overriding global/system configPatrick Steinhardt, Apr 19, 2021
  43. 1/3 config: rename `git_etc_config()`Patrick Steinhardt, Apr 19, 2021
  44. 2/3 config: unify code paths to get global config pathsPatrick Steinhardt, Apr 19, 2021
  45. 3/3 config: allow overriding of global and system configurationPatrick Steinhardt, Apr 19, 2021
  46. SZEDER GáborApr 21, 2021
  47. SZEDER GáborApr 21, 2021
  48. Patrick SteinhardtApr 22, 2021
  49. t1300: fix unset of GIT_CONFIG_NOSYSTEM leaking into subsequent testsPatrick Steinhardt, Apr 23, 2021
  50. Junio C HamanoApr 19, 2021
  51. Jeff KingApr 23, 2021
  52. config: allow overriding of global and system configurationPatrick Steinhardt, Apr 12, 2021

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.