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

[PATCH 01/13] ident: split setup_ident into separate functions

From
Jeff King <peff@peff.net>
Date
May 18, 2012, 23:07 UTC
Message-ID
<20120518230710.GA30031@sigill.intra.peff.net>
In-Reply-To
<20120518230528.GA30510@sigill.intra.peff.net>

This function sets up the default name, email, and date, and is not publicly available. Let's split it into three public functions so that callers can get just the parts they need.

While we're at it, let's change the interface to simple accessors. The original function was called only by fmt_ident, and contained logic for "if we already have some other value, don't load the default" which properly belongs in fmt_ident.

Signed-off-by: Jeff King <peff@peff.net>
---
The patch is a pain to read because it's splitting an existing function
in 3; just reading the result is much easier.
 cache.h |  3 +++
 ident.c | 35 +++++++++++++++++++----------------
 2 files changed, 22 insertions(+), 16 deletions(-)
diff --git a/cache.h b/cache.h
index e14ffcd..0c095d4 100644
--- a/cache.h
+++ b/cache.h
@@ -894,6 +894,9 @@ extern const char *git_author_info(int);
 extern const char *git_committer_info(int);
 extern const char *fmt_ident(const char *name, const char *email, const char *date_str, int);
 extern const char *fmt_name(const char *name, const char *email);
+extern const char *ident_default_name(void);
+extern const char *ident_default_email(void);
+extern const char *ident_default_date(void);
 extern const char *git_editor(void);
 extern const char *git_pager(int stdout_is_tty);
 
diff --git a/ident.c b/ident.c
index 87c697c..0f7dcae 100644
--- a/ident.c
+++ b/ident.c
@@ -117,21 +117,20 @@ static void copy_email(const struct passwd *pw)
 			sizeof(git_default_email) - len);
 }
 
