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

[PATCH v4 2/4] git-credential-store: support XDG_CONFIG_HOME

From
Paul Tan <pyokagan@gmail.com>
Date
Mar 18, 2015, 07:04 UTC
Message-ID
<1426662276-8728-2-git-send-email-pyokagan@gmail.com>
In-Reply-To
<1426662276-8728-1-git-send-email-pyokagan@gmail.com>

Add $XDG_CONFIG_HOME/git/credentials to the default credential search path of git-credential-store. This allows git-credential-store to support user-specific configuration files in accordance with the XDG base directory specification[1].

[1] http://standards.freedesktop.org/basedir-spec/basedir-spec-0.7.html

~/.git-credentials has a higher precedence than $XDG_CONFIG_HOME/git/credentials when looking up credentials. This means that if any duplicate matching credentials are found in the xdg file (due to ~/.git-credentials being updated by old versions of git or outdated tools), they will not be used at all. This is to give the user some leeway in switching to old versions of git while keeping the xdg directory. This is consistent with the behavior of git-config.

However, the higher precedence of ~/.git-credentials means that as long as ~/.git-credentials exist, all credentials will be written to the ~/.git-credentials file even if the user has an xdg file as having a ~/.git-credentials file indicates that the user wants to preserve backwards-compatibility. This is also consistent with the behavior of git-config.

Since the xdg file will not be used unless it actually exists, to prevent the situation where some credentials are present in the xdg file while some are present in the home file, users are recommended to not create the xdg file if they require compatibility with old versions of git or outdated tools. Note, though, that "erase" can be used to explicitly erase matching credentials from all files.

Helped-by: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Paul Tan <pyokagan@gmail.com>
---
The previous version can be found at [1].
[1] http://thread.gmane.org/gmane.comp.version-control.git/265305/focus=265308
There are no changes in this version.
 credential-store.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/credential-store.c b/credential-store.c
index 8dad479..d805df7 100644
--- a/credential-store.c
+++ b/credential-store.c
@@ -163,11 +163,16 @@ int main(int argc, char **argv)
 		usage_with_options(usage, options);
 	op = argv[0];
 
-	if (!file)
-		file = expand_user_path("~/.git-credentials");
-	if (file)
+	if (file) {
 		string_list_append(&fns, file);
-	else
+	} else {
+		if ((file = expand_user_path("~/.git-credentials")))
+			string_list_append_nodup(&fns, file);
+		home_config_paths(NULL, &file, "credentials");
+		if (file)
+			string_list_append_nodup(&fns, file);
+	}
+	if (!fns.nr)
 		die("unable to set up default path; use --file");
 
 	if (credential_read(&c, stdin) < 0)
-- 
2.1.4
Previous: Paul TanNext: Paul Tan
Message 2 of 15 in “git-credential-store: support multiple credential files”
  1. 1/4 git-credential-store: support multiple credential filesPaul Tan, Mar 18, 2015
  2. 2/4 git-credential-store: support XDG_CONFIG_HOMEPaul Tan, Mar 18, 2015
  3. 3/4 docs/git-credential-store: document XDG file and precedencePaul Tan, Mar 18, 2015
  4. Matthieu MoyMar 18, 2015
  5. Paul TanMar 21, 2015
  6. 4/4 t0302: test credential-store support for XDG_CONFIG_HOMEPaul Tan, Mar 18, 2015
  7. Matthieu MoyMar 18, 2015
  8. Eric SunshineMar 18, 2015
  9. Matthieu MoyMar 19, 2015
  10. Paul TanMar 21, 2015
  11. Eric SunshineMar 18, 2015
  12. Eric SunshineMar 19, 2015
  13. Paul TanMar 21, 2015
  14. Eric SunshineMar 23, 2015
  15. Matthieu MoyMar 18, 2015

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.