@@ -7,9 +7,11 @@ mod types;
77#[ cfg( test) ]
88mod __tests__;
99
10- use anyhow:: { Context , Result } ;
10+ use anyhow:: { anyhow , Context , Result } ;
1111use args:: { Cli , OutputFormat } ;
12- use bulk:: { resolve_bulk_out_dir, validate_bulk_args} ;
12+ use bulk:: {
13+ resolve_bulk_out_dir, resolve_pr_range_out_dir, validate_bulk_args, validate_pr_range_args,
14+ } ;
1315use clap:: Parser ;
1416use std:: fs;
1517use std:: io:: Write ;
@@ -19,6 +21,65 @@ use types::Context as GhContext;
1921fn main ( ) -> Result < ( ) > {
2022 let cli = Cli :: parse ( ) ;
2123
24+ if cli. from . is_some ( ) || cli. to . is_some ( ) {
25+ let ( from, to) = validate_pr_range_args ( & cli) ?;
26+ let ( owner, repo) = gh:: parse_repo ( & cli. input ) ?;
27+ let out_dir = resolve_pr_range_out_dir ( & cli, & repo) ?;
28+ let file_extension = output_extension ( & cli. format ) ;
29+ let mut failures: Vec < ( u64 , String ) > = Vec :: new ( ) ;
30+ let mut generated_count = 0_u64 ;
31+
32+ for number in from..=to {
33+ let target = gh:: Target {
34+ owner : owner. clone ( ) ,
35+ repo : repo. clone ( ) ,
36+ number,
37+ kind : gh:: TargetType :: Pr ,
38+ } ;
39+
40+ let context = match gh:: fetch_context ( & target) {
41+ Ok ( context) => context,
42+ Err ( err) => {
43+ failures. push ( ( number, err. to_string ( ) ) ) ;
44+ continue ;
45+ }
46+ } ;
47+ let formatted_output = format_output ( & context, & cli. format ) ?;
48+ let base = format ! (
49+ "{}-{}-{}" ,
50+ repo, context. metadata. r#type, context. metadata. number
51+ ) ;
52+ let file_path = out_dir. join ( format ! ( "{}.{}" , base, file_extension) ) ;
53+ fs:: write ( & file_path, & formatted_output) . with_context ( || {
54+ format ! ( "Failed to write output to file: {:?}" , file_path)
55+ } ) ?;
56+ println ! ( "Generated context in {}" , file_path. display( ) ) ;
57+ generated_count += 1 ;
58+ }
59+
60+ if !failures. is_empty ( ) {
61+ eprintln ! (
62+ "Completed with {} failed PR(s) in range {}..={}" ,
63+ failures. len( ) ,
64+ from,
65+ to
66+ ) ;
67+ for ( number, err) in & failures {
68+ eprintln ! ( " - PR #{}: {}" , number, err) ;
69+ }
70+ }
71+
72+ if generated_count == 0 {
73+ return Err ( anyhow ! (
74+ "No PR context files were generated for range {}..={}" ,
75+ from,
76+ to
77+ ) ) ;
78+ }
79+
80+ return Ok ( ( ) ) ;
81+ }
82+
2283 if cli. bulk {
2384 validate_bulk_args ( & cli) ?;
2485
0 commit comments