summaryrefslogtreecommitdiffstats
path: root/builtin/check-mailmap.c
diff options
context:
space:
mode:
authorJacob Keller <jacob.keller@gmail.com>2024-08-27 23:27:16 +0200
committerJunio C Hamano <gitster@pobox.com>2024-08-27 23:51:28 +0200
commit3a27e991f2609196a2fe4a75190a8f0bb3822ed3 (patch)
tree9a1b060f8be1c446e0db18d7f85915c5d30ec6ec /builtin/check-mailmap.c
parentThe third batch (diff)
downloadgit-3a27e991f2609196a2fe4a75190a8f0bb3822ed3.tar.xz
git-3a27e991f2609196a2fe4a75190a8f0bb3822ed3.zip
check-mailmap: accept "user@host" contacts
git check-mailmap splits each provided contact using split_ident_line. This function requires that the contact either be of the form "Name <user@host>" or of the form "<user@host>". In particular, if the mail portion of the contact is not surrounded by angle brackets, split_ident_line will reject it. This results in git check-mailmap rejecting attempts to translate simple email addresses: $ git check-mailmap user@host fatal: unable to parse contact: user@host This limits the usability of check-mailmap as it requires placing angle brackets around plain email addresses. In particular, attempting to use git check-mailmap to support mapping addresses in git send-email is not straight forward. The sanitization and validation functions in git send-email strip angle brackets from plain email addresses. It is not trivial to add brackets prior to invoking git check-mailmap. Instead, modify check_mailmap() to allow such strings as contacts. In particular, treat any line which cannot be split by split_ident_line as a simple email address. No attempt is made to actually parse the address line, or validate that it is actually an email address. Implementing such validation is not trivial. Besides, we weren't validating the address between angle brackets before anyways. Signed-off-by: Jacob Keller <jacob.keller@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/check-mailmap.c')
-rw-r--r--builtin/check-mailmap.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/builtin/check-mailmap.c b/builtin/check-mailmap.c
index b8a05b8e07..6b7fb53494 100644
--- a/builtin/check-mailmap.c
+++ b/builtin/check-mailmap.c
@@ -25,13 +25,17 @@ static void check_mailmap(struct string_list *mailmap, const char *contact)
size_t namelen, maillen;
struct ident_split ident;
- if (split_ident_line(&ident, contact, strlen(contact)))
- die(_("unable to parse contact: %s"), contact);
-
- name = ident.name_begin;
- namelen = ident.name_end - ident.name_begin;
- mail = ident.mail_begin;
- maillen = ident.mail_end - ident.mail_begin;
+ if (!split_ident_line(&ident, contact, strlen(contact))) {
+ name = ident.name_begin;
+ namelen = ident.name_end - ident.name_begin;
+ mail = ident.mail_begin;
+ maillen = ident.mail_end - ident.mail_begin;
+ } else {
+ name = NULL;
+ namelen = 0;
+ mail = contact;
+ maillen = strlen(contact);
+ }
map_user(mailmap, &mail, &maillen, &name, &namelen);