@@ -32,21 +32,32 @@ pub async fn handle_triage(
32
32
data,
33
33
& master_commits,
34
34
)
35
- . await ?;
35
+ . await ?
36
+ . unwrap ( ) ;
36
37
let mut after = Bound :: Commit ( comparison. next ( & master_commits) . unwrap ( ) ) ; // TODO: handle no next commit
37
38
38
39
let mut report = HashMap :: new ( ) ;
39
40
let mut before = start. clone ( ) ;
40
41
41
42
loop {
42
- let comparison = compare (
43
+ let comparison = match compare (
43
44
before,
44
45
after. clone ( ) ,
45
46
"instructions:u" . to_owned ( ) ,
46
47
data,
47
48
& master_commits,
48
49
)
49
- . await ?;
50
+ . await ?
51
+ {
52
+ Some ( c) => c,
53
+ None => {
54
+ log:: info!(
55
+ "No data found for end bound {:?}. Ending comparison..." ,
56
+ after
57
+ ) ;
58
+ break ;
59
+ }
60
+ } ;
50
61
log:: info!(
51
62
"Comparing {} to {}" ,
52
63
comparison. b. commit,
@@ -77,8 +88,10 @@ pub async fn handle_compare(
77
88
data : & InputData ,
78
89
) -> Result < api:: days:: Response , BoxedError > {
79
90
let commits = collector:: master_commits ( ) . await ?;
80
- let comparison =
81
- crate :: comparison:: compare ( body. start , body. end , body. stat , data, & commits) . await ?;
91
+ let end = body. end ;
92
+ let comparison = crate :: comparison:: compare ( body. start , end. clone ( ) , body. stat , data, & commits)
93
+ . await ?
94
+ . ok_or_else ( || format ! ( "could not find end commit for bound {:?}" , end) ) ?;
82
95
83
96
let conn = data. conn ( ) . await ;
84
97
let prev = comparison. prev ( & commits) ;
@@ -196,19 +209,22 @@ impl ComparisonSummary<'_> {
196
209
}
197
210
198
211
/// Compare two bounds on a given stat
212
+ ///
213
+ /// Returns Ok(None) when no data for the end bound is present
199
214
pub async fn compare (
200
215
start : Bound ,
201
216
end : Bound ,
202
217
stat : String ,
203
218
data : & InputData ,
204
219
master_commits : & [ collector:: MasterCommit ] ,
205
- ) -> Result < Comparison , BoxedError > {
220
+ ) -> Result < Option < Comparison > , BoxedError > {
206
221
let a = data
207
222
. data_for ( true , start. clone ( ) )
208
223
. ok_or ( format ! ( "could not find start commit for bound {:?}" , start) ) ?;
209
- let b = data
210
- . data_for ( false , end. clone ( ) )
211
- . ok_or ( format ! ( "could not find end commit for bound {:?}" , end) ) ?;
224
+ let b = match data. data_for ( false , end. clone ( ) ) {
225
+ Some ( b) => b,
226
+ None => return Ok ( None ) ,
227
+ } ;
212
228
let cids = Arc :: new ( vec ! [ a. clone( ) . into( ) , b. clone( ) . into( ) ] ) ;
213
229
214
230
let query = selector:: Query :: new ( )
@@ -221,12 +237,12 @@ pub async fn compare(
221
237
222
238
let conn = data. conn ( ) . await ;
223
239
224
- Ok ( Comparison {
240
+ Ok ( Some ( Comparison {
225
241
a : DateData :: consume_one ( & * conn, a. clone ( ) , & mut responses, master_commits) . await ,
226
242
a_id : a,
227
243
b : DateData :: consume_one ( & * conn, b. clone ( ) , & mut responses, master_commits) . await ,
228
244
b_id : b,
229
- } )
245
+ } ) )
230
246
}
231
247
232
248
/// Data associated with a specific date
0 commit comments