History

refactor

Sebastian Thiel committed 6 years ago

Commit a9000081 parent db2ab1e1 file · +9 −12Browse files

Unified · Split

gitoxide-odb/src/pack/file/mod.rs+9−12
@@ -19,7 +19,7 @@ struct Delta { · 18 unmodified lines
1919 #[derive(Debug)]
2020 pub enum ResolvedBase {
2121 InPack(Entry),
22− OutOfPack(Range<usize>),
22+ OutOfPack { end: usize },
2323 }
2424
2525 impl Delta {
@@ -171,7 +171,8 @@ impl File { · 145 unmodified lines
171171 let mut chain = SmallVec::<[Delta; 5]>::default();
172172 let mut instruction_buffer_size = 0usize;
173173 let mut cursor = last.clone();
174− let mut first_base_buffer_range: Option<Range<usize>> = None;
174+ let mut base_buffer_end: Option<usize> = None;
175+ // Find the first full base, either an undeltified object in the pack or a reference to another object.
175176 while cursor.header.is_delta() {
176177 let end = instruction_buffer_size
177178 .checked_add(cursor.size as usize)
@@ -190,8 +191,8 @@ impl File { · 12 unmodified lines
190191 Header::OfsDelta { pack_offset } => self.entry(pack_offset),
191192 Header::RefDelta { oid } => match resolve(&oid, out) {
192193 ResolvedBase::InPack(entry) => entry,
193− ResolvedBase::OutOfPack(range) => {
194− first_base_buffer_range = Some(range);
194+ ResolvedBase::OutOfPack { end } => {
195+ base_buffer_end = Some(end);
195196 break;
196197 }
197198 },
@@ -200,7 +201,7 @@ impl File { · 2 unmodified lines
200201 }
201202 let (first_buffer_end, second_buffer_end) = {
202203 let delta_instructions_size: u64 = chain.iter().map(|d| d.size() as u64).sum();
203− let base_buffer_end = match first_base_buffer_range {
204+ let base_buffer_end = match base_buffer_end {
204205 None => {
205206 let base_entry = cursor;
206207 out.resize(
@@ -215,19 +216,15 @@ impl File { · 8 unmodified lines
215216 .try_into()
216217 .expect("usize big enough for single entry base object size")
217218 }
218− Some(range) => {
219− assert_eq!(
220− range.start, 0,
221− "We really expect to not start somewhere in the middle of a buffer"
222− );
219+ Some(end) => {
223220 out.resize(
224− ((range.end - range.start) as u64 * 2 // * 2 for worst-case guess
221+ (end as u64 * 2 // * 2 for worst-case guess
225222 + delta_instructions_size)
226223 .try_into()
227224 .expect("usize to be big enough for all deltas"),
228225 0,
229226 );
230− range.end
227+ end
231228 }
232229 };
233230 (base_buffer_end, base_buffer_end + base_buffer_end) // works because we have two equally sized sequential regions