module documentation

Bundle URI support for faster clones and fetches.

This module implements support for Git bundle URIs as specified in https://git-scm.com/docs/bundle-uri

Bundle URIs allow Git servers to advertise locations where clients can download pre-computed bundles to speed up clones and fetches.

Class BundleList Represents a bundle list as defined in the bundle URI specification.
Class BundleListEntry Represents a single bundle in a bundle list.
Exception BundleURIError Error related to bundle URI operations.
Function fetch_bundle_uri Fetch content from a bundle URI.
Function parse_bundle_list Parse a bundle list from Git config format.
Function parse_bundle_uri_advertisement Parse bundle URI advertisement from protocol v2 capabilities.
Constant CAPABILITY_BUNDLE_URI Undocumented
Function _filter_bundle_entries Filter bundle entries based on object filter specification.
Function _is_absolute_uri Check if a URI is absolute (has a scheme).
Function _is_bundle_file Check if data starts with a bundle file header.
Function _resolve_relative_uri Resolve a relative URI against a base URI.
def fetch_bundle_uri(uri: str, progress: Callable[[bytes], None] | None = None, timeout: float | None = None) -> tuple[Bundle | None, BundleList | None]:

Fetch content from a bundle URI.

The URI may point to either a bundle file or a bundle list.

Parameters
uri:strThe URI to fetch from (HTTP/HTTPS)
progress:Callable[[bytes], None] | NoneOptional callback for progress reporting
timeout:float | NoneOptional timeout for the HTTP request
Returns
tuple[Bundle | None, BundleList | None]A tuple of (Bundle, None) if the URI points to a bundle file, or (None, BundleList) if the URI points to a bundle list.
Raises
BundleURIErrorIf the fetch fails or the content is invalid
def parse_bundle_list(data: bytes, base_uri: str | None = None) -> BundleList:

Parse a bundle list from Git config format.

Parameters
data:bytesThe raw bundle list data in Git config format
base_uri:str | NoneBase URI for resolving relative URIs in the bundle list
Returns
BundleListA BundleList object representing the parsed bundle list
Raises
BundleURIErrorIf the bundle list format is invalid
def parse_bundle_uri_advertisement(capabilities: list[tuple[bytes, bytes | None]]) -> list[tuple[str, str | None]]:

Parse bundle URI advertisement from protocol v2 capabilities.

Extracts bundle-uri related capabilities from a Git protocol v2 capability advertisement. The server may advertise bundle URIs as part of its capabilities to allow clients to bootstrap clones.

Parameters
capabilities:list[tuple[bytes, bytes | None]]List of (key, value) capability pairs from the server
Returns
list[tuple[str, str | None]]List of (key, value) pairs where key starts with "bundle-uri". The key is the capability name (e.g., "bundle-uri") and value is the URI string or None if no value was provided. Returns an empty list if no bundle URI capabilities are advertised.
CAPABILITY_BUNDLE_URI: bytes =

Undocumented

Value
b'bundle-uri'
def _filter_bundle_entries(entries: list[BundleListEntry], filter_spec: str | None) -> list[BundleListEntry]:

Filter bundle entries based on object filter specification.

Parameters
entries:list[BundleListEntry]List of bundle entries to filter
filter_spec:str | NoneObject filter to match (e.g., "blob:none"), or None for full clones
Returns
list[BundleListEntry]List of matching bundle entries
def _is_absolute_uri(uri: str) -> bool:

Check if a URI is absolute (has a scheme).

def _is_bundle_file(data: bytes) -> bool:

Check if data starts with a bundle file header.

def _resolve_relative_uri(base_uri: str, relative_uri: str) -> str:

Resolve a relative URI against a base URI.

Parameters
base_uri:strThe base URI to resolve against
relative_uri:strThe relative URI to resolve
Returns
strThe resolved absolute URI