summaryrefslogtreecommitdiff
path: root/builtin/blame.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2013-01-05 21:26:39 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-01-10 20:32:35 (GMT)
commit388c7f8a275a40697cee2eec5fb124ae8457bf77 (patch)
tree6a64b5f7159bf262a31d2b2ce941b20a956a4fb2 /builtin/blame.c
parent3c020bd528d5dc320b82bd787670edfe6695f097 (diff)
downloadgit-388c7f8a275a40697cee2eec5fb124ae8457bf77.zip
git-388c7f8a275a40697cee2eec5fb124ae8457bf77.tar.gz
git-388c7f8a275a40697cee2eec5fb124ae8457bf77.tar.bz2
mailmap: remove email copy and length limitation
In map_user(), we have email pointer that points at the beginning of an e-mail address, but the buffer is not terminated with a NUL after the e-mail address. It typically has ">" after the address, and it could have even more if it comes from author/committer line in a commit object. Or it may not have ">" after it. We used to copy the e-mail address proper into a temporary buffer before asking the string-list API to find the e-mail address in the mailmap, because string_list_lookup() function only takes a NUL terminated full string. Introduce a helper function lookup_prefix that takes the email pointer and the length, and finds a matching entry in the string list used for the mailmap, by doing the following: - First ask string_list_find_insert_index() where in its sorted list the e-mail address we have (including the possible trailing junk ">...") would be inserted. - It could find an exact match (e.g. we had a clean e-mail address without any trailing junk). We can return the item in that case. - Or it could return the index of an item that sorts after the e-mail address we have. - If we did not find an exact match against a clean e-mail address, then the record we are looking for in the mailmap has to exist before the index returned by the function (i.e. "email>junk" always sorts later than "email"). Iterate, starting from that index, down the map->items[] array until we find the exact record we are looking for, or we see a record with a key that definitely sorts earlier than the e-mail we are looking for (i.e. when we are looking for "email" in "email>junk", a record in the mailmap that begins with "emaik" strictly sorts before "email", if such a key existed in the mailmap). This, together with the earlier enhancement to support case-insensitive sorting, allow us to remove an extra copy of email buffer to downcase it. A part of this is based on Antoine Pelisse's previous work. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/blame.c')
0 files changed, 0 insertions, 0 deletions