Skip to content

Commit 1329e67

Browse files
authored
Merge pull request #755 from el-ev/avoid_vec_copy_2
refactor(mercury): remove unnecessary array allocation and copy in `decode_pack_object`
2 parents 2670227 + b41fb07 commit 1329e67

File tree

1 file changed

+2
-17
lines changed

1 file changed

+2
-17
lines changed

mercury/src/internal/pack/decode.rs

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -254,21 +254,6 @@ impl Pack {
254254
// Check if the object type is valid
255255
let t = ObjectType::from_u8(type_bits)?;
256256

257-
// util lambda: return data with result capacity after rebuilding, for Memory Control
258-
let reserve_delta_data = |data: Vec<u8>| -> Vec<u8> {
259-
let result_size = { // Read `result-size` of delta_obj
260-
let mut reader = Cursor::new(&data);
261-
let _ = utils::read_varint_le(&mut reader).unwrap().0; // base_size
262-
utils::read_varint_le(&mut reader).unwrap().0 // size after rebuilding
263-
};
264-
// capacity() == result_size, len() == data.len()
265-
// just for accurate Memory Control (rely on `heap_size()` that based on capacity)
266-
// Seems wasteful temporarily, but for final memory limit.
267-
let mut data_result_cap = Vec::with_capacity(result_size as usize);
268-
data_result_cap.extend(data);
269-
data_result_cap
270-
};
271-
272257
match t {
273258
ObjectType::Commit | ObjectType::Tree | ObjectType::Blob | ObjectType::Tag => {
274259
let (data, raw_size) = self.decompress_data(pack, size)?;
@@ -292,7 +277,7 @@ impl Pack {
292277

293278
Ok(CacheObject {
294279
base_offset,
295-
data_decompress: reserve_delta_data(data),
280+
data_decompress: data,
296281
obj_type: t,
297282
offset: init_offset,
298283
mem_recorder: None,
@@ -310,7 +295,7 @@ impl Pack {
310295

311296
Ok(CacheObject {
312297
base_ref: ref_sha1,
313-
data_decompress: reserve_delta_data(data),
298+
data_decompress: data,
314299
obj_type: t,
315300
offset: init_offset,
316301
mem_recorder: None,

0 commit comments

Comments
 (0)