@@ -123,6 +123,17 @@ impl Repo {
123
123
trace ! ( "loading file {}" , filepath. display( ) ) ;
124
124
let contents =
125
125
fs:: read ( & filepath) . with_context ( || format ! ( "failed to read {:?}" , filepath) ) ?;
126
+ let c;
127
+ let contents = if filepath. to_str ( ) . map_or ( false , |s| s. ends_with ( ".sz" ) ) {
128
+ use std:: io:: Read ;
129
+ let mut out = Vec :: with_capacity ( snap:: decompress_len ( & contents) . unwrap_or ( 0 ) ) ;
130
+ let mut szip_reader = snap:: Reader :: new ( & contents[ ..] ) ;
131
+ szip_reader. read_to_end ( & mut out) . unwrap ( ) ;
132
+ c = out;
133
+ & c
134
+ } else {
135
+ & contents
136
+ } ;
126
137
let data = serde_json:: from_slice ( & contents)
127
138
. with_context ( || format ! ( "failed to read JSON from {:?}" , filepath) ) ?;
128
139
Ok ( data)
@@ -135,24 +146,30 @@ impl Repo {
135
146
commit. sha,
136
147
triple
137
148
) ) ;
138
- match self . load_commit_data_file ( & filepath) {
139
- Ok ( v) => return Ok ( v) ,
140
- Err ( _) => self . load_commit_data_file (
141
- & self
142
- . times ( )
143
- . join ( format ! ( "commit-{}-{}.json" , commit. sha, triple) ) ,
144
- ) ,
149
+ if let Ok ( v) = self . load_commit_data_file ( & filepath) {
150
+ return Ok ( v) ;
151
+ }
152
+ let filepath = self
153
+ . times ( )
154
+ . join ( format ! ( "commit-{}-{}.json" , commit. sha, triple) ) ;
155
+ if let Ok ( v) = self . load_commit_data_file ( & filepath) {
156
+ return Ok ( v) ;
145
157
}
158
+ let filepath = self
159
+ . times ( )
160
+ . join ( format ! ( "commit-{}-{}.json.sz" , commit. sha, triple) ) ;
161
+ Ok ( self . load_commit_data_file ( & filepath) ?)
146
162
}
147
163
148
164
pub fn add_commit_data ( & self , data : & CommitData ) -> anyhow:: Result < ( ) > {
149
165
let commit = & data. commit ;
150
166
let filepath = self
151
167
. times ( )
152
- . join ( format ! ( "commit-{}-{}.json" , commit. sha, data. triple) ) ;
168
+ . join ( format ! ( "commit-{}-{}.json.sz " , commit. sha, data. triple) ) ;
153
169
info ! ( "creating file {}" , filepath. display( ) ) ;
154
- let serialized = serde_json:: to_string ( & data) ?;
155
- fs:: write ( & filepath, & serialized) ?;
170
+ let mut v = snap:: Writer :: new ( Vec :: new ( ) ) ;
171
+ serde_json:: to_writer ( & mut v, & data) ?;
172
+ fs:: write ( & filepath, v. into_inner ( ) ?) ?;
156
173
Ok ( ( ) )
157
174
}
158
175
0 commit comments