ident: split setup_ident into separate functions

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> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed May 21, 2012 at 19:09 UTC bcb2b0044b3baedf7857613ec069f300c364680c
2 files changed +22 -16
cache.h
+3
@@ -894,6 +894,9 @@ extern const char *git_author_info(int);
894 extern const char *git_committer_info(int);
895 extern const char *fmt_ident(const char *name, const char *email, const char *date_str, int);
896 extern const char *fmt_name(const char *name, const char *email);
897 +extern const char *ident_default_name(void);
898 +extern const char *ident_default_email(void);
899 +extern const char *ident_default_date(void);
900 extern const char *git_editor(void);
901 extern const char *git_pager(int stdout_is_tty);
902
ident.c
+19 -16
@@ -117,21 +117,20 @@ static void copy_email(const struct passwd *pw)
117 sizeof(git_default_email) - len);
118 }
119
120 -static void setup_ident(const char **name, const char **emailp)
120 +const char *ident_default_name(void)
121 {
122 - struct passwd *pw = NULL;
123 -
124 - /* Get the name ("gecos") */
125 - if (!*name && !git_default_name[0]) {
126 - pw = getpwuid(getuid());
122 + if (!git_default_name[0]) {
123 + struct passwd *pw = getpwuid(getuid());
124 if (!pw)
125 die("You don't exist. Go away!");
126 copy_gecos(pw, git_default_name, sizeof(git_default_name));
127 }
131 - if (!*name)
132 - *name = git_default_name;
128 + return git_default_name;
129 +}
130
134 - if (!*emailp && !git_default_email[0]) {
131 +const char *ident_default_email(void)
132 +{
133 + if (!git_default_email[0]) {
134 const char *email = getenv("EMAIL");
135
136 if (email && email[0]) {
@@ -139,19 +138,20 @@ static void setup_ident(const char **name, const char **emailp)
138 sizeof(git_default_email));
139 user_ident_explicitly_given |= IDENT_MAIL_GIVEN;
140 } else {
142 - if (!pw)
143 - pw = getpwuid(getuid());
141 + struct passwd *pw = getpwuid(getuid());
142 if (!pw)
143 die("You don't exist. Go away!");
144 copy_email(pw);
145 }
146 }
149 - if (!*emailp)
150 - *emailp = git_default_email;
147 + return git_default_email;
148 +}
149
152 - /* And set the default date */
150 +const char *ident_default_date(void)
151 +{
152 if (!git_default_date[0])
153 datestamp(git_default_date, sizeof(git_default_date));
154 + return git_default_date;
155 }
156
157 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,
311 int warn_on_no_name = (flag & IDENT_WARN_ON_NO_NAME);
312 int name_addr_only = (flag & IDENT_NO_DATE);
313
314 - setup_ident(&name, &email);
314 + if (!name)
315 + name = ident_default_name();
316 + if (!email)
317 + email = ident_default_email();
318
319 if (!*name) {
320 struct passwd *pw;
@@ -331,7 +334,7 @@ const char *fmt_ident(const char *name, const char *email,
334 name = git_default_name;
335 }
336
334 - strcpy(date, git_default_date);
337 + strcpy(date, ident_default_date());
338 if (!name_addr_only && date_str && date_str[0]) {
339 if (parse_date(date_str, date, sizeof(date)) < 0)
340 die("invalid date format: %s", date_str);