@@ -7,20 +7,20 @@ use crate::docbuilder::{crates::crates_from_path, Limits};
7
7
use crate :: error:: Result ;
8
8
use crate :: index:: api:: ReleaseData ;
9
9
use crate :: storage:: CompressionAlgorithms ;
10
- use crate :: utils:: { copy_doc_dir , parse_rustc_version, CargoMetadata , GithubUpdater } ;
10
+ use crate :: utils:: { copy_dir_all , parse_rustc_version, CargoMetadata , GithubUpdater } ;
11
11
use crate :: { db:: blacklist:: is_blacklisted, utils:: MetadataPackage } ;
12
12
use crate :: { Config , Context , Index , Metrics , Storage } ;
13
13
use docsrs_metadata:: { Metadata , DEFAULT_TARGETS , HOST_TARGET } ;
14
14
use failure:: ResultExt ;
15
15
use log:: { debug, info, warn, LevelFilter } ;
16
16
use postgres:: Client ;
17
- use rustwide:: cmd:: { Binary , Command , SandboxBuilder , SandboxImage } ;
17
+ use rustwide:: cmd:: { Command , SandboxBuilder , SandboxImage } ;
18
18
use rustwide:: logging:: { self , LogStorage } ;
19
19
use rustwide:: toolchain:: ToolchainError ;
20
20
use rustwide:: { Build , Crate , Toolchain , Workspace , WorkspaceBuilder } ;
21
21
use serde_json:: Value ;
22
22
use std:: collections:: { HashMap , HashSet } ;
23
- use std:: path:: { Path , PathBuf } ;
23
+ use std:: path:: Path ;
24
24
use std:: sync:: Arc ;
25
25
26
26
const USER_AGENT : & str = "docs.rs builder (https://github.com/rust-lang/docs.rs)" ;
@@ -182,26 +182,12 @@ impl RustwideBuilder {
182
182
let krate = Crate :: crates_io ( DUMMY_CRATE_NAME , DUMMY_CRATE_VERSION ) ;
183
183
krate. fetch ( & self . workspace ) ?;
184
184
185
- // TODO: remove this when https://github.com/rust-lang/rustwide/pull/53 lands.
186
- struct Rustdoc < ' a > {
187
- toolchain_version : & ' a str ,
188
- }
189
- impl rustwide:: cmd:: Runnable for Rustdoc < ' _ > {
190
- fn name ( & self ) -> Binary {
191
- Binary :: ManagedByRustwide ( PathBuf :: from ( "rustdoc" ) )
192
- }
193
-
194
- fn prepare_command < ' w , ' pl > ( & self , cmd : Command < ' w , ' pl > ) -> Command < ' w , ' pl > {
195
- cmd. args ( & [ format ! ( "+{}" , self . toolchain_version) ] )
196
- }
197
- }
198
-
199
185
build_dir
200
186
. build ( & self . toolchain , & krate, self . prepare_sandbox ( & limits) )
201
187
. run ( |build| {
202
188
let metadata = Metadata :: from_crate_root ( & build. host_source_dir ( ) ) ?;
203
189
204
- let res = self . execute_build ( HOST_TARGET , true , build, & limits, & metadata) ?;
190
+ let res = self . execute_build ( HOST_TARGET , true , build, & limits, & metadata, true ) ?;
205
191
if !res. result . successful {
206
192
failure:: bail!( "failed to build dummy crate for {}" , self . rustc_version) ;
207
193
}
@@ -211,39 +197,7 @@ impl RustwideBuilder {
211
197
let dest = tempfile:: Builder :: new ( )
212
198
. prefix ( "essential-files" )
213
199
. tempdir ( ) ?;
214
-
215
- let toolchain_version = self . toolchain . as_dist ( ) . unwrap ( ) . name ( ) ;
216
- let output = build. cmd ( Rustdoc { toolchain_version } )
217
- . args ( & [ "-Zunstable-options" , "--print=unversioned-files" ] )
218
- . run_capture ( )
219
- . context ( "failed to learn about unversioned files - make sure you have nightly-2021-03-07 or later" ) ?;
220
- let essential_files_unversioned = output
221
- . stdout_lines ( )
222
- . iter ( )
223
- . map ( PathBuf :: from) ;
224
- let resource_suffix = format ! ( "-{}" , parse_rustc_version( & self . rustc_version) ?) ;
225
- let essential_files_versioned: Vec < _ > = source. read_dir ( ) ?
226
- . collect :: < std:: result:: Result < Vec < _ > , _ > > ( ) ?
227
- . into_iter ( )
228
- . filter_map ( |entry| {
229
- entry. file_name ( ) . to_str ( ) . and_then ( |name| if name. contains ( & resource_suffix) {
230
- Some ( entry. file_name ( ) . into ( ) )
231
- } else { None } )
232
- } )
233
- . collect ( ) ;
234
- for file_name in essential_files_unversioned. chain ( essential_files_versioned) {
235
- let source_path = source. join ( & file_name) ;
236
- let dest_path = dest. path ( ) . join ( & file_name) ;
237
- debug ! ( "copying {} to {}" , source_path. display( ) , dest_path. display( ) ) ;
238
- :: std:: fs:: copy ( & source_path, & dest_path) . with_context ( |_| {
239
- format ! (
240
- "couldn't copy '{}' to '{}'" ,
241
- source_path. display( ) ,
242
- dest_path. display( )
243
- )
244
- } ) ?;
245
- }
246
-
200
+ copy_dir_all ( source, & dest) ?;
247
201
add_path_into_database ( & self . storage , "" , & dest) ?;
248
202
conn. query (
249
203
"INSERT INTO config (name, value) VALUES ('rustc_version', $1) \
@@ -352,7 +306,8 @@ impl RustwideBuilder {
352
306
} = metadata. targets ( self . config . include_default_targets ) ;
353
307
354
308
// Perform an initial build
355
- let res = self . execute_build ( default_target, true , & build, & limits, & metadata) ?;
309
+ let res =
310
+ self . execute_build ( default_target, true , & build, & limits, & metadata, false ) ?;
356
311
if res. result . successful {
357
312
if let Some ( name) = res. cargo_metadata . root ( ) . library_name ( ) {
358
313
let host_target = build. host_target_dir ( ) ;
@@ -458,7 +413,7 @@ impl RustwideBuilder {
458
413
successful_targets : & mut Vec < String > ,
459
414
metadata : & Metadata ,
460
415
) -> Result < ( ) > {
461
- let target_res = self . execute_build ( target, false , build, limits, metadata) ?;
416
+ let target_res = self . execute_build ( target, false , build, limits, metadata, false ) ?;
462
417
if target_res. result . successful {
463
418
// Cargo is not giving any error and not generating documentation of some crates
464
419
// when we use a target compile options. Check documentation exists before
@@ -534,12 +489,17 @@ impl RustwideBuilder {
534
489
build : & Build ,
535
490
limits : & Limits ,
536
491
metadata : & Metadata ,
492
+ create_essential_files : bool ,
537
493
) -> Result < FullBuildResult > {
538
494
let cargo_metadata =
539
495
CargoMetadata :: load ( & self . workspace , & self . toolchain , & build. host_source_dir ( ) ) ?;
540
496
541
- let mut rustdoc_flags = Vec :: new ( ) ;
542
-
497
+ let mut rustdoc_flags = vec ! [ if create_essential_files {
498
+ "--emit=unversioned-shared-resources,toolchain-shared-resources"
499
+ } else {
500
+ "--emit=invocation-specific"
501
+ }
502
+ . to_string( ) ] ;
543
503
rustdoc_flags. extend ( vec ! [
544
504
"--resource-suffix" . to_string( ) ,
545
505
format!( "-{}" , parse_rustc_version( & self . rustc_version) ?) ,
@@ -656,7 +616,7 @@ impl RustwideBuilder {
656
616
}
657
617
658
618
info ! ( "{} {}" , source. display( ) , dest. display( ) ) ;
659
- copy_doc_dir ( source, dest)
619
+ copy_dir_all ( source, dest) . map_err ( Into :: into )
660
620
}
661
621
662
622
fn upload_docs (
0 commit comments