Skip to main content

CommitGraphChain

Struct CommitGraphChain 

Source
pub struct CommitGraphChain { /* private fields */ }
Expand description

Loaded commit-graph chain (newest layer first, matching commit-graph-chain file order).

Implementations§

Source§

impl CommitGraphChain

Source

pub fn from_bytes(bytes: Vec<u8>) -> Result<Self, Error>

Parse a complete, self-contained commit-graph file held in memory.

bytes is what Git stores at objects/info/commit-graph, for example the output of crate::maintenance::build_commit_graph that a custom object store persisted in its own storage. Attach the result with OdbBuilder::commit_graph so history walks read parents, committer dates, generation numbers and changed-path Bloom filters from it instead of reading commit objects.

The file is fully verified (trailing checksum, chunk table, object id order, parent positions). It is not checked against any object store: every commit it lists must exist in the store it is attached to.

§Errors

Returns Error::CorruptObject when the bytes are not a valid commit-graph file, or when the file is one layer of a split chain (it names base graphs it depends on).

Source

pub fn hash_algo(&self) -> HashAlgo

Hash algorithm of the object ids this chain records.

Source

pub fn top_layer_bloom_settings(&self) -> Option<BloomFilterSettings>

Bloom settings from the newest layer, if that layer carries Bloom data.

Source

pub fn total_commits(&self) -> u32

Total commits across all layers (Git num_commits_in_base offset for new layers).

Source

pub fn layer_paths_oldest_first(&self) -> Vec<PathBuf>

Layer file paths from oldest base to newest (reverse of chain file order).

Source

pub fn num_layers(&self) -> usize

Number of layers in the chain.

Source

pub fn layer_commit_counts_tip_first(&self) -> Vec<u32>

Commit counts per layer, tip-first (layer 0 is the newest tip).

Source

pub fn layer_has_generation_data_tip_first(&self) -> Vec<bool>

Whether each layer carries a generation-data (GDA2) chunk, tip-first.

Source

pub fn layer_hashes_tip_first(&self) -> Vec<String>

Layer hex hashes (from graph-<hash>.graph file stem), tip-first.

Source

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.

Source

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.

Source

pub fn layer_oids(&self, tip_first_idx: usize) -> Vec<ObjectId>

All commit OIDs in one layer (by tip-first index), in lexicographic order.

Source

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.

Source

pub fn try_load_with_caches( objects_dir: &Path, caches: Option<&RepoCaches>, ) -> Result<Option<Self>, Error>

Load a commit-graph chain, deduplicating warnings through caches when provided.

Source

pub fn load(objects_dir: &Path) -> Option<Self>

Like Self::try_load but ignores parse errors (returns None).

Source

pub fn verify_on_disk(objects_dir: &Path) -> Result<(), Error>

Full commit-graph verification (checksum, OID order, generation/parent checks).

Mirrors git commit-graph verify — used by fsck, not the hot read path.

§Errors

Returns Error::CorruptObject when any layer fails verification.

Source

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.

Source

pub fn try_load_across_with_caches( objects_dir: &Path, alt_dirs: &[PathBuf], caches: Option<&RepoCaches>, ) -> Result<Option<Self>, Error>

Like Self::try_load_across but reuses parsed commit-graph caches when provided.

§Errors

Returns an error if a referenced layer file is missing, unreadable, or fails to parse.

Source

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).

Source

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.

Source

pub fn find_commit(&self, oid: &ObjectId) -> Option<(usize, u32)>

Lexicographic position in the full chain, or None if not in any layer.

Source

pub fn global_position(&self, oid: &ObjectId) -> Option<u32>

Global commit-graph position (Git graph_pos): base layers first, then newer layers.

Source

pub fn graph_commit(&self, oid: &ObjectId) -> Option<(Vec<ObjectId>, i64)>

Commit parents and committer time read straight from the commit-graph file (no object decompression). Returns None when oid is not in the graph.

Source

pub fn commit_generation_for_walk(&self, oid: &ObjectId) -> u64

Generation number for ordering merge-base walks (2^63-1 when unknown).

Source

pub fn parent_global_positions(&self, oid: &ObjectId) -> Option<Vec<u32>>

Parent commit positions in global graph order (CDAT + EXTRA_EDGES), or None if oid is not in the chain.

Source

pub fn count_reachable_commits( &self, tips: &[ObjectId], hide: &[ObjectId], first_parent_only: bool, shallow: &HashSet<ObjectId>, ) -> Option<usize>

Count commits reachable from tips minus those reachable from hide, using only commit-graph parent links (no object reads). Returns None when any tip is missing from the graph or parent data cannot be decoded from the file.

Source

pub fn all_oids_in_order(&self) -> Vec<ObjectId>

All commit OIDs in the chain (oldest base first, then newer layers).

Source

pub fn bloom_precheck_for_paths( &self, _odb: &Odb, oid: ObjectId, pathspecs: &[String], bloom_cwd: Option<&str>, requested_hash_version: i32, read_changed_paths: bool, ) -> Result<BloomPrecheck, Error>

Consult Bloom filters for a single-parent commit before diffing trees.

Trait Implementations§

Source§

impl Clone for CommitGraphChain

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CommitGraphChain

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.