| @@ -63,21 +63,35 @@ impl State { · 62 unmodified lines |
| 63 | 63 | let offset_to_entries = header(&mut write, version, num_entries)?; |
| 64 | 64 | let offset_to_extensions = entries(&mut write, self, offset_to_entries)?; |
| 65 | 65 | |
| 66 | | − let mut extensions = Vec::with_capacity(5); |
| 67 | | − if let Some(offset_past_tree_ext) = tree_cache_extension |
| 68 | | − .then(|| self.tree()) |
| 69 | | − .flatten() |
| 70 | | − .map(|tree| tree.write_to(&mut write).map(|_| write.count)) |
| 71 | | − .transpose()? |
| 72 | | − { |
| 73 | | − extensions.push(( |
| 74 | | − extension::tree::SIGNATURE, |
| 75 | | − offset_past_tree_ext - offset_to_extensions - (extension::MIN_SIZE as u32), |
| 76 | | − )); |
| 77 | | − } |
| 66 | + let extensions = { |
| 67 | + let extensions: &[&dyn Fn(&mut dyn std::io::Write) -> Option<std::io::Result<extension::Signature>>] = |
| 68 | + &[&|write| { |
| 69 | + tree_cache_extension |
| 70 | + .then(|| self.tree()) |
| 71 | + .flatten() |
| 72 | + .map(|tree| tree.write_to(write).map(|_| extension::tree::SIGNATURE)) |
| 73 | + }]; |
| 74 | + |
| 75 | + let mut offset_to_previous_ext = offset_to_extensions; |
| 76 | + let mut out = Vec::with_capacity(5); |
| 77 | + for write_ext in extensions { |
| 78 | + if let Some(signature) = write_ext(&mut write).transpose()? { |
| 79 | + let offset_past_ext = write.count; |
| 80 | + let ext_size = offset_past_ext - offset_to_previous_ext - (extension::MIN_SIZE as u32); |
| 81 | + offset_to_previous_ext = offset_past_ext; |
| 82 | + out.push((signature, ext_size)); |
| 83 | + } |
| 84 | + } |
| 85 | + out |
| 86 | + }; |
| 78 | 87 | |
| 79 | 88 | if num_entries > 0 && end_of_index_entry_extension && !extensions.is_empty() { |
| 80 | | − extension::end_of_index_entry::write_to(write.inner, hash_kind, offset_to_extensions, &extensions)? |
| 89 | + extension::end_of_index_entry::write_to( |
| 90 | + write.inner, |
| 91 | + hash_kind, |
| 92 | + offset_to_extensions, |
| 93 | + extensions.into_iter(), |
| 94 | + )? |
| 81 | 95 | } |
| 82 | 96 | |
| 83 | 97 | Ok(()) |