@@ -393,6 +393,19 @@ static void add_rfc2047(struct strbuf *sb, const char *line, size_t len,
393393 strbuf_addstr (sb , "?=" );
394394}
395395
396+ static const char * show_ident_date (const struct ident_split * ident ,
397+ enum date_mode mode )
398+ {
399+ unsigned long date = 0 ;
400+ int tz = 0 ;
401+
402+ if (ident -> date_begin && ident -> date_end )
403+ date = strtoul (ident -> date_begin , NULL , 10 );
404+ if (ident -> tz_begin && ident -> tz_end )
405+ tz = strtol (ident -> tz_begin , NULL , 10 );
406+ return show_date (date , tz , mode );
407+ }
408+
396409void pp_user_info (const struct pretty_print_context * pp ,
397410 const char * what , struct strbuf * sb ,
398411 const char * line , const char * encoding )
@@ -401,12 +414,10 @@ void pp_user_info(const struct pretty_print_context *pp,
401414 struct strbuf mail ;
402415 struct ident_split ident ;
403416 int linelen ;
404- char * line_end , * date ;
417+ char * line_end ;
405418 const char * mailbuf , * namebuf ;
406419 size_t namelen , maillen ;
407420 int max_length = 78 ; /* per rfc2822 */
408- unsigned long time ;
409- int tz ;
410421
411422 if (pp -> fmt == CMIT_FMT_ONELINE )
412423 return ;
@@ -438,8 +449,6 @@ void pp_user_info(const struct pretty_print_context *pp,
438449 strbuf_add (& name , namebuf , namelen );
439450
440451 namelen = name .len + mail .len + 3 ; /* ' ' + '<' + '>' */
441- time = strtoul (ident .date_begin , & date , 10 );
442- tz = strtol (date , NULL , 10 );
443452
444453 if (pp -> fmt == CMIT_FMT_EMAIL ) {
445454 strbuf_addstr (sb , "From: " );
@@ -472,13 +481,16 @@ void pp_user_info(const struct pretty_print_context *pp,
472481
473482 switch (pp -> fmt ) {
474483 case CMIT_FMT_MEDIUM :
475- strbuf_addf (sb , "Date: %s\n" , show_date (time , tz , pp -> date_mode ));
484+ strbuf_addf (sb , "Date: %s\n" ,
485+ show_ident_date (& ident , pp -> date_mode ));
476486 break ;
477487 case CMIT_FMT_EMAIL :
478- strbuf_addf (sb , "Date: %s\n" , show_date (time , tz , DATE_RFC2822 ));
488+ strbuf_addf (sb , "Date: %s\n" ,
489+ show_ident_date (& ident , DATE_RFC2822 ));
479490 break ;
480491 case CMIT_FMT_FULLER :
481- strbuf_addf (sb , "%sDate: %s\n" , what , show_date (time , tz , pp -> date_mode ));
492+ strbuf_addf (sb , "%sDate: %s\n" , what ,
493+ show_ident_date (& ident , pp -> date_mode ));
482494 break ;
483495 default :
484496 /* notin' */
@@ -688,8 +700,6 @@ static size_t format_person_part(struct strbuf *sb, char part,
688700{
689701 /* currently all placeholders have same length */
690702 const int placeholder_len = 2 ;
691- int tz ;
692- unsigned long date = 0 ;
693703 struct ident_split s ;
694704 const char * name , * mail ;
695705 size_t maillen , namelen ;
@@ -716,30 +726,23 @@ static size_t format_person_part(struct strbuf *sb, char part,
716726 if (!s .date_begin )
717727 goto skip ;
718728
719- date = strtoul (s .date_begin , NULL , 10 );
720-
721729 if (part == 't' ) { /* date, UNIX timestamp */
722730 strbuf_add (sb , s .date_begin , s .date_end - s .date_begin );
723731 return placeholder_len ;
724732 }
725733
726- /* parse tz */
727- tz = strtoul (s .tz_begin + 1 , NULL , 10 );
728- if (* s .tz_begin == '-' )
729- tz = - tz ;
730-
731734 switch (part ) {
732735 case 'd' : /* date */
733- strbuf_addstr (sb , show_date ( date , tz , dmode ));
736+ strbuf_addstr (sb , show_ident_date ( & s , dmode ));
734737 return placeholder_len ;
735738 case 'D' : /* date, RFC2822 style */
736- strbuf_addstr (sb , show_date ( date , tz , DATE_RFC2822 ));
739+ strbuf_addstr (sb , show_ident_date ( & s , DATE_RFC2822 ));
737740 return placeholder_len ;
738741 case 'r' : /* date, relative */
739- strbuf_addstr (sb , show_date ( date , tz , DATE_RELATIVE ));
742+ strbuf_addstr (sb , show_ident_date ( & s , DATE_RELATIVE ));
740743 return placeholder_len ;
741744 case 'i' : /* date, ISO 8601 */
742- strbuf_addstr (sb , show_date ( date , tz , DATE_ISO8601 ));
745+ strbuf_addstr (sb , show_ident_date ( & s , DATE_ISO8601 ));
743746 return placeholder_len ;
744747 }
745748
0 commit comments