| 786 | } |
| 787 | |
| 788 | static size_t format_person_part(struct strbuf *sb, char part, |
| 789 | const char *msg, int len, |
| 790 | struct date_mode dmode) |
| 791 | { |
| 792 | /* currently all placeholders have same length */ |
| 793 | const int placeholder_len = 2; |
| 794 | struct ident_split s; |
| 795 | const char *name, *mail; |
| 796 | size_t maillen, namelen; |
| 797 | |
| 798 | if (split_ident_line(&s, msg, len) < 0) |
| 799 | goto skip; |
| 800 | |
| 801 | name = s.name_begin; |
| 802 | namelen = s.name_end - s.name_begin; |
| 803 | mail = s.mail_begin; |
| 804 | maillen = s.mail_end - s.mail_begin; |
| 805 | |
| 806 | if (part == 'N' || part == 'E' || part == 'L') /* mailmap lookup */ |
| 807 | mailmap_name(&mail, &maillen, &name, &namelen); |
| 808 | if (part == 'n' || part == 'N') { /* name */ |
| 809 | strbuf_add(sb, name, namelen); |
| 810 | return placeholder_len; |
| 811 | } |
| 812 | if (part == 'e' || part == 'E') { /* email */ |
| 813 | strbuf_add(sb, mail, maillen); |
| 814 | return placeholder_len; |
| 815 | } |
| 816 | if (part == 'l' || part == 'L') { /* local-part */ |
| 817 | const char *at = memchr(mail, '@', maillen); |
| 818 | if (at) |
| 819 | maillen = at - mail; |
| 820 | strbuf_add(sb, mail, maillen); |
| 821 | return placeholder_len; |
| 822 | } |
| 823 | |
| 824 | if (!s.date_begin) |
| 825 | goto skip; |
| 826 | |
| 827 | if (part == 't') { /* date, UNIX timestamp */ |
| 828 | strbuf_add(sb, s.date_begin, s.date_end - s.date_begin); |
| 829 | return placeholder_len; |
| 830 | } |
| 831 | |
| 832 | switch (part) { |
| 833 | case 'd': /* date */ |
| 834 | strbuf_addstr(sb, show_ident_date(&s, dmode)); |
| 835 | return placeholder_len; |
| 836 | case 'D': /* date, RFC2822 style */ |
| 837 | strbuf_addstr(sb, show_ident_date(&s, DATE_MODE(RFC2822))); |
| 838 | return placeholder_len; |
| 839 | case 'r': /* date, relative */ |
| 840 | strbuf_addstr(sb, show_ident_date(&s, DATE_MODE(RELATIVE))); |
| 841 | return placeholder_len; |
| 842 | case 'i': /* date, ISO 8601-like */ |
| 843 | strbuf_addstr(sb, show_ident_date(&s, DATE_MODE(ISO8601))); |
| 844 | return placeholder_len; |
| 845 | case 'I': /* date, ISO 8601 strict */ |
no test coverage detected