3
3
4
4
use crate :: {
5
5
cargo_cli:: { CargoCli , CargoOptions } ,
6
- output:: { should_redact, OutputContext , OutputOpts , OutputWriter } ,
6
+ output:: { should_redact, OutputContext , OutputOpts , OutputWriter , StderrStyles } ,
7
7
reuse_build:: { make_path_mapper, ArchiveFormatOpt , ReuseBuildOpts } ,
8
8
ExpectedError , Result , ReuseBuildKind ,
9
9
} ;
@@ -47,7 +47,7 @@ use nextest_runner::{
47
47
RustcCli ,
48
48
} ;
49
49
use once_cell:: sync:: OnceCell ;
50
- use owo_colors:: { OwoColorize , Stream , Style } ;
50
+ use owo_colors:: OwoColorize ;
51
51
use quick_junit:: XmlString ;
52
52
use semver:: Version ;
53
53
use std:: {
@@ -71,16 +71,32 @@ pub struct CargoNextestApp {
71
71
}
72
72
73
73
impl CargoNextestApp {
74
+ /// Initializes the output context.
75
+ pub fn init_output ( & self ) -> OutputContext {
76
+ match & self . subcommand {
77
+ NextestSubcommand :: Nextest ( args) => args. common . output . init ( ) ,
78
+ NextestSubcommand :: Ntr ( args) => args. common . output . init ( ) ,
79
+ #[ cfg( unix) ]
80
+ // Double-spawned processes should never use coloring.
81
+ NextestSubcommand :: DoubleSpawn ( _) => OutputContext :: color_never_init ( ) ,
82
+ }
83
+ }
84
+
74
85
/// Executes the app.
75
- pub fn exec ( self , cli_args : Vec < String > , output_writer : & mut OutputWriter ) -> Result < i32 > {
86
+ pub fn exec (
87
+ self ,
88
+ cli_args : Vec < String > ,
89
+ output : OutputContext ,
90
+ output_writer : & mut OutputWriter ,
91
+ ) -> Result < i32 > {
76
92
#[ cfg( feature = "experimental-tokio-console" ) ]
77
93
nextest_runner:: console:: init ( ) ;
78
94
79
95
match self . subcommand {
80
- NextestSubcommand :: Nextest ( app) => app. exec ( cli_args, output_writer) ,
81
- NextestSubcommand :: Ntr ( opts) => opts. exec ( cli_args, output_writer) ,
96
+ NextestSubcommand :: Nextest ( app) => app. exec ( cli_args, output , output_writer) ,
97
+ NextestSubcommand :: Ntr ( opts) => opts. exec ( cli_args, output , output_writer) ,
82
98
#[ cfg( unix) ]
83
- NextestSubcommand :: DoubleSpawn ( opts) => opts. exec ( ) ,
99
+ NextestSubcommand :: DoubleSpawn ( opts) => opts. exec ( output ) ,
84
100
}
85
101
}
86
102
}
@@ -111,9 +127,12 @@ impl AppOpts {
111
127
/// Execute the command.
112
128
///
113
129
/// Returns the exit code.
114
- fn exec ( self , cli_args : Vec < String > , output_writer : & mut OutputWriter ) -> Result < i32 > {
115
- let output = self . common . output . init ( ) ;
116
-
130
+ fn exec (
131
+ self ,
132
+ cli_args : Vec < String > ,
133
+ output : OutputContext ,
134
+ output_writer : & mut OutputWriter ,
135
+ ) -> Result < i32 > {
117
136
match self . command {
118
137
Command :: List {
119
138
cargo_options,
@@ -173,8 +192,8 @@ impl AppOpts {
173
192
}
174
193
Command :: ShowConfig { command } => command. exec (
175
194
self . common . manifest_path ,
176
- self . common . output ,
177
195
self . common . config_opts ,
196
+ output,
178
197
output_writer,
179
198
) ,
180
199
Command :: Self_ { command } => command. exec ( self . common . output ) ,
@@ -408,9 +427,12 @@ struct NtrOpts {
408
427
}
409
428
410
429
impl NtrOpts {
411
- fn exec ( self , cli_args : Vec < String > , output_writer : & mut OutputWriter ) -> Result < i32 > {
412
- let output = self . common . output . init ( ) ;
413
-
430
+ fn exec (
431
+ self ,
432
+ cli_args : Vec < String > ,
433
+ output : OutputContext ,
434
+ output_writer : & mut OutputWriter ,
435
+ ) -> Result < i32 > {
414
436
let base = BaseApp :: new (
415
437
output,
416
438
self . run_opts . reuse_build ,
@@ -1079,9 +1101,11 @@ impl BaseApp {
1079
1101
let host = HostPlatform :: current ( PlatformLibdir :: from_rustc_stdout (
1080
1102
RustcCli :: print_host_libdir ( ) . read ( ) ,
1081
1103
) ) ?;
1082
- let target = if let Some ( triple) =
1083
- discover_target_triple ( & cargo_configs, cargo_opts. target . as_deref ( ) )
1084
- {
1104
+ let target = if let Some ( triple) = discover_target_triple (
1105
+ & cargo_configs,
1106
+ cargo_opts. target . as_deref ( ) ,
1107
+ & output. stderr_styles ( ) ,
1108
+ ) {
1085
1109
let libdir = PlatformLibdir :: from_rustc_stdout (
1086
1110
RustcCli :: print_target_libdir ( & triple) . read ( ) ,
1087
1111
) ;
@@ -1189,6 +1213,8 @@ impl BaseApp {
1189
1213
}
1190
1214
1191
1215
fn check_version_config_initial ( & self , version_cfg : & NextestVersionConfig ) -> Result < ( ) > {
1216
+ let styles = self . output . stderr_styles ( ) ;
1217
+
1192
1218
match version_cfg. eval (
1193
1219
& self . current_version ,
1194
1220
self . config_opts . override_version_check ,
@@ -1210,8 +1236,8 @@ impl BaseApp {
1210
1236
} => {
1211
1237
log:: warn!(
1212
1238
"this repository recommends nextest version {}, but the current version is {}" ,
1213
- required. if_supports_color ( Stream :: Stderr , |x| x . bold( ) ) ,
1214
- current. if_supports_color ( Stream :: Stderr , |x| x . bold( ) ) ,
1239
+ required. style ( styles . bold) ,
1240
+ current. style ( styles . bold) ,
1215
1241
) ;
1216
1242
if let Some ( tool) = tool {
1217
1243
log:: info!(
@@ -1267,6 +1293,8 @@ impl BaseApp {
1267
1293
}
1268
1294
1269
1295
fn check_version_config_final ( & self , version_cfg : & NextestVersionConfig ) -> Result < ( ) > {
1296
+ let styles = self . output . stderr_styles ( ) ;
1297
+
1270
1298
match version_cfg. eval (
1271
1299
& self . current_version ,
1272
1300
self . config_opts . override_version_check ,
@@ -1288,8 +1316,8 @@ impl BaseApp {
1288
1316
} => {
1289
1317
log:: warn!(
1290
1318
"this repository recommends nextest version {}, but the current version is {}" ,
1291
- required. if_supports_color ( Stream :: Stderr , |x| x . bold( ) ) ,
1292
- current. if_supports_color ( Stream :: Stderr , |x| x . bold( ) ) ,
1319
+ required. style ( styles . bold) ,
1320
+ current. style ( styles . bold) ,
1293
1321
) ;
1294
1322
if let Some ( tool) = tool {
1295
1323
log:: info!(
@@ -1303,6 +1331,7 @@ impl BaseApp {
1303
1331
crate :: helpers:: log_needs_update (
1304
1332
log:: Level :: Info ,
1305
1333
crate :: helpers:: BYPASS_VERSION_TEXT ,
1334
+ & styles,
1306
1335
) ;
1307
1336
1308
1337
Ok ( ( ) )
@@ -1333,8 +1362,13 @@ impl BaseApp {
1333
1362
}
1334
1363
1335
1364
fn load_runner ( & self , build_platforms : & BuildPlatforms ) -> & TargetRunner {
1336
- self . target_runner
1337
- . get_or_init ( || runner_for_target ( & self . cargo_configs , build_platforms) )
1365
+ self . target_runner . get_or_init ( || {
1366
+ runner_for_target (
1367
+ & self . cargo_configs ,
1368
+ build_platforms,
1369
+ & self . output . stderr_styles ( ) ,
1370
+ )
1371
+ } )
1338
1372
}
1339
1373
1340
1374
fn exec_archive (
@@ -1798,11 +1832,10 @@ impl ShowConfigCommand {
1798
1832
fn exec (
1799
1833
self ,
1800
1834
manifest_path : Option < Utf8PathBuf > ,
1801
- output : OutputOpts ,
1802
1835
config_opts : ConfigOpts ,
1836
+ output : OutputContext ,
1803
1837
output_writer : & mut OutputWriter ,
1804
1838
) -> Result < i32 > {
1805
- let output = output. init ( ) ;
1806
1839
match self {
1807
1840
Self :: Version { } => {
1808
1841
let mut cargo_cli =
@@ -1856,13 +1889,15 @@ impl ShowConfigCommand {
1856
1889
crate :: helpers:: log_needs_update (
1857
1890
log:: Level :: Error ,
1858
1891
crate :: helpers:: BYPASS_VERSION_TEXT ,
1892
+ & output. stderr_styles ( ) ,
1859
1893
) ;
1860
1894
Ok ( nextest_metadata:: NextestExitCode :: REQUIRED_VERSION_NOT_MET )
1861
1895
}
1862
1896
NextestVersionEval :: Warn { .. } => {
1863
1897
crate :: helpers:: log_needs_update (
1864
1898
log:: Level :: Warn ,
1865
1899
crate :: helpers:: BYPASS_VERSION_TEXT ,
1900
+ & output. stderr_styles ( ) ,
1866
1901
) ;
1867
1902
Ok ( nextest_metadata:: NextestExitCode :: RECOMMENDED_VERSION_NOT_MET )
1868
1903
}
@@ -2199,6 +2234,7 @@ fn acquire_graph_data(
2199
2234
fn discover_target_triple (
2200
2235
cargo_configs : & CargoConfigs ,
2201
2236
target_cli_option : Option < & str > ,
2237
+ styles : & StderrStyles ,
2202
2238
) -> Option < TargetTriple > {
2203
2239
match TargetTriple :: find ( cargo_configs, target_cli_option) {
2204
2240
Ok ( Some ( triple) ) => {
@@ -2216,7 +2252,7 @@ fn discover_target_triple(
2216
2252
None
2217
2253
}
2218
2254
Err ( err) => {
2219
- warn_on_err ( "target triple" , & err) ;
2255
+ warn_on_err ( "target triple" , & err, styles ) ;
2220
2256
None
2221
2257
}
2222
2258
}
@@ -2225,52 +2261,48 @@ fn discover_target_triple(
2225
2261
fn runner_for_target (
2226
2262
cargo_configs : & CargoConfigs ,
2227
2263
build_platforms : & BuildPlatforms ,
2264
+ styles : & StderrStyles ,
2228
2265
) -> TargetRunner {
2229
2266
match TargetRunner :: new ( cargo_configs, build_platforms) {
2230
2267
Ok ( runner) => {
2231
2268
if build_platforms. target . is_some ( ) {
2232
2269
if let Some ( runner) = runner. target ( ) {
2233
- log_platform_runner ( "for the target platform, " , runner) ;
2270
+ log_platform_runner ( "for the target platform, " , runner, styles ) ;
2234
2271
}
2235
2272
if let Some ( runner) = runner. host ( ) {
2236
- log_platform_runner ( "for the host platform, " , runner) ;
2273
+ log_platform_runner ( "for the host platform, " , runner, styles ) ;
2237
2274
}
2238
2275
} else {
2239
2276
// If triple is None, then the host and target platforms use the same runner if
2240
2277
// any.
2241
2278
if let Some ( runner) = runner. target ( ) {
2242
- log_platform_runner ( "" , runner) ;
2279
+ log_platform_runner ( "" , runner, styles ) ;
2243
2280
}
2244
2281
}
2245
2282
runner
2246
2283
}
2247
2284
Err ( err) => {
2248
- warn_on_err ( "target runner" , & err) ;
2285
+ warn_on_err ( "target runner" , & err, styles ) ;
2249
2286
TargetRunner :: empty ( )
2250
2287
}
2251
2288
}
2252
2289
}
2253
2290
2254
- fn log_platform_runner ( prefix : & str , runner : & PlatformRunner ) {
2291
+ fn log_platform_runner ( prefix : & str , runner : & PlatformRunner , styles : & StderrStyles ) {
2255
2292
let runner_command = shell_words:: join ( std:: iter:: once ( runner. binary ( ) ) . chain ( runner. args ( ) ) ) ;
2256
2293
log:: info!(
2257
2294
"{prefix}using target runner `{}` defined by {}" ,
2258
- runner_command. if_supports_color ( Stream :: Stderr , |s| s . bold( ) ) ,
2295
+ runner_command. style ( styles . bold) ,
2259
2296
runner. source( )
2260
2297
)
2261
2298
}
2262
2299
2263
- fn warn_on_err ( thing : & str , err : & ( dyn std:: error:: Error ) ) {
2300
+ fn warn_on_err ( thing : & str , err : & ( dyn std:: error:: Error ) , styles : & StderrStyles ) {
2264
2301
let mut s = String :: with_capacity ( 256 ) ;
2265
2302
swrite ! ( s, "could not determine {thing}: {err}" ) ;
2266
2303
let mut next_error = err. source ( ) ;
2267
2304
while let Some ( err) = next_error {
2268
- swrite ! (
2269
- s,
2270
- "\n {} {}" ,
2271
- "caused by:" . if_supports_color( Stream :: Stderr , |s| s. style( Style :: new( ) . yellow( ) ) ) ,
2272
- err
2273
- ) ;
2305
+ swrite ! ( s, "\n {} {}" , "caused by:" . style( styles. warning_text) , err) ;
2274
2306
next_error = err. source ( ) ;
2275
2307
}
2276
2308
0 commit comments