pub struct PackBitmapWriter { /* private fields */ }Expand description
Builder that assembles a reachability bitmap (.bitmap) for a pack.
The writer is constructed from the object layout of a pack (one
ObjectType per object, in pack order) and the pack’s trailing checksum.
Callers then register one selected commit per add_commit call, supplying
the set of pack positions reachable from that commit. build/write
produce a PackBitmapIndex / serialised .bitmap bytes matching git’s
on-disk format (signature BITM, version 1).
Implementations§
Source§impl PackBitmapWriter
impl PackBitmapWriter
Sourcepub const FLAG_NONE: u8 = 0
pub const FLAG_NONE: u8 = 0
OBJ_NONE selection flag: this commit’s bitmap is stored in full (no XOR
compression against a previously selected commit). This is the only flag
value this writer emits.
Sourcepub fn new(
format: ObjectFormat,
pack_checksum: ObjectId,
object_types: &[ObjectType],
) -> Result<Self>
pub fn new( format: ObjectFormat, pack_checksum: ObjectId, object_types: &[ObjectType], ) -> Result<Self>
Creates a writer for a pack whose objects (in pack order) have the given
ObjectTypes and whose trailing checksum is pack_checksum.
Returns an error if the pack contains more than u32::MAX objects, if
pack_checksum’s format does not match format, or if any object type
is not one of the four reachable git object kinds.
Sourcepub fn with_name_hash_cache(self, cache: Vec<u32>) -> Result<Self>
pub fn with_name_hash_cache(self, cache: Vec<u32>) -> Result<Self>
Attaches a name-hash cache (one u32 per object, in pack order). When
set, the written bitmap advertises PackBitmapIndex::OPTION_HASH_CACHE
and appends the cache after the bitmap entries, exactly as git does.
Returns an error if the cache length does not equal the object count.
Sourcepub fn add_commit(
&mut self,
commit_position: u32,
commit_index_position: u32,
reachable: &[u32],
) -> Result<()>
pub fn add_commit( &mut self, commit_position: u32, commit_index_position: u32, reachable: &[u32], ) -> Result<()>
Registers a selected commit and the pack positions reachable from it.
commit_position is the pack-order position of the commit itself (the
bit-number space); it must reference a commit object and is implicitly
part of the reachable set. commit_index_position is the commit’s
position in the oid-sorted pack index — this is what the on-disk entry
records (upstream oid_pos); bits and entry positions live in different
spaces. reachable lists the pack-order positions of every object
reachable from the commit (it may include or omit commit_position;
duplicates are fine). All positions must be in range. The commit’s full
(non-XORed) bitmap is stored.
Sourcepub fn build(&self) -> Result<PackBitmapIndex>
pub fn build(&self) -> Result<PackBitmapIndex>
Builds the in-memory PackBitmapIndex without serialising it.
The resulting index always advertises
PackBitmapIndex::OPTION_FULL_DAG (the four type bitmaps fully cover
the pack) and, when a name-hash cache was attached,
PackBitmapIndex::OPTION_HASH_CACHE.
Trait Implementations§
Source§impl Clone for PackBitmapWriter
impl Clone for PackBitmapWriter
Source§fn clone(&self) -> PackBitmapWriter
fn clone(&self) -> PackBitmapWriter
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more