@@ -6,11 +6,12 @@ use crate::runner::tasks::TaskCtx;
6
6
use crate :: runner:: OverrideResult ;
7
7
use cargo_metadata:: diagnostic:: DiagnosticLevel ;
8
8
use cargo_metadata:: { Message , Metadata , PackageId } ;
9
+ use docsrs_metadata:: Metadata as DocsrsMetadata ;
9
10
use failure:: Error ;
10
11
use remove_dir_all:: remove_dir_all;
11
12
use rustwide:: cmd:: { CommandError , ProcessLinesActions , SandboxBuilder } ;
12
13
use rustwide:: { Build , PrepareError } ;
13
- use std:: collections:: { BTreeSet , HashSet } ;
14
+ use std:: collections:: { BTreeSet , HashMap , HashSet } ;
14
15
use std:: convert:: TryFrom ;
15
16
16
17
fn failure_reason ( err : & Error ) -> FailureReason {
@@ -80,8 +81,9 @@ fn run_cargo<DB: WriteResults>(
80
81
args : & [ & str ] ,
81
82
check_errors : bool ,
82
83
local_packages_id : & HashSet < PackageId > ,
84
+ mut env : HashMap < & ' static str , String > ,
83
85
) -> Fallible < ( ) > {
84
- let mut rustflags = format ! ( "--cap-lints={}" , ctx. experiment. cap_lints. to_str( ) ) ;
86
+ let mut rustflags = format ! ( " --cap-lints={}" , ctx. experiment. cap_lints. to_str( ) ) ;
85
87
if let Some ( ref tc_rustflags) = ctx. toolchain . rustflags {
86
88
rustflags. push ( ' ' ) ;
87
89
rustflags. push_str ( tc_rustflags) ;
@@ -92,6 +94,7 @@ fn run_cargo<DB: WriteResults>(
92
94
} else {
93
95
"RUSTFLAGS"
94
96
} ;
97
+ env. entry ( rustflags_env) . or_default ( ) . push_str ( & rustflags) ;
95
98
96
99
let mut did_ice = false ;
97
100
let mut error_codes = BTreeSet :: new ( ) ;
@@ -146,8 +149,10 @@ fn run_cargo<DB: WriteResults>(
146
149
. cargo ( )
147
150
. args ( args)
148
151
. env ( "CARGO_INCREMENTAL" , "0" )
149
- . env ( "RUST_BACKTRACE" , "full" )
150
- . env ( rustflags_env, rustflags) ;
152
+ . env ( "RUST_BACKTRACE" , "full" ) ;
153
+ for ( var, data) in env {
154
+ command = command. env ( var, data) ;
155
+ }
151
156
152
157
if check_errors {
153
158
command = command. process_lines ( & mut detect_error) ;
@@ -238,13 +243,15 @@ fn build<DB: WriteResults>(
238
243
& [ "build" , "--frozen" , "--message-format=json" ] ,
239
244
true ,
240
245
local_packages_id,
246
+ HashMap :: default ( ) ,
241
247
) ?;
242
248
run_cargo (
243
249
ctx,
244
250
build_env,
245
251
& [ "test" , "--frozen" , "--no-run" , "--message-format=json" ] ,
246
252
true ,
247
253
local_packages_id,
254
+ HashMap :: default ( ) ,
248
255
) ?;
249
256
Ok ( ( ) )
250
257
}
@@ -256,6 +263,7 @@ fn test<DB: WriteResults>(ctx: &TaskCtx<DB>, build_env: &Build) -> Fallible<()>
256
263
& [ "test" , "--frozen" ] ,
257
264
false ,
258
265
& HashSet :: new ( ) ,
266
+ HashMap :: default ( ) ,
259
267
)
260
268
}
261
269
@@ -308,6 +316,7 @@ pub(super) fn test_check_only<DB: WriteResults>(
308
316
] ,
309
317
true ,
310
318
local_packages_id,
319
+ HashMap :: default ( ) ,
311
320
) {
312
321
Ok ( TestResult :: BuildFail ( failure_reason ( & err) ) )
313
322
} else {
@@ -332,6 +341,7 @@ pub(super) fn test_clippy_only<DB: WriteResults>(
332
341
] ,
333
342
true ,
334
343
local_packages_id,
344
+ HashMap :: default ( ) ,
335
345
) {
336
346
Ok ( TestResult :: BuildFail ( failure_reason ( & err) ) )
337
347
} else {
@@ -344,18 +354,21 @@ pub(super) fn test_rustdoc<DB: WriteResults>(
344
354
build_env : & Build ,
345
355
local_packages_id : & HashSet < PackageId > ,
346
356
) -> Fallible < TestResult > {
357
+ let src = build_env. host_source_dir ( ) ;
358
+ let metadata = DocsrsMetadata :: from_crate_root ( src) ?;
359
+ let cargo_args = metadata. cargo_args ( ) ;
360
+ assert_eq ! ( cargo_args[ 0 ] , "doc" ) ;
361
+ let mut cargo_args: Vec < _ > = cargo_args. iter ( ) . map ( |s| s. as_str ( ) ) . collect ( ) ;
362
+ cargo_args. push ( "frozen" ) ;
363
+ cargo_args. push ( "--message-format=json" ) ;
364
+
347
365
let res = run_cargo (
348
366
ctx,
349
367
build_env,
350
- & [
351
- "doc" ,
352
- "--frozen" ,
353
- "--no-deps" ,
354
- "--document-private-items" ,
355
- "--message-format=json" ,
356
- ] ,
368
+ & cargo_args,
357
369
true ,
358
370
local_packages_id,
371
+ metadata. environment_variables ( ) ,
359
372
) ;
360
373
361
374
// Make sure to remove the built documentation
0 commit comments