Browse Source

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>
maint
Junio C Hamano 19 years ago
parent
commit
e0e3ba208d
  1. 7
      git-am.sh
  2. 32
      mailinfo.c

7
git-am.sh

@ -249,6 +249,13 @@ do @@ -249,6 +249,13 @@ do
GIT_AUTHOR_NAME="$(sed -n '/^Author/ s/Author: //p' "$dotest/info")"
GIT_AUTHOR_EMAIL="$(sed -n '/^Email/ s/Email: //p' "$dotest/info")"
GIT_AUTHOR_DATE="$(sed -n '/^Date/ s/Date: //p' "$dotest/info")"

if test -z "$GIT_AUTHOR_EMAIL"
then
echo "Patch does not have a valid e-mail address."
stop_here $this
fi

export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE

SUBJECT="$(sed -n '/^Subject/ s/Subject: //p' "$dotest/info")"

32
mailinfo.c

@ -40,13 +40,43 @@ static char *sanity_check(char *name, char *email) @@ -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

Loading…
Cancel
Save