@@ -182,6 +182,20 @@ 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
+
185
199
build_dir
186
200
. build ( & self . toolchain , & krate, self . prepare_sandbox ( & limits) )
187
201
. run ( |build| {
@@ -198,14 +212,29 @@ impl RustwideBuilder {
198
212
. prefix ( "essential-files" )
199
213
. tempdir ( ) ?;
200
214
201
- for file_name in self . essential_files ( build, & source) ? {
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) {
202
235
let source_path = source. join ( & file_name) ;
203
236
let dest_path = dest. path ( ) . join ( & file_name) ;
204
- debug ! (
205
- "copying {} to {}" ,
206
- source_path. display( ) ,
207
- dest_path. display( )
208
- ) ;
237
+ debug ! ( "copying {} to {}" , source_path. display( ) , dest_path. display( ) ) ;
209
238
:: std:: fs:: copy ( & source_path, & dest_path) . with_context ( |_| {
210
239
format ! (
211
240
"couldn't copy '{}' to '{}'" ,
@@ -334,7 +363,7 @@ impl RustwideBuilder {
334
363
let mut algs = HashSet :: new ( ) ;
335
364
if has_docs {
336
365
debug ! ( "adding documentation for the default target to the database" ) ;
337
- self . copy_docs ( build, local_storage. path ( ) , "" , true ) ?;
366
+ self . copy_docs ( & build. host_target_dir ( ) , local_storage. path ( ) , "" , true ) ?;
338
367
339
368
successful_targets. push ( res. target . clone ( ) ) ;
340
369
@@ -436,7 +465,7 @@ impl RustwideBuilder {
436
465
// adding target to successfully_targets.
437
466
if build. host_target_dir ( ) . join ( target) . join ( "doc" ) . is_dir ( ) {
438
467
debug ! ( "adding documentation for target {} to the database" , target, ) ;
439
- self . copy_docs ( build, local_storage, target, false ) ?;
468
+ self . copy_docs ( & build. host_target_dir ( ) , local_storage, target, false ) ?;
440
469
successful_targets. push ( target. to_string ( ) ) ;
441
470
}
442
471
}
@@ -609,12 +638,12 @@ impl RustwideBuilder {
609
638
610
639
fn copy_docs (
611
640
& self ,
612
- build : & Build ,
641
+ target_dir : & Path ,
613
642
local_storage : & Path ,
614
643
target : & str ,
615
644
is_default_target : bool ,
616
645
) -> Result < ( ) > {
617
- let source = build . host_target_dir ( ) . join ( target) . join ( "doc" ) ;
646
+ let source = target_dir . join ( target) . join ( "doc" ) ;
618
647
619
648
let mut dest = local_storage. to_path_buf ( ) ;
620
649
// only add target name to destination directory when we are copying a non-default target.
@@ -627,49 +656,7 @@ impl RustwideBuilder {
627
656
}
628
657
629
658
info ! ( "{} {}" , source. display( ) , dest. display( ) ) ;
630
- let essential_files = self . essential_files ( build, & source) ?;
631
- copy_doc_dir ( source, dest, & essential_files)
632
- }
633
-
634
- fn essential_files ( & self , build : & Build , doc_dir : & Path ) -> Result < Vec < PathBuf > > {
635
- // TODO: remove this when https://github.com/rust-lang/rustwide/pull/53 lands.
636
- struct Rustdoc < ' a > {
637
- toolchain_version : & ' a str ,
638
- }
639
- impl rustwide:: cmd:: Runnable for Rustdoc < ' _ > {
640
- fn name ( & self ) -> Binary {
641
- Binary :: ManagedByRustwide ( PathBuf :: from ( "rustdoc" ) )
642
- }
643
-
644
- fn prepare_command < ' w , ' pl > ( & self , cmd : Command < ' w , ' pl > ) -> Command < ' w , ' pl > {
645
- cmd. args ( & [ format ! ( "+{}" , self . toolchain_version) ] )
646
- }
647
- }
648
-
649
- let toolchain_version = self . toolchain . as_dist ( ) . unwrap ( ) . name ( ) ;
650
- let output = build. cmd ( Rustdoc { toolchain_version } )
651
- . args ( & [ "-Zunstable-options" , "--print=unversioned-files" ] )
652
- . run_capture ( )
653
- . context ( "failed to learn about unversioned files - make sure you have nightly-2021-03-07 or later" ) ?;
654
- let mut essential_files: Vec < _ > = output. stdout_lines ( ) . iter ( ) . map ( PathBuf :: from) . collect ( ) ;
655
- let resource_suffix = format ! ( "-{}" , parse_rustc_version( & self . rustc_version) ?) ;
656
-
657
- let essential_files_versioned = doc_dir
658
- . read_dir ( ) ?
659
- . collect :: < std:: result:: Result < Vec < _ > , _ > > ( ) ?
660
- . into_iter ( )
661
- . filter_map ( |entry| {
662
- entry. file_name ( ) . to_str ( ) . and_then ( |name| {
663
- if name. contains ( & resource_suffix) {
664
- Some ( entry. file_name ( ) . into ( ) )
665
- } else {
666
- None
667
- }
668
- } )
669
- } ) ;
670
-
671
- essential_files. extend ( essential_files_versioned) ;
672
- Ok ( essential_files)
659
+ copy_doc_dir ( source, dest)
673
660
}
674
661
675
662
fn upload_docs (
0 commit comments