Merge branch 'jc/maint-protect-sh-from-ifs' into maint-1.7.11
[git.git] / ident.c
diff --git a/ident.c b/ident.c
index 59beef2f3591ebce662f0f468ccac537e28b370a..443c0751bd1f63c059649f9f7f9174349cc1d270 100644 (file)
--- a/ident.c
+++ b/ident.c
@@ -205,7 +205,7 @@ int split_ident_line(struct ident_split *split, const char *line, int len)
        if (!split->mail_begin)
                return status;
 
-       for (cp = split->mail_begin - 2; line < cp; cp--)
+       for (cp = split->mail_begin - 2; line <= cp; cp--)
                if (!isspace(*cp)) {
                        split->name_end = cp + 1;
                        break;
@@ -267,18 +267,19 @@ const char *fmt_ident(const char *name, const char *email,
 {
        static struct strbuf ident = STRBUF_INIT;
        char date[50];
-       int error_on_no_name = (flag & IDENT_ERROR_ON_NO_NAME);
+       int strict = (flag & IDENT_STRICT);
        int want_date = !(flag & IDENT_NO_DATE);
+       int want_name = !(flag & IDENT_NO_NAME);
 
-       if (!name)
+       if (want_name && !name)
                name = ident_default_name();
        if (!email)
                email = ident_default_email();
 
-       if (!*name) {
+       if (want_name && !*name) {
                struct passwd *pw;
 
-               if (error_on_no_name) {
+               if (strict) {
                        if (name == git_default_name.buf)
                                fputs(env_hint, stderr);
                        die("empty ident name (for <%s>) not allowed", email);
@@ -287,6 +288,12 @@ const char *fmt_ident(const char *name, const char *email,
                name = pw->pw_name;
        }
 
+       if (strict && email == git_default_email.buf &&
+           strstr(email, "(none)")) {
+               fputs(env_hint, stderr);
+               die("unable to auto-detect email address (got '%s')", email);
+       }
+
        if (want_date) {
                if (date_str && date_str[0]) {
                        if (parse_date(date_str, date, sizeof(date)) < 0)
@@ -297,10 +304,13 @@ const char *fmt_ident(const char *name, const char *email,
        }
 
        strbuf_reset(&ident);
-       strbuf_addstr_without_crud(&ident, name);
-       strbuf_addstr(&ident, " <");
+       if (want_name) {
+               strbuf_addstr_without_crud(&ident, name);
+               strbuf_addstr(&ident, " <");
+       }
        strbuf_addstr_without_crud(&ident, email);
-       strbuf_addch(&ident, '>');
+       if (want_name)
+                       strbuf_addch(&ident, '>');
        if (want_date) {
                strbuf_addch(&ident, ' ');
                strbuf_addstr_without_crud(&ident, date);
@@ -310,7 +320,7 @@ const char *fmt_ident(const char *name, const char *email,
 
 const char *fmt_name(const char *name, const char *email)
 {
-       return fmt_ident(name, email, NULL, IDENT_ERROR_ON_NO_NAME | IDENT_NO_DATE);
+       return fmt_ident(name, email, NULL, IDENT_STRICT | IDENT_NO_DATE);
 }
 
 const char *git_author_info(int flag)