@@ -5,6 +5,7 @@ use std::sync::Arc;
55use clap:: { Parser , Subcommand } ;
66use dialoguer:: MultiSelect ;
77use miette:: { Context , IntoDiagnostic } ;
8+ use regex:: Regex ;
89use serde:: { Deserialize , Serialize } ;
910
1011use chrono:: Utc ;
@@ -13,7 +14,8 @@ use yansi::hyperlink::HyperlinkExt;
1314use nixpkgs_track:: utils:: { format_seconds_to_time_ago, parse_pull_request_id} ;
1415use nixpkgs_track_lib:: { branch_contains_commit, fetch_nixpkgs_pull_request, NixpkgsTrackError } ;
1516
16- static DEFAULT_BRANCHES : [ & str ; 6 ] = [ "master" , "staging" , "staging-next" , "nixpkgs-unstable" , "nixos-unstable-small" , "nixos-unstable" ] ;
17+ static ROLLING_BRANCHES : [ & str ; 6 ] = [ "staging" , "staging-next" , "master" , "nixpkgs-unstable" , "nixos-unstable-small" , "nixos-unstable" ] ;
18+ static STABLE_BRANCHES_TEMPLATE : [ & str ; 6 ] = [ "staging-XX.XX" , "staging-next-XX.XX" , "release-XX.XX" , "nixpkgs-XX.XX-darwin" , "nixos-XX.XX-small" , "nixos-XX.XX" ] ;
1719
1820#[ derive( Parser ) ]
1921#[ command( version, about, subcommand_negates_reqs = true ) ]
@@ -93,11 +95,40 @@ async fn check(client: Arc<reqwest::Client>, pull_request: u64, token: Option<&s
9395 . signed_duration_since ( pull_request. created_at )
9496 . num_seconds ( ) ,
9597 ) ;
98+ let merged_into_branch = pull_request. base . r#ref ;
99+
100+ writeln ! (
101+ output,
102+ "Merged {merged_at_ago} ago ({merged_at_date}), {creation_to_merge_time} after creation, into branch '{merged_into_branch}'."
103+ ) ?;
104+
105+ let stable_branches: Option < Vec < String > > = if ROLLING_BRANCHES . contains ( & merged_into_branch. as_str ( ) ) {
106+ None
107+ } else {
108+ // regex for stable version XX.XX
109+ let stable_version_regex = Regex :: new ( r"[0-9]+\.[0-9]+$" ) . unwrap ( ) ;
110+ if let Some ( stable_version) = stable_version_regex. find ( & merged_into_branch) {
111+ let stable_branches = STABLE_BRANCHES_TEMPLATE
112+ . iter ( )
113+ . map ( |s| s. replace ( "XX.XX" , stable_version. as_str ( ) ) )
114+ . collect ( ) ;
115+ Some ( stable_branches)
116+ } else {
117+ None
118+ }
119+ } ;
96120
97- writeln ! ( output, "Merged {merged_at_ago} ago ({merged_at_date}), {creation_to_merge_time} after creation." ) ?;
121+ #[ allow( clippy:: redundant_closure_for_method_calls) ]
122+ let tracked_branches = match stable_branches {
123+ Some ( ref stable_branches) => stable_branches
124+ . iter ( )
125+ . map ( |s| s. as_str ( ) )
126+ . collect ( ) ,
127+ None => Vec :: from ( ROLLING_BRANCHES ) ,
128+ } ;
98129
99130 let mut branches = tokio:: task:: JoinSet :: new ( ) ;
100- for ( i, branch) in DEFAULT_BRANCHES . iter ( ) . enumerate ( ) {
131+ for ( i, branch) in tracked_branches . iter ( ) . enumerate ( ) {
101132 let token_clone = token. map ( ToOwned :: to_owned) ;
102133 let branch_clone = ( * branch) . to_string ( ) ;
103134 let commit_sha_clone = commit_sha. clone ( ) ;
@@ -114,7 +145,7 @@ async fn check(client: Arc<reqwest::Client>, pull_request: u64, token: Option<&s
114145
115146 for ( i, result) in results {
116147 let has_pull_request = result?;
117- writeln ! ( output, "{}: {}" , DEFAULT_BRANCHES [ i] , if has_pull_request { "✅" } else { "🚫" } ) ?;
148+ writeln ! ( output, "{}: {}" , tracked_branches [ i] , if has_pull_request { "✅" } else { "🚫" } ) ?;
118149 }
119150 } else {
120151 let created_at_ago = format_seconds_to_time_ago (
0 commit comments