@@ -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 {
@@ -83,6 +84,7 @@ fn run_cargo<DB: WriteResults>(
83
84
args : & [ & str ] ,
84
85
check_errors : bool ,
85
86
local_packages_id : & HashSet < PackageId > ,
87
+ env : HashMap < & ' static str , String > ,
86
88
) -> Fallible < ( ) > {
87
89
let mut rustflags = format ! ( "--cap-lints={}" , ctx. experiment. cap_lints. to_str( ) ) ;
88
90
if let Some ( ref tc_rustflags) = ctx. toolchain . rustflags {
@@ -151,6 +153,9 @@ fn run_cargo<DB: WriteResults>(
151
153
. env ( "CARGO_INCREMENTAL" , "0" )
152
154
. env ( "RUST_BACKTRACE" , "full" )
153
155
. env ( rustflags_env, rustflags) ;
156
+ for ( var, data) in env {
157
+ command = command. env ( var, data) ;
158
+ }
154
159
155
160
if check_errors {
156
161
command = command. process_lines ( & mut detect_error) ;
@@ -241,13 +246,15 @@ fn build<DB: WriteResults>(
241
246
& [ "build" , "--frozen" , "--message-format=json" ] ,
242
247
true ,
243
248
local_packages_id,
249
+ HashMap :: default ( ) ,
244
250
) ?;
245
251
run_cargo (
246
252
ctx,
247
253
build_env,
248
254
& [ "test" , "--frozen" , "--no-run" , "--message-format=json" ] ,
249
255
true ,
250
256
local_packages_id,
257
+ HashMap :: default ( ) ,
251
258
) ?;
252
259
Ok ( ( ) )
253
260
}
@@ -259,6 +266,7 @@ fn test<DB: WriteResults>(ctx: &TaskCtx<DB>, build_env: &Build) -> Fallible<()>
259
266
& [ "test" , "--frozen" ] ,
260
267
false ,
261
268
& HashSet :: new ( ) ,
269
+ HashMap :: default ( ) ,
262
270
)
263
271
}
264
272
@@ -311,6 +319,7 @@ pub(super) fn test_check_only<DB: WriteResults>(
311
319
] ,
312
320
true ,
313
321
local_packages_id,
322
+ HashMap :: default ( ) ,
314
323
) {
315
324
Ok ( TestResult :: BuildFail ( failure_reason ( & err) ) )
316
325
} else {
@@ -335,6 +344,7 @@ pub(super) fn test_clippy_only<DB: WriteResults>(
335
344
] ,
336
345
true ,
337
346
local_packages_id,
347
+ HashMap :: default ( ) ,
338
348
) {
339
349
Ok ( TestResult :: BuildFail ( failure_reason ( & err) ) )
340
350
} else {
@@ -347,18 +357,26 @@ pub(super) fn test_rustdoc<DB: WriteResults>(
347
357
build_env : & Build ,
348
358
local_packages_id : & HashSet < PackageId > ,
349
359
) -> Fallible < TestResult > {
360
+ let src = build_env. host_source_dir ( ) ;
361
+ let metadata = DocsrsMetadata :: from_crate_root ( src) ?;
362
+ let cargo_args = metadata. cargo_args (
363
+ & [
364
+ "--frozen" . into ( ) ,
365
+ "--document-private-items" . into ( ) ,
366
+ "--message-format=json" . into ( ) ,
367
+ ] ,
368
+ & [ ] ,
369
+ ) ;
370
+ assert_eq ! ( cargo_args[ 0 ] , "rustdoc" ) ;
371
+ let cargo_args: Vec < _ > = cargo_args. iter ( ) . map ( |s| s. as_str ( ) ) . collect ( ) ;
372
+
350
373
let res = run_cargo (
351
374
ctx,
352
375
build_env,
353
- & [
354
- "doc" ,
355
- "--frozen" ,
356
- "--no-deps" ,
357
- "--document-private-items" ,
358
- "--message-format=json" ,
359
- ] ,
376
+ & cargo_args,
360
377
true ,
361
378
local_packages_id,
379
+ metadata. environment_variables ( ) ,
362
380
) ;
363
381
364
382
// Make sure to remove the built documentation
0 commit comments