*/
#include "cache.h"
+#define MAX_GITNAME (1000)
+static char git_default_name[MAX_GITNAME];
+static char git_default_email[MAX_GITNAME];
static char git_default_date[50];
+int user_ident_explicitly_given;
#ifdef NO_GECOS_IN_PWENT
#define get_gecos(ignored) "&"
}
/* success! */
fclose(mailname);
+
+ len = strlen(buf);
+ if (len && buf[len-1] == '\n')
+ buf[len-1] = '\0';
return 0;
}
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]) {
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)
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;
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);
return (user_ident_explicitly_given == IDENT_ALL_GIVEN);
#endif
}
+
+int git_ident_config(const char *var, const char *value, void *data)
+{
+ if (!strcmp(var, "user.name")) {
+ if (!value)
+ return config_error_nonbool(var);
+ strlcpy(git_default_name, value, sizeof(git_default_name));
+ user_ident_explicitly_given |= IDENT_NAME_GIVEN;
+ return 0;
+ }
+
+ if (!strcmp(var, "user.email")) {
+ if (!value)
+ return config_error_nonbool(var);
+ strlcpy(git_default_email, value, sizeof(git_default_email));
+ user_ident_explicitly_given |= IDENT_MAIL_GIVEN;
+ return 0;
+ }
+
+ return 0;
+}