@@ -182,6 +182,20 @@ impl RustwideBuilder {
182182 let krate = Crate :: crates_io ( DUMMY_CRATE_NAME , DUMMY_CRATE_VERSION ) ;
183183 krate. fetch ( & self . workspace ) ?;
184184
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+
185199 build_dir
186200 . build ( & self . toolchain , & krate, self . prepare_sandbox ( & limits) )
187201 . run ( |build| {
@@ -198,14 +212,29 @@ impl RustwideBuilder {
198212 . prefix ( "essential-files" )
199213 . tempdir ( ) ?;
200214
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) {
202235 let source_path = source. join ( & file_name) ;
203236 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( ) ) ;
209238 :: std:: fs:: copy ( & source_path, & dest_path) . with_context ( |_| {
210239 format ! (
211240 "couldn't copy '{}' to '{}'" ,
@@ -334,7 +363,7 @@ impl RustwideBuilder {
334363 let mut algs = HashSet :: new ( ) ;
335364 if has_docs {
336365 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 ) ?;
338367
339368 successful_targets. push ( res. target . clone ( ) ) ;
340369
@@ -436,7 +465,7 @@ impl RustwideBuilder {
436465 // adding target to successfully_targets.
437466 if build. host_target_dir ( ) . join ( target) . join ( "doc" ) . is_dir ( ) {
438467 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 ) ?;
440469 successful_targets. push ( target. to_string ( ) ) ;
441470 }
442471 }
@@ -609,12 +638,12 @@ impl RustwideBuilder {
609638
610639 fn copy_docs (
611640 & self ,
612- build : & Build ,
641+ target_dir : & Path ,
613642 local_storage : & Path ,
614643 target : & str ,
615644 is_default_target : bool ,
616645 ) -> Result < ( ) > {
617- let source = build . host_target_dir ( ) . join ( target) . join ( "doc" ) ;
646+ let source = target_dir . join ( target) . join ( "doc" ) ;
618647
619648 let mut dest = local_storage. to_path_buf ( ) ;
620649 // only add target name to destination directory when we are copying a non-default target.
@@ -627,49 +656,7 @@ impl RustwideBuilder {
627656 }
628657
629658 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)
673660 }
674661
675662 fn upload_docs (
0 commit comments