@@ -6,11 +6,12 @@ use crate::runner::tasks::TaskCtx;
66use crate :: runner:: OverrideResult ;
77use cargo_metadata:: diagnostic:: DiagnosticLevel ;
88use cargo_metadata:: { Message , Metadata , PackageId } ;
9+ use docsrs_metadata:: Metadata as DocsrsMetadata ;
910use failure:: Error ;
1011use remove_dir_all:: remove_dir_all;
1112use rustwide:: cmd:: { CommandError , ProcessLinesActions , SandboxBuilder } ;
1213use rustwide:: { Build , PrepareError } ;
13- use std:: collections:: { BTreeSet , HashSet } ;
14+ use std:: collections:: { BTreeSet , HashMap , HashSet } ;
1415use std:: convert:: TryFrom ;
1516
1617fn failure_reason ( err : & Error ) -> FailureReason {
@@ -83,6 +84,7 @@ fn run_cargo<DB: WriteResults>(
8384 args : & [ & str ] ,
8485 check_errors : bool ,
8586 local_packages_id : & HashSet < PackageId > ,
87+ env : HashMap < & ' static str , String > ,
8688) -> Fallible < ( ) > {
8789 let mut rustflags = format ! ( "--cap-lints={}" , ctx. experiment. cap_lints. to_str( ) ) ;
8890 if let Some ( ref tc_rustflags) = ctx. toolchain . rustflags {
@@ -151,6 +153,9 @@ fn run_cargo<DB: WriteResults>(
151153 . env ( "CARGO_INCREMENTAL" , "0" )
152154 . env ( "RUST_BACKTRACE" , "full" )
153155 . env ( rustflags_env, rustflags) ;
156+ for ( var, data) in env {
157+ command = command. env ( var, data) ;
158+ }
154159
155160 if check_errors {
156161 command = command. process_lines ( & mut detect_error) ;
@@ -241,13 +246,15 @@ fn build<DB: WriteResults>(
241246 & [ "build" , "--frozen" , "--message-format=json" ] ,
242247 true ,
243248 local_packages_id,
249+ HashMap :: default ( ) ,
244250 ) ?;
245251 run_cargo (
246252 ctx,
247253 build_env,
248254 & [ "test" , "--frozen" , "--no-run" , "--message-format=json" ] ,
249255 true ,
250256 local_packages_id,
257+ HashMap :: default ( ) ,
251258 ) ?;
252259 Ok ( ( ) )
253260}
@@ -259,6 +266,7 @@ fn test<DB: WriteResults>(ctx: &TaskCtx<DB>, build_env: &Build) -> Fallible<()>
259266 & [ "test" , "--frozen" ] ,
260267 false ,
261268 & HashSet :: new ( ) ,
269+ HashMap :: default ( ) ,
262270 )
263271}
264272
@@ -311,6 +319,7 @@ pub(super) fn test_check_only<DB: WriteResults>(
311319 ] ,
312320 true ,
313321 local_packages_id,
322+ HashMap :: default ( ) ,
314323 ) {
315324 Ok ( TestResult :: BuildFail ( failure_reason ( & err) ) )
316325 } else {
@@ -335,6 +344,7 @@ pub(super) fn test_clippy_only<DB: WriteResults>(
335344 ] ,
336345 true ,
337346 local_packages_id,
347+ HashMap :: default ( ) ,
338348 ) {
339349 Ok ( TestResult :: BuildFail ( failure_reason ( & err) ) )
340350 } else {
@@ -347,18 +357,26 @@ pub(super) fn test_rustdoc<DB: WriteResults>(
347357 build_env : & Build ,
348358 local_packages_id : & HashSet < PackageId > ,
349359) -> 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+
350373 let res = run_cargo (
351374 ctx,
352375 build_env,
353- & [
354- "doc" ,
355- "--frozen" ,
356- "--no-deps" ,
357- "--document-private-items" ,
358- "--message-format=json" ,
359- ] ,
376+ & cargo_args,
360377 true ,
361378 local_packages_id,
379+ metadata. environment_variables ( ) ,
362380 ) ;
363381
364382 // Make sure to remove the built documentation
0 commit comments