module documentation

Git subtree implementation.

Class SubtreeMetadata Metadata stored in commit trailers for subtree operations.
Function add_subtree_metadata Add subtree metadata trailers to a commit message.
Function create_tree_with_subtree Create a new tree with a subtree inserted at the given prefix.
Function extract_subtree Extract a subtree from a tree at the given prefix path.
Function find_subtree_splits Find previous subtree split commits in history.
Function parse_subtree_metadata Parse subtree metadata from commit message trailers.
Function _validate_prefix Validate that a prefix is a valid path.
def add_subtree_metadata(message: bytes, prefix: bytes, split: ObjectID | None = None, mainline: ObjectID | None = None) -> bytes:

Add subtree metadata trailers to a commit message.

Parameters
message:bytesOriginal commit message
prefix:bytesSubtree directory path
split:ObjectID | NoneOptional split commit SHA
mainline:ObjectID | NoneOptional mainline commit SHA
Returns
bytesCommit message with subtree metadata trailers appended
def create_tree_with_subtree(store: BaseObjectStore, base_tree: Tree | None, prefix: bytes, subtree: Tree) -> ObjectID:

Create a new tree with a subtree inserted at the given prefix.

Parameters
store:BaseObjectStoreObject store to write to
base_tree:Tree | NoneBase tree to insert into (None for empty tree)
prefix:bytesPath where subtree should be inserted (e.g., b"vendor/lib")
subtree:TreeTree to insert
Returns
ObjectIDObject ID of the new tree
Raises
ValueErrorIf prefix is invalid
def extract_subtree(store: BaseObjectStore, tree: Tree, prefix: bytes) -> Tree | None:

Extract a subtree from a tree at the given prefix path.

Parameters
store:BaseObjectStoreObject store to read from
tree:TreeTree object to extract from
prefix:bytesPath to subtree (e.g., b"vendor/lib")
Returns
Tree | NoneTree object for the subtree, or None if path doesn't exist
Raises
ValueErrorIf prefix is invalid
def find_subtree_splits(store: BaseObjectStore, commit: Commit, prefix: bytes, limit: int | None = None) -> list[tuple[ObjectID, ObjectID]]:

Find previous subtree split commits in history.

Parameters
store:BaseObjectStoreObject store to read from
commit:CommitStarting commit
prefix:bytesSubtree prefix to search for
limit:int | NoneMaximum number of splits to find (None for all)
Returns
list[tuple[ObjectID, ObjectID]]List of (commit_id, split_id) tuples for commits with subtree metadata
def parse_subtree_metadata(commit: Commit) -> SubtreeMetadata:

Parse subtree metadata from commit message trailers.

Parameters
commit:CommitCommit to parse metadata from
Returns
SubtreeMetadataDictionary with subtree metadata (dir, split, mainline)
def _validate_prefix(prefix: bytes):

Validate that a prefix is a valid path.

Parameters
prefix:bytesPath prefix to validate
Raises
ValueErrorIf prefix is invalid