@@ -5,7 +5,6 @@ use crate::db::{
5
5
} ;
6
6
use crate :: docbuilder:: { crates:: crates_from_path, Limits } ;
7
7
use crate :: error:: Result ;
8
- use crate :: index:: api:: ReleaseData ;
9
8
use crate :: repositories:: RepositoryStatsUpdater ;
10
9
use crate :: storage:: { rustdoc_archive_path, source_archive_path} ;
11
10
use crate :: utils:: {
@@ -16,7 +15,7 @@ use crate::RUSTDOC_STATIC_STORAGE_PREFIX;
16
15
use crate :: { db:: blacklist:: is_blacklisted, utils:: MetadataPackage } ;
17
16
use crate :: { Config , Context , Index , Metrics , Storage } ;
18
17
use anyhow:: { anyhow, bail, Context as _, Error } ;
19
- use docsrs_metadata:: { Metadata , DEFAULT_TARGETS , HOST_TARGET } ;
18
+ use docsrs_metadata:: { BuildTargets , Metadata , DEFAULT_TARGETS , HOST_TARGET } ;
20
19
use failure:: Error as FailureError ;
21
20
use postgres:: Client ;
22
21
use regex:: Regex ;
@@ -367,6 +366,7 @@ impl RustwideBuilder {
367
366
let mut build_dir = self . workspace . build_dir ( & format ! ( "{name}-{version}" ) ) ;
368
367
build_dir. purge ( ) . map_err ( FailureError :: compat) ?;
369
368
369
+ let is_local = matches ! ( kind, PackageKind :: Local ( _) ) ;
370
370
let krate = match kind {
371
371
PackageKind :: Local ( path) => Crate :: local ( path) ,
372
372
PackageKind :: CratesIo => Crate :: crates_io ( name, version) ,
@@ -383,16 +383,19 @@ impl RustwideBuilder {
383
383
let successful = build_dir
384
384
. build ( & self . toolchain , & krate, self . prepare_sandbox ( & limits) )
385
385
. run ( |build| {
386
- ( || -> Result < bool > {
387
- use docsrs_metadata:: BuildTargets ;
386
+ let metadata = Metadata :: from_crate_root ( build. host_source_dir ( ) ) ?;
387
+ let BuildTargets {
388
+ default_target,
389
+ other_targets,
390
+ } = metadata. targets ( self . config . include_default_targets ) ;
391
+ let mut targets = vec ! [ default_target] ;
392
+ targets. extend ( & other_targets) ;
393
+ // Fetch this before we enter the sandbox, so networking isn't blocked.
394
+ build. fetch_build_std_dependencies ( & targets) ?;
388
395
396
+ ( || -> Result < bool > {
389
397
let mut has_docs = false ;
390
398
let mut successful_targets = Vec :: new ( ) ;
391
- let metadata = Metadata :: from_crate_root ( build. host_source_dir ( ) ) ?;
392
- let BuildTargets {
393
- default_target,
394
- other_targets,
395
- } = metadata. targets ( self . config . include_default_targets ) ;
396
399
397
400
// Perform an initial build
398
401
let mut res =
@@ -488,19 +491,24 @@ impl RustwideBuilder {
488
491
self . metrics . non_library_builds . inc ( ) ;
489
492
}
490
493
491
- let release_data = match self
492
- . index
493
- . api ( )
494
- . get_release_data ( name, version)
495
- . with_context ( || {
496
- format ! ( "could not fetch releases-data for {name}-{version}" )
497
- } ) {
498
- Ok ( data) => data,
499
- Err ( err) => {
500
- report_error ( & err) ;
501
- ReleaseData :: default ( )
494
+ let release_data = if !is_local {
495
+ match self
496
+ . index
497
+ . api ( )
498
+ . get_release_data ( name, version)
499
+ . with_context ( || {
500
+ format ! ( "could not fetch releases-data for {name}-{version}" )
501
+ } ) {
502
+ Ok ( data) => Some ( data) ,
503
+ Err ( err) => {
504
+ report_error ( & err) ;
505
+ None
506
+ }
502
507
}
503
- } ;
508
+ } else {
509
+ None
510
+ }
511
+ . unwrap_or_default ( ) ;
504
512
505
513
let cargo_metadata = res. cargo_metadata . root ( ) ;
506
514
let repository = self . get_repo ( cargo_metadata) ?;
@@ -530,11 +538,13 @@ impl RustwideBuilder {
530
538
self . storage . store_one ( build_log_path, res. build_log ) ?;
531
539
532
540
// Some crates.io crate data is mutable, so we proactively update it during a release
533
- match self . index . api ( ) . get_crate_data ( name) {
534
- Ok ( crate_data) => {
535
- update_crate_data_in_database ( & mut conn, name, & crate_data) ?
541
+ if !is_local {
542
+ match self . index . api ( ) . get_crate_data ( name) {
543
+ Ok ( crate_data) => {
544
+ update_crate_data_in_database ( & mut conn, name, & crate_data) ?
545
+ }
546
+ Err ( err) => warn ! ( "{:#?}" , err) ,
536
547
}
537
- Err ( err) => warn ! ( "{:#?}" , err) ,
538
548
}
539
549
540
550
if res. result . successful {
@@ -725,14 +735,6 @@ impl RustwideBuilder {
725
735
limits : & Limits ,
726
736
mut rustdoc_flags_extras : Vec < String > ,
727
737
) -> Result < Command < ' ws , ' pl > > {
728
- // If the explicit target is not a tier one target, we need to install it.
729
- if !docsrs_metadata:: DEFAULT_TARGETS . contains ( & target) {
730
- // This is a no-op if the target is already installed.
731
- self . toolchain
732
- . add_target ( & self . workspace , target)
733
- . map_err ( FailureError :: compat) ?;
734
- }
735
-
736
738
// Add docs.rs specific arguments
737
739
let mut cargo_args = vec ! [
738
740
"--offline" . into( ) ,
@@ -781,6 +783,18 @@ impl RustwideBuilder {
781
783
rustdoc_flags_extras. extend ( UNCONDITIONAL_ARGS . iter ( ) . map ( |& s| s. to_owned ( ) ) ) ;
782
784
let cargo_args = metadata. cargo_args ( & cargo_args, & rustdoc_flags_extras) ;
783
785
786
+ // If the explicit target is not a tier one target, we need to install it.
787
+ let has_build_std = cargo_args. windows ( 2 ) . any ( |args| {
788
+ args[ 0 ] . starts_with ( "-Zbuild-std" )
789
+ || ( args[ 0 ] == "-Z" && args[ 1 ] . starts_with ( "build-std" ) )
790
+ } ) || cargo_args. last ( ) . unwrap ( ) . starts_with ( "-Zbuild-std" ) ;
791
+ if !docsrs_metadata:: DEFAULT_TARGETS . contains ( & target) && !has_build_std {
792
+ // This is a no-op if the target is already installed.
793
+ self . toolchain
794
+ . add_target ( & self . workspace , target)
795
+ . map_err ( FailureError :: compat) ?;
796
+ }
797
+
784
798
let mut command = build
785
799
. cargo ( )
786
800
. timeout ( Some ( limits. timeout ( ) ) )
@@ -1218,4 +1232,13 @@ mod tests {
1218
1232
Ok ( ( ) )
1219
1233
} ) ;
1220
1234
}
1235
+
1236
+ #[ test]
1237
+ #[ ignore]
1238
+ fn test_build_std ( ) {
1239
+ wrapper ( |env| {
1240
+ assert ! ( RustwideBuilder :: init( env) ?. build_local_package( Path :: new( "tests/build-std" ) ) ?) ;
1241
+ Ok ( ( ) )
1242
+ } )
1243
+ }
1221
1244
}
0 commit comments