@@ -210,6 +210,7 @@ struct TestSuiteData {
210
210
#[ derive( Hash , PartialEq , Eq , Debug , Clone ) ]
211
211
struct Test {
212
212
name : String ,
213
+ stage : u8 ,
213
214
is_doctest : bool ,
214
215
}
215
216
@@ -218,27 +219,24 @@ fn aggregate_tests(metrics: &JsonRoot) -> TestSuiteData {
218
219
let mut tests = HashMap :: new ( ) ;
219
220
let test_suites = get_test_suites ( & metrics) ;
220
221
for suite in test_suites {
222
+ let stage = match suite. metadata {
223
+ TestSuiteMetadata :: CargoPackage { stage, .. } => stage,
224
+ TestSuiteMetadata :: Compiletest { stage, .. } => stage,
225
+ } as u8 ;
221
226
for test in & suite. tests {
222
227
// Poor man's detection of doctests based on the "(line XYZ)" suffix
223
228
let is_doctest = matches ! ( suite. metadata, TestSuiteMetadata :: CargoPackage { .. } )
224
229
&& test. name . contains ( "(line" ) ;
225
- let test_entry = Test { name : generate_test_name ( & test. name , & suite ) , is_doctest } ;
230
+ let test_entry = Test { name : generate_test_name ( & test. name ) , stage , is_doctest } ;
226
231
tests. insert ( test_entry, test. outcome . clone ( ) ) ;
227
232
}
228
233
}
229
234
TestSuiteData { tests }
230
235
}
231
236
232
- /// Normalizes Windows-style path delimiters to Unix-style paths
233
- /// and adds suite metadata to the test name.
234
- fn generate_test_name ( name : & str , suite : & TestSuite ) -> String {
235
- let name = name. replace ( '\\' , "/" ) ;
236
- let stage = match suite. metadata {
237
- TestSuiteMetadata :: CargoPackage { stage, .. } => stage,
238
- TestSuiteMetadata :: Compiletest { stage, .. } => stage,
239
- } ;
240
-
241
- format ! ( "{name} (stage {stage})" )
237
+ /// Normalizes Windows-style path delimiters to Unix-style paths.
238
+ fn generate_test_name ( name : & str ) -> String {
239
+ name. replace ( '\\' , "/" )
242
240
}
243
241
244
242
/// Prints test changes in Markdown format to stdout.
@@ -321,16 +319,25 @@ fn report_test_diffs(diff: AggregatedTestDiffs) {
321
319
// Sort diffs by job group and test name
322
320
grouped_diffs. sort_by ( |( d1, g1) , ( d2, g2) | g1. cmp ( & g2) . then ( d1. test . name . cmp ( & d2. test . name ) ) ) ;
323
321
322
+ // Now group the tests by stage
323
+ let mut grouped_by_stage: BTreeMap < u8 , Vec < ( & TestDiff , u64 ) > > = Default :: default ( ) ;
324
+ for ( diff, group) in grouped_diffs {
325
+ grouped_by_stage. entry ( diff. test . stage ) . or_default ( ) . push ( ( diff, group) )
326
+ }
327
+
324
328
output_details (
325
329
& format ! ( "Show {} test {}\n " , original_diff_count, pluralize( "diff" , original_diff_count) ) ,
326
330
|| {
327
- for ( diff, job_group) in grouped_diffs {
328
- println ! (
329
- "- `{}`: {} ({})" ,
330
- diff. test. name,
331
- format_diff( & diff. diff) ,
332
- format_job_group( job_group)
333
- ) ;
331
+ for ( stage, diffs) in grouped_by_stage {
332
+ println ! ( "## Stage {stage}" ) ;
333
+ for ( diff, job_group) in diffs {
334
+ println ! (
335
+ "- `{}`: {} ({})" ,
336
+ diff. test. name,
337
+ format_diff( & diff. diff) ,
338
+ format_job_group( job_group)
339
+ ) ;
340
+ }
334
341
}
335
342
336
343
let extra_diffs = diffs. len ( ) . saturating_sub ( max_diff_count) ;
0 commit comments