@@ -3,14 +3,16 @@ use crate::db::CratesIoData;
3
3
use crate :: docbuilder:: BuildResult ;
4
4
use crate :: utils:: { Dependency , MetadataPackage , Target } ;
5
5
use failure:: Error ;
6
- use rustc_serialize:: json:: Json ;
7
6
8
7
#[ must_use = "FakeRelease does nothing until you call .create()" ]
9
8
pub ( crate ) struct FakeRelease < ' db > {
10
9
db : & ' db TestDatabase ,
11
10
package : MetadataPackage ,
12
11
build_result : BuildResult ,
13
- files : Vec < ( String , String , Vec < u8 > ) > ,
12
+ /// name, content
13
+ source_files : Vec < ( String , Vec < u8 > ) > ,
14
+ /// name, content
15
+ rustdoc_files : Vec < ( String , Vec < u8 > ) > ,
14
16
doc_targets : Vec < String > ,
15
17
default_target : Option < String > ,
16
18
cratesio_data : CratesIoData ,
@@ -47,7 +49,8 @@ impl<'db> FakeRelease<'db> {
47
49
build_log : "It works!" . into ( ) ,
48
50
successful : true ,
49
51
} ,
50
- files : Vec :: new ( ) ,
52
+ source_files : Vec :: new ( ) ,
53
+ rustdoc_files : Vec :: new ( ) ,
51
54
doc_targets : Vec :: new ( ) ,
52
55
default_target : None ,
53
56
cratesio_data : CratesIoData {
@@ -92,22 +95,40 @@ impl<'db> FakeRelease<'db> {
92
95
self
93
96
}
94
97
98
+ pub ( crate ) fn rustdoc_file < P , D > ( mut self , path : P , data : D ) -> Self
99
+ where P : Into < String > ,
100
+ D : Into < Vec < u8 > > ,
101
+ {
102
+ let ( path, data) = ( path. into ( ) , data. into ( ) ) ;
103
+ self . rustdoc_files . push ( ( path, data) ) ;
104
+
105
+ self
106
+ }
107
+
95
108
pub ( crate ) fn create ( self ) -> Result < i32 , Error > {
96
109
let tempdir = tempdir:: TempDir :: new ( "docs.rs-fake" ) ?;
97
110
98
- let files: Vec < _ > = self . files . into_iter ( ) . map ( |( mimetype, path, data) | {
99
- let file = tempdir. path ( ) . join ( & path) ;
100
- std:: fs:: write ( file, data) ?;
111
+ let upload_files = |prefix, files : Vec < ( String , Vec < u8 > ) > , package : & MetadataPackage , db : & TestDatabase | {
112
+ for ( path, data) in files {
113
+ let file = tempdir. path ( ) . join ( & path) ;
114
+ std:: fs:: write ( file, data) ?;
115
+ }
101
116
102
- Ok ( Json :: Array ( vec ! [ Json :: String ( mimetype) , Json :: String ( path) ] ) )
103
- } ) . collect :: < Result < _ , Error > > ( ) ?;
117
+ let prefix = format ! ( "{}/{}/{}" , prefix, package. name, package. version) ;
118
+ crate :: db:: add_path_into_database ( & db. conn ( ) , & prefix, tempdir. path ( ) )
119
+ } ;
120
+
121
+ let rustdoc_meta = upload_files ( "rustdoc" , self . rustdoc_files , & self . package , self . db ) ?;
122
+ log:: debug!( "added rustdoc files {}" , rustdoc_meta) ;
123
+ let source_meta = upload_files ( "source" , self . source_files , & self . package , self . db ) ?;
124
+ log:: debug!( "added source files {}" , source_meta) ;
104
125
105
126
let release_id = crate :: db:: add_package_into_database (
106
127
& self . db . conn ( ) ,
107
128
& self . package ,
108
129
tempdir. path ( ) ,
109
130
& self . build_result ,
110
- if files . is_empty ( ) { None } else { Some ( Json :: Array ( files ) ) } ,
131
+ Some ( source_meta ) ,
111
132
self . doc_targets ,
112
133
& self . default_target ,
113
134
& self . cratesio_data ,
@@ -116,10 +137,6 @@ impl<'db> FakeRelease<'db> {
116
137
) ?;
117
138
crate :: db:: add_build_into_database ( & self . db . conn ( ) , & release_id, & self . build_result ) ?;
118
139
119
- let prefix = format ! ( "rustdoc/{}/{}" , self . package. name, self . package. version) ;
120
- let added_files = crate :: db:: add_path_into_database ( & self . db . conn ( ) , & prefix, tempdir. path ( ) ) ?;
121
- log:: debug!( "added files {}" , added_files) ;
122
-
123
140
Ok ( release_id)
124
141
}
125
142
}
0 commit comments