-static void setup_ident(const char **name, const char **emailp)
+const char *ident_default_name(void)
 {
-	struct passwd *pw = NULL;
-
-	/* Get the name ("gecos") */
-	if (!*name && !git_default_name[0]) {
-		pw = getpwuid(getuid());
+	if (!git_default_name[0]) {
+		struct passwd *pw = getpwuid(getuid());
 		if (!pw)
 			die("You don't exist. Go away!");
 		copy_gecos(pw, git_default_name, sizeof(git_default_name));
 	}
-	if (!*name)
-		*name = git_default_name;
+	return git_default_name;
+}
 
-	if (!*emailp && !git_default_email[0]) {
+const char *ident_default_email(void)
+{
+	if (!git_default_email[0]) {
 		const char *email = getenv("EMAIL");
 
 		if (email && email[0]) {
@@ -139,19 +138,20 @@ static void setup_ident(const char **name, const char **emailp)
 				sizeof(git_default_email));
 			user_ident_explicitly_given |= IDENT_MAIL_GIVEN;
 		} else {
-			if (!pw)
-				pw = getpwuid(getuid());
+			struct passwd *pw = getpwuid(getuid());
 			if (!pw)
 				die("You don't exist. Go away!");
 			copy_email(pw);
 		}
 	}
-	if (!*emailp)
-		*emailp = git_default_email;
+	return git_default_email;
+}
 
-	/* And set the default date */
+const char *ident_default_date(void)
+{
 	if (!git_default_date[0])
 		datestamp(git_default_date, sizeof(git_default_date));
+	return git_default_date;
 }
 
 static int add_raw(char *buf, size_t size, int offset, const char *str)
@@ -311,7 +311,10 @@ const char *fmt_ident(const char *name, const char *email,
 	int warn_on_no_name = (flag & IDENT_WARN_ON_NO_NAME);
 	int name_addr_only = (flag & IDENT_NO_DATE);
 
-	setup_ident(&name, &email);
+	if (!name)
+		name = ident_default_name();
+	if (!email)
+		email = ident_default_email();
 
 	if (!*name) {
 		struct passwd *pw;
@@ -331,7 +334,7 @@ const char *fmt_ident(const char *name, const char *email,
 		name = git_default_name;
 	}
 
-	strcpy(date, git_default_date);
+	strcpy(date, ident_default_date());
 	if (!name_addr_only && date_str && date_str[0]) {
 		if (parse_date(date_str, date, sizeof(date)) < 0)
 			die("invalid date format: %s", date_str);
-- 
1.7.10.1.16.g53a707b
Previous: Jeff KingNext: Jeff King
Message 2 of 45 in “ident cleanups and bugfixes”
  1. 0/13 ident cleanups and bugfixesJeff King, May 18, 2012
  2. 01/13 ident: split setup_ident into separate functionsJeff King, May 18, 2012
  3. 02/13 http-push: do not access git_default_email directlyJeff King, May 18, 2012
  4. 03/13 fmt-merge-msg: don't use static buffer in record_personJeff King, May 18, 2012
  5. 04/13 move identity config parsing to ident.cJeff King, May 18, 2012
  6. 05/13 move git_default_* variables to ident.cJeff King, May 18, 2012
  7. Junio C HamanoMay 21, 2012
  8. Jeff KingMay 21, 2012
  9. Jeff KingMay 21, 2012
  10. 06/13 format-patch: use default email for generating message idsJeff King, May 18, 2012
  11. Junio C HamanoMay 21, 2012
  12. Jeff KingMay 21, 2012
  13. 07/13 fmt_ident: drop IDENT_WARN_ON_NO_NAME codeJeff King, May 18, 2012
  14. 08/13 ident: don't write fallback username into git_default_nameJeff King, May 18, 2012
  15. Junio C HamanoMay 21, 2012
  16. Jeff KingMay 21, 2012
  17. Junio C HamanoMay 21, 2012
  18. 0/15 ident cleanups git_default_nameJeff King, May 21, 2012
  19. 01/15 ident: split setup_ident into separate functionsJeff King, May 21, 2012
  20. 02/15 http-push: do not access git_default_email directlyJeff King, May 21, 2012
  21. 03/15 fmt-merge-msg: don't use static buffer in record_personJeff King, May 21, 2012
  22. 04/15 move identity config parsing to ident.cJeff King, May 21, 2012
  23. 05/15 move git_default_* variables to ident.cJeff King, May 21, 2012
  24. 06/15 ident: trim trailing newline from /etc/mailnameJeff King, May 21, 2012
  25. 07/15 format-patch: use default email for generating message idsJeff King, May 21, 2012
  26. 08/15 fmt_ident: drop IDENT_WARN_ON_NO_NAME codeJeff King, May 21, 2012
  27. 09/15 ident: don't write fallback username into git_default_nameJeff King, May 21, 2012
  28. 10/15 drop length limitations on gecos-derived names and emailsJeff King, May 21, 2012
  29. [regression] Re: [PATCHv2 10/15] drop length limitations on gecos-derived names and emailsJonathan Nieder, Jan 24, 2013
  30. Jeff KingJan 25, 2013
  31. Junio C HamanoJan 25, 2013
  32. Jeff KingJan 25, 2013
  33. 11/15 ident: report passwd errors with a more friendly messageJeff King, May 21, 2012
  34. 12/15 ident: use full dns names to generate email addressesJeff King, May 21, 2012
  35. 13/15 ident: use a dynamic strbuf in fmt_identJeff King, May 21, 2012
  36. 14/15 ident: trim whitespace from default name/emailJeff King, May 21, 2012
  37. Junio C HamanoMay 22, 2012
  38. Jeff KingMay 22, 2012
  39. Junio C HamanoMay 22, 2012
  40. 15/15 format-patch: refactor get_patch_filenameJeff King, May 21, 2012
  41. 09/13 drop length limitations on gecos-derived names and emailsJeff King, May 18, 2012
  42. 10/13 ident: report passwd errors with a more friendly messageJeff King, May 18, 2012
  43. 11/13 ident: use full dns names to generate email addressesJeff King, May 18, 2012
  44. 12/13 ident: use a dynamic strbuf in fmt_identJeff King, May 18, 2012
  45. 13/13 format-patch: refactor get_patch_filenameJeff King, May 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.