@@ -19,6 +19,8 @@ pub(crate) mod error {
19
19
LoadIndex ( #[ from] crate :: store:: load_index:: Error ) ,
20
20
#[ error( transparent) ]
21
21
LoadPack ( #[ from] std:: io:: Error ) ,
22
+ #[ error( transparent) ]
23
+ EntryType ( #[ from] gix_pack:: data:: entry:: decode:: Error ) ,
22
24
#[ error( "Reached recursion limit of {} while resolving ref delta bases for {}" , . max_depth, . id) ]
23
25
DeltaBaseRecursionLimit {
24
26
/// the maximum recursion depth we encountered.
@@ -144,19 +146,21 @@ where
144
146
}
145
147
} ,
146
148
} ;
147
- let entry = pack. entry ( pack_offset) ;
149
+ let entry = pack. entry ( pack_offset) ? ;
148
150
let header_size = entry. header_size ( ) ;
149
- let res = match pack. decode_entry (
151
+ let res = pack. decode_entry (
150
152
entry,
151
153
buffer,
152
154
inflate,
153
155
& |id, _out| {
154
- index_file. pack_offset_by_id ( id) . map ( |pack_offset| {
155
- gix_pack:: data:: decode:: entry:: ResolvedBase :: InPack ( pack. entry ( pack_offset) )
156
- } )
156
+ let pack_offset = index_file. pack_offset_by_id ( id) ?;
157
+ pack. entry ( pack_offset)
158
+ . ok ( )
159
+ . map ( gix_pack:: data:: decode:: entry:: ResolvedBase :: InPack )
157
160
} ,
158
161
pack_cache,
159
- ) {
162
+ ) ;
163
+ let res = match res {
160
164
Ok ( r) => Ok ( (
161
165
gix_object:: Data {
162
166
kind : r. kind ,
@@ -230,7 +234,7 @@ where
230
234
let pack = possibly_pack
231
235
. as_ref ( )
232
236
. expect ( "pack to still be available like just now" ) ;
233
- let entry = pack. entry ( pack_offset) ;
237
+ let entry = pack. entry ( pack_offset) ? ;
234
238
let header_size = entry. header_size ( ) ;
235
239
pack. decode_entry (
236
240
entry,
@@ -239,10 +243,10 @@ where
239
243
& |id, out| {
240
244
index_file
241
245
. pack_offset_by_id ( id)
242
- . map ( |pack_offset| {
243
- gix_pack :: data :: decode :: entry:: ResolvedBase :: InPack (
244
- pack . entry ( pack_offset ) ,
245
- )
246
+ . and_then ( |pack_offset| {
247
+ pack . entry ( pack_offset )
248
+ . ok ( )
249
+ . map ( gix_pack :: data :: decode :: entry :: ResolvedBase :: InPack )
246
250
} )
247
251
. or_else ( || {
248
252
( id == base_id) . then ( || {
@@ -398,7 +402,7 @@ where
398
402
}
399
403
} ,
400
404
} ;
401
- let entry = pack. entry ( pack_offset) ;
405
+ let entry = pack. entry ( pack_offset) . ok ( ) ? ;
402
406
403
407
buf. resize ( entry. decompressed_size . try_into ( ) . expect ( "representable size" ) , 0 ) ;
404
408
assert_eq ! ( pack. id, pack_id. to_intrinsic_pack_id( ) , "both ids must always match" ) ;
0 commit comments