Re: Bug in .mailmap handling?
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jul 12, 2013, 20:50 UTC
- Message-ID
- <7v4nbzjyel.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <7v8v1bjyyy.fsf@alter.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> writes:
Show 27 quoted lines
> Junio C Hamano <gitster@pobox.com> writes: > >> Stefan Beller <stefanbeller@googlemail.com> writes: >> >>> git shortlog -sne >>> 1 A <A@example.org> >>> 1 A <a@example.org> >> >> This is coming from mailmap.c::add_mapping() that downcases the >> e-mail address. >> >> changed_email@example.org is mapped to a@example.org because of this >> downcasing, while "A <A@example.org>" does not have any entry for it >> in the .mailmap file, so it is given back as-is. Hence we see two >> distinct entries. > > I think it is wrong for the parser to lose information by > downcasing. > > It is perfectly fine to do the comparison case insensitively, to > allow <changed_Email@example.org> in the input is mangled using the > entry for <changed_email@example.org> in the .mailmap file; it is > not fine to downcase the parsed result, especially the side that is > used as the "rewritten result" (i.e. the tokens earlier on the line), > as that would mean mangling the output. > > Let me see if I can quickly whip up a fix.
It might be just the matter of doing this.
I suspect that we could drop the downcasing of old-email, too, but the new-email is supposed to be the rewritten result that appears on the output, and downcasing it is very wrong.
I also suspect that this was an old workaround for the original string-list that did not know how to match items case insensitively, which we should have removed when we added case sensitivity support to the string-list at around 577f63e7 (Merge branch 'ap/log-mailmap', 2013-01-20).
mailmap.c | 3 --- 1 file changed, 3 deletions(-)
diff --git a/mailmap.c b/mailmap.c index 418081e..c64a53d 100644 --- a/mailmap.c +++ b/mailmap.c @@ -56,9 +56,6 @@ static void add_mapping(struct string_list *map, if (old_email) for (p = old_email; *p; p++) *p = tolower(*p); - if (new_email) - for (p = new_email; *p; p++) - *p = tolower(*p); if (old_email == NULL) { old_email = new_email;