pub struct CommitGraphChain { /* private fields */ }Expand description
Loaded commit-graph chain (newest layer first, matching commit-graph-chain file order).
Implementations§
Source§impl CommitGraphChain
impl CommitGraphChain
Sourcepub fn top_layer_bloom_settings(&self) -> Option<BloomFilterSettings>
pub fn top_layer_bloom_settings(&self) -> Option<BloomFilterSettings>
Bloom settings from the newest layer, if that layer carries Bloom data.
Sourcepub fn total_commits(&self) -> u32
pub fn total_commits(&self) -> u32
Total commits across all layers (Git num_commits_in_base offset for new layers).
Sourcepub fn layer_paths_oldest_first(&self) -> Vec<PathBuf>
pub fn layer_paths_oldest_first(&self) -> Vec<PathBuf>
Layer file paths from oldest base to newest (reverse of chain file order).
Sourcepub fn num_layers(&self) -> usize
pub fn num_layers(&self) -> usize
Number of layers in the chain.
Sourcepub fn layer_commit_counts_tip_first(&self) -> Vec<u32>
pub fn layer_commit_counts_tip_first(&self) -> Vec<u32>
Commit counts per layer, tip-first (layer 0 is the newest tip).
Sourcepub fn layer_has_generation_data_tip_first(&self) -> Vec<bool>
pub fn layer_has_generation_data_tip_first(&self) -> Vec<bool>
Whether each layer carries a generation-data (GDA2) chunk, tip-first.
Sourcepub fn layer_hashes_tip_first(&self) -> Vec<String>
pub fn layer_hashes_tip_first(&self) -> Vec<String>
Layer hex hashes (from graph-<hash>.graph file stem), tip-first.
Sourcepub fn layer_object_dirs_tip_first(&self) -> Vec<PathBuf>
pub fn layer_object_dirs_tip_first(&self) -> Vec<PathBuf>
Source object directory each layer was loaded from (its .git/objects),
tip-first. Derived from the layer path: <objdir>/info/commit-graphs/graph-*.graph
or <objdir>/info/commit-graph.
Sourcepub fn sub_chain_tip_first(&self, start: usize, end: usize) -> Option<Self>
pub fn sub_chain_tip_first(&self, start: usize, end: usize) -> Option<Self>
A sub-chain made of the layers at tip-first indices start..end
(so start becomes the new tip). Used by the writer when only some base
layers are kept after a split merge.
Sourcepub fn layer_oids(&self, tip_first_idx: usize) -> Vec<ObjectId>
pub fn layer_oids(&self, tip_first_idx: usize) -> Vec<ObjectId>
All commit OIDs in one layer (by tip-first index), in lexicographic order.
Sourcepub fn try_load(objects_dir: &Path) -> Result<Option<Self>, Error>
pub fn try_load(objects_dir: &Path) -> Result<Option<Self>, Error>
Load from objects/info/commit-graph or objects/info/commit-graphs/commit-graph-chain.
Returns Ok(None) when no commit-graph exists. Corrupt graphs (including invalid GDO2)
return Err.
Sourcepub fn load(objects_dir: &Path) -> Option<Self>
pub fn load(objects_dir: &Path) -> Option<Self>
Like Self::try_load but ignores parse errors (returns None).
Sourcepub fn try_load_across(
objects_dir: &Path,
alt_dirs: &[PathBuf],
) -> Result<Option<Self>, Error>
pub fn try_load_across( objects_dir: &Path, alt_dirs: &[PathBuf], ) -> Result<Option<Self>, Error>
Load a split commit-graph chain that may live in (and reference layers across) an alternate object directory.
Git’s commit-graph chain is owned by exactly one object directory, but its layer
graph-<hash>.graph files may be split between that directory and the alternate(s) it
inherits from. This is the situation created by a local clone whose info/alternates
points at a source repository that already has a split chain: a new commit-graph write --split produces a chain file (in the local object dir) that lists the alternate’s base
layer hashes followed by the locally-written tip layer.
The chain file itself is taken from objects_dir if present, otherwise from the first
alt_dirs entry that has one. Each referenced graph-<hash>.graph layer is then resolved
by searching objects_dir first and each alternate in turn.
§Parameters
objects_dir: the primary object directory (e.g. the local.git/objects).alt_dirs: alternate object directories, in search order.
§Returns
Ok(None) when no chain/single graph is found in any directory; Ok(Some(_)) on success.
§Errors
Returns an error if a referenced layer file is missing/unreadable or fails to parse.
Sourcepub fn existing_filter_bytes(
&self,
oid: &ObjectId,
want: &BloomFilterSettings,
) -> Option<Vec<u8>>
pub fn existing_filter_bytes( &self, oid: &ObjectId, want: &BloomFilterSettings, ) -> Option<Vec<u8>>
Existing changed-path Bloom filter bytes for oid, if present in any layer
whose Bloom settings are compatible with want. Returns Some(bytes) (possibly
empty for an empty/no-change filter) when the filter can be reused verbatim, or
None when no compatible filter exists. Used by the writer to backfill / reuse
already-computed filters (Git counts these as filter_not_computed).
Sourcepub fn upgradable_filter_bytes(
&self,
oid: &ObjectId,
want: &BloomFilterSettings,
) -> Option<Vec<u8>>
pub fn upgradable_filter_bytes( &self, oid: &ObjectId, want: &BloomFilterSettings, ) -> Option<Vec<u8>>
Existing non-empty filter bytes for oid whose stored hash_version
differs from want.hash_version but is otherwise compatible (same
num_hashes/bits_per_entry). Used to detect filters that may be
upgraded (relabeled to the new version without recomputation) when the
changed paths contain no high-bit bytes.
Sourcepub fn find_commit(&self, oid: &ObjectId) -> Option<(usize, u32)>
pub fn find_commit(&self, oid: &ObjectId) -> Option<(usize, u32)>
Lexicographic position in the full chain, or None if not in any layer.
Sourcepub fn global_position(&self, oid: &ObjectId) -> Option<u32>
pub fn global_position(&self, oid: &ObjectId) -> Option<u32>
Global commit-graph position (Git graph_pos): base layers first, then newer layers.
Sourcepub fn all_oids_in_order(&self) -> Vec<ObjectId>
pub fn all_oids_in_order(&self) -> Vec<ObjectId>
All commit OIDs in the chain (oldest base first, then newer layers).
Trait Implementations§
Source§impl Clone for CommitGraphChain
impl Clone for CommitGraphChain
Source§fn clone(&self) -> CommitGraphChain
fn clone(&self) -> CommitGraphChain
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more