Merge branch 'jc/merge-msg' into next
[git.git] / ident.c
diff --git a/ident.c b/ident.c
index ac1c27f..09d4d71 100644 (file)
--- a/ident.c
+++ b/ident.c
@@ -46,6 +46,15 @@ static void copy_gecos(struct passwd *w, char *name, int sz)
 
 }
 
+static const char au_env[] = "GIT_AUTHOR_NAME";
+static const char co_env[] = "GIT_COMMITTER_NAME";
+static const char env_hint[] =
+"\n*** Environment problem:\n"
+"*** Your name cannot be determined from your system services (gecos).\n"
+"*** You would need to set %s and %s\n"
+"*** environment variables; otherwise you won't be able to perform\n"
+"*** certain operations because of \"empty ident\" errors.\n\n";
+
 int setup_ident(void)
 {
        int len;
@@ -57,6 +66,11 @@ int setup_ident(void)
        /* Get the name ("gecos") */
        copy_gecos(pw, git_default_name, sizeof(git_default_name));
 
+       if (!*git_default_name) {
+               if (!getenv(au_env) || !getenv(co_env))
+                       fprintf(stderr, env_hint, au_env, co_env);
+       }
+
        /* Make up a fake email address (name + '@' + hostname [+ '.' + domainname]) */
        len = strlen(pw->pw_name);
        if (len > sizeof(git_default_email)/2)
@@ -140,7 +154,7 @@ static int copy(char *buf, int size, int offset, const char *src)
 
        /*
         * Copy the rest to the buffer, but avoid the special
-        * characters '\n' '<' and '>' that act as delimeters on
+        * characters '\n' '<' and '>' that act as delimiters on
         * a identification line
         */
        for (i = 0; i < len; i++) {
@@ -167,6 +181,11 @@ static const char *get_ident(const char *name, const char *email,
                name = git_default_name;
        if (!email)
                email = git_default_email;
+
+       if (!*name || !*email)
+               die("empty ident %s <%s> not allowed",
+                   name, email);
+
        strcpy(date, git_default_date);
        if (date_str)
                parse_date(date_str, date, sizeof(date));