@@ -626,24 +626,37 @@ impl Chain {
626626 let output = Command :: new ( "gh" )
627627 . arg ( "pr" )
628628 . arg ( "list" )
629+ . arg ( "--state" )
630+ . arg ( "all" )
629631 . arg ( "--head" )
630632 . arg ( & branch. branch_name )
631633 . arg ( "--json" )
632- . arg ( "url" )
634+ . arg ( "url,state " )
633635 . output ( ) ;
634636
635637 match output {
636638 Ok ( output) if output. status . success ( ) => {
637639 let stdout = String :: from_utf8_lossy ( & output. stdout ) ;
638640 let pr_objects: Vec < serde_json:: Value > = serde_json:: from_str ( & stdout) . unwrap_or_default ( ) ;
639- let pr_urls: Vec < String > = pr_objects. iter ( ) . filter_map ( |pr| pr. get ( "url" ) . and_then ( |url| url. as_str ( ) ) . map ( String :: from) ) . collect ( ) ;
640-
641- if !pr_urls. is_empty ( ) {
642- let pr_list = pr_urls
643- . iter ( )
644- . map ( |url| format ! ( "{}" , url) )
645- . collect :: < Vec < String > > ( )
646- . join ( "; " ) ;
641+ let pr_details: Vec < String > = pr_objects. iter ( ) . filter_map ( |pr| {
642+ let url = pr. get ( "url" ) . and_then ( |url| url. as_str ( ) ) ;
643+ let state = pr. get ( "state" ) . and_then ( |state| state. as_str ( ) ) ;
644+ match ( url, state) {
645+ ( Some ( url) , Some ( state) ) => {
646+ let colored_state = match state {
647+ "MERGED" => "Merged" . purple ( ) . to_string ( ) ,
648+ "OPEN" => "Open" . green ( ) . to_string ( ) ,
649+ "CLOSED" => "Closed" . red ( ) . to_string ( ) ,
650+ _ => state. to_string ( ) ,
651+ } ;
652+ Some ( format ! ( "{} [{}]" , url, colored_state) )
653+ } ,
654+ _ => None ,
655+ }
656+ } ) . collect ( ) ;
657+
658+ if !pr_details. is_empty ( ) {
659+ let pr_list = pr_details. join ( "; " ) ;
647660 status_line. push_str ( & format ! ( " ({})" , pr_list) ) ;
648661 }
649662 }
0 commit comments