@@ -7,6 +7,7 @@ mod config;
77mod owned;
88mod stack;
99
10+ use git2:: DiffStats ;
1011use std:: io:: Write ;
1112use std:: path:: Path ;
1213
@@ -600,19 +601,21 @@ fn announce(logger: &slog::Logger, announcement: Announcement) {
600601 let commit_short_id = commit_short_id
601602 . as_str ( )
602603 . expect ( "the commit short id is always a valid ASCII string" ) ;
604+ let change_header = format_change_header ( diff) ;
605+
603606 info ! (
604607 logger,
605608 "committed" ;
606609 "fixup" => destination,
607610 "commit" => commit_short_id,
608- "header" => format! ( "+{},-{}" , diff . insertions ( ) , diff . deletions ( ) ) ,
611+ "header" => change_header ,
609612 ) ;
610613 }
611614 Announcement :: WouldHaveCommitted ( fixup, diff) => info ! (
612615 logger,
613616 "would have committed" ;
614617 "fixup" => fixup,
615- "header" => format! ( "+{},-{}" , & diff. insertions ( ) , & diff . deletions ( ) )
618+ "header" => format_change_header ( diff) ,
616619 ) ,
617620 Announcement :: WouldHaveRebased ( command) => info ! (
618621 logger, "would have run git rebase" ; "command" => format!( "{:?}" , command)
@@ -684,6 +687,39 @@ fn announce(logger: &slog::Logger, announcement: Announcement) {
684687 }
685688}
686689
690+ fn format_change_header ( diff : & DiffStats ) -> String {
691+ let insertions = diff. insertions ( ) ;
692+ let deletions = diff. deletions ( ) ;
693+
694+ let mut header = String :: new ( ) ;
695+ if insertions > 0 {
696+ header. push_str ( & format ! (
697+ "{} {}(+)" ,
698+ insertions,
699+ if insertions == 1 {
700+ "insertion"
701+ } else {
702+ "insertions"
703+ }
704+ ) ) ;
705+ }
706+ if deletions > 0 {
707+ if !header. is_empty ( ) {
708+ header. push_str ( ", " ) ;
709+ }
710+ header. push_str ( & format ! (
711+ "{} {}(-)" ,
712+ deletions,
713+ if deletions == 1 {
714+ "deletion"
715+ } else {
716+ "deletions"
717+ }
718+ ) ) ;
719+ }
720+ header
721+ }
722+
687723#[ cfg( test) ]
688724mod tests {
689725 use git2:: message_trailers_strs;
@@ -743,8 +779,18 @@ mod tests {
743779 log_utils:: assert_log_messages_are (
744780 capturing_logger. visible_logs ( ) ,
745781 vec ! [
746- & json!( { "level" : "INFO" , "msg" : "committed" , "fixup" : "Initial commit." } ) ,
747- & json!( { "level" : "INFO" , "msg" : "committed" , "fixup" : "Initial commit." } ) ,
782+ & json!( {
783+ "level" : "INFO" ,
784+ "msg" : "committed" ,
785+ "fixup" : "Initial commit." ,
786+ "header" : "1 insertion(+)" ,
787+ } ) ,
788+ & json!( {
789+ "level" : "INFO" ,
790+ "msg" : "committed" ,
791+ "fixup" : "Initial commit." ,
792+ "header" : "2 insertions(+)" ,
793+ } ) ,
748794 & json!( {
749795 "level" : "INFO" ,
750796 "msg" : "To squash the new commits, rebase:" ,
789835 "level" : "INFO" ,
790836 "msg" : "committed" ,
791837 "fixup" : "Initial commit." ,
792- "header" : "+0,-3 " ,
838+ "header" : "3 deletions(-) " ,
793839 } ) ,
794840 & json!( {
795841 "level" : "INFO" ,
@@ -838,7 +884,7 @@ lines
838884 "level" : "INFO" ,
839885 "msg" : "committed" ,
840886 "fixup" : "Initial commit." ,
841- "header" : "+1,-1 " ,
887+ "header" : "1 insertion(+), 1 deletion(-) " ,
842888 } ) ,
843889 & json!( {
844890 "level" : "INFO" ,
@@ -1275,7 +1321,7 @@ lines
12751321 "level" : "INFO" ,
12761322 "msg" : "committed" ,
12771323 "fixup" : "Initial commit." ,
1278- "header" : "+3,-0 " ,
1324+ "header" : "3 insertions(+) " ,
12791325 } ) ,
12801326 & json!( {
12811327 "level" : "INFO" ,
@@ -1711,11 +1757,15 @@ lines
17111757 vec ! [
17121758 & json!( {
17131759 "level" : "INFO" ,
1714- "msg" : "would have committed" , "fixup" : "Initial commit." , "header" : "+1,-0"
1760+ "msg" : "would have committed" ,
1761+ "fixup" : "Initial commit." ,
1762+ "header" : "1 insertion(+)" ,
17151763 } ) ,
17161764 & json!( {
17171765 "level" : "INFO" ,
1718- "msg" : "would have committed" , "fixup" : "Initial commit." , "header" : "+2,-0"
1766+ "msg" : "would have committed" ,
1767+ "fixup" : "Initial commit." ,
1768+ "header" : "2 insertions(+)" ,
17191769 } ) ,
17201770 ] ,
17211771 ) ;
0 commit comments