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

[PATCH 3/4] credential: convert "url" attribute into its parsed subparts

From
Jeff King <peff@peff.net>
Date
Jul 18, 2012, 12:06 UTC
Message-ID
<20120718120626.GC6726@sigill.intra.peff.net>
In-Reply-To
<20120718120307.GA6399@sigill.intra.peff.net>

The git-credential command requires that you feed it a broken-down credential, which means that the client needs to parse a URL itself. Since we have our own URL-parsing routines, we can easily allow the caller to just give us the URL as-is, saving them some code.

Signed-off-by: Jeff King <peff@peff.net>
---
The implementation turned out to be delightfully simple. I stopped short
of adding an "ident" command to git-credential where you could do
something like:
  $ echo https://user@example.com | git credential ident
  protocol=https
  host=example.com
  username=user

since I had no use for it, but it would obviously be an easy one-liner to write (it's just "fill" without the actual fill call).

 Documentation/git-credential.txt | 12 ++++++++++++
 credential.c                     |  2 ++
 2 files changed, 14 insertions(+)
diff --git a/Documentation/git-credential.txt b/Documentation/git-credential.txt
index afd5365..53adee3 100644
--- a/Documentation/git-credential.txt
+++ b/Documentation/git-credential.txt
@@ -140,3 +140,15 @@ Git understands the following attributes:
 `password`::
 
 	The credential's password, if we are asking it to be stored.
+
+`url`::
+
+	When this special attribute is read by `git credential`, the
+	value is parsed as a URL and treated as if its constituent parts
+	were read (e.g., `url=https://example.com` would behave as if
+	`protocol=https` and `host=example.com` had been provided). This
+	can help callers avoid parsing URLs themselves.  Note that any
+	components which are missing from the URL (e.g., there is no
+	username in the example above) will be set to empty; if you want
+	to provide a URL and override some attributes, provide the URL
+	attribute first, followed by any overrides.
diff --git a/credential.c b/credential.c
index 2c40007..e54753c 100644
--- a/credential.c
+++ b/credential.c
@@ -172,6 +172,8 @@ int credential_read(struct credential *c, FILE *fp)
 		} else if (!strcmp(key, "path")) {
 			free(c->path);
 			c->path = xstrdup(value);
+		} else if (!strcmp(key, "url")) {
+			credential_from_url(c, value);
 		}
 		/*
 		 * Ignore other lines; we don't know what they mean, but
-- 
1.7.10.5.40.g059818d
Previous: Jeff KingNext: Matthieu Moy
Message 4 of 14 in “mediawiki/credential cleanups”
  1. 0/4 mediawiki/credential cleanupsJeff King, Jul 18, 2012
  2. 1/4 docs/credential: minor clarity fixupsJeff King, Jul 18, 2012
  3. 2/4 mw-to-git: check blank credential attributes via lengthJeff King, Jul 18, 2012
  4. 3/4 credential: convert "url" attribute into its parsed subpartsJeff King, Jul 18, 2012
  5. Matthieu MoyJul 18, 2012
  6. Jeff KingJul 18, 2012
  7. 4/4 mw-to-git: use git-credential's URL parserJeff King, Jul 18, 2012
  8. Matthieu MoyJul 18, 2012
  9. Jeff KingJul 18, 2012
  10. Matthieu MoyJul 18, 2012
  11. Jeff KingJul 18, 2012
  12. 4/4 mw-to-git: use git-credential's URL parserJeff King, Jul 18, 2012
  13. Matthieu MoyJul 18, 2012
  14. Matthieu MoyJul 18, 2012

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.