@@ -3,22 +3,25 @@ use crate::db::CratesIoData;
33use crate :: docbuilder:: BuildResult ;
44use crate :: utils:: { Dependency , MetadataPackage , Target } ;
55use failure:: Error ;
6- use rustc_serialize:: json:: Json ;
76
8- pub ( crate ) struct FakeRelease < ' db > {
9- db : & ' db TestDatabase ,
7+ #[ must_use = "FakeRelease does nothing until you call .create()" ]
8+ pub ( crate ) struct FakeRelease < ' a > {
9+ db : & ' a TestDatabase ,
1010 package : MetadataPackage ,
1111 build_result : BuildResult ,
12- files : Option < Json > ,
12+ /// name, content
13+ source_files : Vec < ( & ' a str , & ' a [ u8 ] ) > ,
14+ /// name, content
15+ rustdoc_files : Vec < ( & ' a str , & ' a [ u8 ] ) > ,
1316 doc_targets : Vec < String > ,
1417 default_target : Option < String > ,
1518 cratesio_data : CratesIoData ,
1619 has_docs : bool ,
1720 has_examples : bool ,
1821}
1922
20- impl < ' db > FakeRelease < ' db > {
21- pub ( super ) fn new ( db : & ' db TestDatabase ) -> Self {
23+ impl < ' a > FakeRelease < ' a > {
24+ pub ( super ) fn new ( db : & ' a TestDatabase ) -> Self {
2225 FakeRelease {
2326 db,
2427 package : MetadataPackage {
@@ -46,7 +49,8 @@ impl<'db> FakeRelease<'db> {
4649 build_log : "It works!" . into ( ) ,
4750 successful : true ,
4851 } ,
49- files : None ,
52+ source_files : Vec :: new ( ) ,
53+ rustdoc_files : Vec :: new ( ) ,
5054 doc_targets : Vec :: new ( ) ,
5155 default_target : None ,
5256 cratesio_data : CratesIoData {
@@ -81,15 +85,38 @@ impl<'db> FakeRelease<'db> {
8185 self
8286 }
8387
88+ pub ( crate ) fn rustdoc_file ( mut self , path : & ' a str , data : & ' a [ u8 ] ) -> Self {
89+ self . rustdoc_files . push ( ( path, data) ) ;
90+ self
91+ }
92+
8493 pub ( crate ) fn create ( self ) -> Result < i32 , Error > {
8594 let tempdir = tempdir:: TempDir :: new ( "docs.rs-fake" ) ?;
8695
96+ let upload_files = |prefix : & str , files : & [ ( & str , & [ u8 ] ) ] | {
97+ let path_prefix = tempdir. path ( ) . join ( prefix) ;
98+ std:: fs:: create_dir ( & path_prefix) ?;
99+
100+ for ( path, data) in files {
101+ let file = path_prefix. join ( & path) ;
102+ std:: fs:: write ( file, data) ?;
103+ }
104+
105+ let prefix = format ! ( "{}/{}/{}" , prefix, self . package. name, self . package. version) ;
106+ crate :: db:: add_path_into_database ( & self . db . conn ( ) , & prefix, path_prefix)
107+ } ;
108+
109+ let rustdoc_meta = upload_files ( "rustdoc" , & self . rustdoc_files ) ?;
110+ log:: debug!( "added rustdoc files {}" , rustdoc_meta) ;
111+ let source_meta = upload_files ( "source" , & self . source_files ) ?;
112+ log:: debug!( "added source files {}" , source_meta) ;
113+
87114 let release_id = crate :: db:: add_package_into_database (
88115 & self . db . conn ( ) ,
89116 & self . package ,
90117 tempdir. path ( ) ,
91118 & self . build_result ,
92- self . files ,
119+ Some ( source_meta ) ,
93120 self . doc_targets ,
94121 & self . default_target ,
95122 & self . cratesio_data ,
0 commit comments