@@ -14,13 +14,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,22 @@ 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 rustdoc_flags = vec ! [
191
+ "--emit=unversioned-shared-resources,toolchain-shared-resources" . to_string( ) ,
192
+ ] ;
193
+ let res = self . execute_build (
194
+ HOST_TARGET ,
195
+ true ,
196
+ build,
197
+ & limits,
198
+ & metadata,
199
+ rustdoc_flags,
200
+ ) ?;
205
201
if !res. result . successful {
206
202
failure:: bail!( "failed to build dummy crate for {}" , self . rustc_version) ;
207
203
}
@@ -211,39 +207,7 @@ impl RustwideBuilder {
211
207
let dest = tempfile:: Builder :: new ( )
212
208
. prefix ( "essential-files" )
213
209
. 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
-
210
+ crate :: utils:: copy_dir_all ( source, & dest, |_| true ) ?;
247
211
add_path_into_database ( & self . storage , "" , & dest) ?;
248
212
conn. query (
249
213
"INSERT INTO config (name, value) VALUES ('rustc_version', $1) \
@@ -352,7 +316,8 @@ impl RustwideBuilder {
352
316
} = metadata. targets ( self . config . include_default_targets ) ;
353
317
354
318
// Perform an initial build
355
- let res = self . execute_build ( default_target, true , & build, & limits, & metadata) ?;
319
+ let res =
320
+ self . execute_build ( default_target, true , & build, & limits, & metadata, vec ! [ ] ) ?;
356
321
if res. result . successful {
357
322
if let Some ( name) = res. cargo_metadata . root ( ) . library_name ( ) {
358
323
let host_target = build. host_target_dir ( ) ;
@@ -458,7 +423,7 @@ impl RustwideBuilder {
458
423
successful_targets : & mut Vec < String > ,
459
424
metadata : & Metadata ,
460
425
) -> Result < ( ) > {
461
- let target_res = self . execute_build ( target, false , build, limits, metadata) ?;
426
+ let target_res = self . execute_build ( target, false , build, limits, metadata, Vec :: new ( ) ) ?;
462
427
if target_res. result . successful {
463
428
// Cargo is not giving any error and not generating documentation of some crates
464
429
// when we use a target compile options. Check documentation exists before
@@ -534,12 +499,11 @@ impl RustwideBuilder {
534
499
build : & Build ,
535
500
limits : & Limits ,
536
501
metadata : & Metadata ,
502
+ mut rustdoc_flags : Vec < String > ,
537
503
) -> Result < FullBuildResult > {
538
504
let cargo_metadata =
539
505
CargoMetadata :: load ( & self . workspace , & self . toolchain , & build. host_source_dir ( ) ) ?;
540
506
541
- let mut rustdoc_flags = Vec :: new ( ) ;
542
-
543
507
rustdoc_flags. extend ( vec ! [
544
508
"--resource-suffix" . to_string( ) ,
545
509
format!( "-{}" , parse_rustc_version( & self . rustc_version) ?) ,
0 commit comments