aboutsummaryrefslogtreecommitdiff
path: root/mailinfo.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-12-14 16:31:06 -0800
committerJunio C Hamano <junkio@cox.net>2005-12-14 16:31:06 -0800
commite0e3ba208d235ab5623a86204fbd20b449520764 (patch)
tree6f9e317480401ff8910d28c986885bb501bf5c25 /mailinfo.c
parent252fef7149204d52ed4b46fd7e8ac8c803ceb0aa (diff)
downloadgit-e0e3ba208d235ab5623a86204fbd20b449520764.tar.gz
git-e0e3ba208d235ab5623a86204fbd20b449520764.tar.xz
mailinfo and git-am: allow "John Doe <johndoe>"
An isolated developer could have a local-only e-mail, which will be stripped out by mailinfo because it lacks '@'. Define a fallback parser to accomodate that. At the same time, reject authorless patch in git-am. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'mailinfo.c')
-rw-r--r--mailinfo.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/mailinfo.c b/mailinfo.c
index d4b416362..9f95f3765 100644
--- a/mailinfo.c
+++ b/mailinfo.c
@@ -40,13 +40,43 @@ static char *sanity_check(char *name, char *email)
return name;
}
+static int bogus_from(char *line)
+{
+ /* John Doe <johndoe> */
+ char *bra, *ket, *dst, *cp;
+
+ /* This is fallback, so do not bother if we already have an
+ * e-mail address.
+ */
+ if (*email)
+ return 0;
+
+ bra = strchr(line, '<');
+ if (!bra)
+ return 0;
+ ket = strchr(bra, '>');
+ if (!ket)
+ return 0;
+
+ for (dst = email, cp = bra+1; cp < ket; )
+ *dst++ = *cp++;
+ *dst = 0;
+ for (cp = line; isspace(*cp); cp++)
+ ;
+ for (bra--; isspace(*bra); bra--)
+ *bra = 0;
+ cp = sanity_check(cp, email);
+ strcpy(name, cp);
+ return 1;
+}
+
static int handle_from(char *line)
{
char *at = strchr(line, '@');
char *dst;
if (!at)
- return 0;
+ return bogus_from(line);
/*
* If we already have one email, don't take any confusing lines