@@ -184,29 +184,32 @@ pub fn validate_crate_contents(
184
184
let mut contents = Vec :: new ( ) ;
185
185
rdr. read_to_end ( & mut contents) . unwrap ( ) ;
186
186
let mut ar = Archive :: new ( & contents[ ..] ) ;
187
+ let base_crate_name = Path :: new (
188
+ expected_crate_name
189
+ . strip_suffix ( ".crate" )
190
+ . expect ( "must end with .crate" ) ,
191
+ ) ;
187
192
let files: HashMap < PathBuf , String > = ar
188
193
. entries ( )
189
194
. unwrap ( )
190
195
. map ( |entry| {
191
196
let mut entry = entry. unwrap ( ) ;
192
- let name = entry. path ( ) . unwrap ( ) . into_owned ( ) ;
197
+ let name = entry
198
+ . path ( )
199
+ . unwrap ( )
200
+ . strip_prefix ( base_crate_name)
201
+ . unwrap ( )
202
+ . to_owned ( ) ;
193
203
let mut contents = String :: new ( ) ;
194
204
entry. read_to_string ( & mut contents) . unwrap ( ) ;
195
205
( name, contents)
196
206
} )
197
207
. collect ( ) ;
198
- let base_crate_name = Path :: new (
199
- expected_crate_name
200
- . strip_suffix ( ".crate" )
201
- . expect ( "must end with .crate" ) ,
202
- ) ;
203
- let actual_files: HashSet < PathBuf > = files. keys ( ) . cloned ( ) . collect ( ) ;
204
- let expected_files: HashSet < PathBuf > = expected_files
205
- . iter ( )
206
- . map ( |name| base_crate_name. join ( name) )
207
- . collect ( ) ;
208
- let missing: Vec < & PathBuf > = expected_files. difference ( & actual_files) . collect ( ) ;
209
- let extra: Vec < & PathBuf > = actual_files. difference ( & expected_files) . collect ( ) ;
208
+ let actual_files: HashSet < & Path > = files. keys ( ) . map ( |p| p. as_path ( ) ) . collect ( ) ;
209
+ let expected_files: HashSet < & Path > =
210
+ expected_files. iter ( ) . map ( |name| Path :: new ( name) ) . collect ( ) ;
211
+ let missing: Vec < & & Path > = expected_files. difference ( & actual_files) . collect ( ) ;
212
+ let extra: Vec < & & Path > = actual_files. difference ( & expected_files) . collect ( ) ;
210
213
if !missing. is_empty ( ) || !extra. is_empty ( ) {
211
214
panic ! (
212
215
"uploaded archive does not match.\n Missing: {:?}\n Extra: {:?}\n " ,
@@ -215,10 +218,10 @@ pub fn validate_crate_contents(
215
218
}
216
219
if !expected_contents. is_empty ( ) {
217
220
for ( e_file_name, e_file_contents) in expected_contents {
218
- let full_e_name = base_crate_name . join ( e_file_name) ;
221
+ let e_file_name = Path :: new ( e_file_name) ;
219
222
let actual_contents = files
220
- . get ( & full_e_name )
221
- . unwrap_or_else ( || panic ! ( "file `{}` missing in archive" , e_file_name) ) ;
223
+ . get ( e_file_name )
224
+ . unwrap_or_else ( || panic ! ( "file `{}` missing in archive" , e_file_name. display ( ) ) ) ;
222
225
assert_match_exact ( e_file_contents, actual_contents) ;
223
226
}
224
227
}
0 commit comments