Skip to main content

Module git

Module git 

Source

Re-exports§

pub use worktree::Worktree;

Modules§

worktree
git worktree wrapper for hermetic per-run workspaces.

Structs§

Commit
GitInfo
SemVer

Constants§

SHORT_COMMIT_LEN
Default short-commit length used across error messages, log output, and any place that needs to truncate a full SHA for human display. Matches git’s --short default (7) — and the ShortCommit template var populated by [git::detect_git_info] (which delegates to git rev-parse --short).

Functions§

add_path_in
git -C <workspace_root> add <rel> — stage a single relative path.
check_git_available
Check whether git is available in PATH.
commit_in
git -C <workspace_root> commit [-S] -m <message> — create a commit with the given message, optionally GPG-signed.
create_and_push_tag
Create an annotated tag and push it if an origin remote exists.
create_tag_via_github_api
Create a tag via the GitHub API (using the gh CLI).
detect_git_info
Detect git info for a given tag.
detect_github_repo
Get the GitHub owner/name from the origin remote.
detect_owner_repo
Get the owner/repo from the origin remote, regardless of SCM host.
extract_tag_prefix
Extract the prefix portion of a tag template by locating the version placeholder.
find_latest_tag_matching
Find the latest tag matching a template pattern. E.g., tag_template “cfgd-core-v{{ .Version }}” → matches tags like “cfgd-core-v1.2.3”
find_latest_tag_matching_with_prefix
Like find_latest_tag_matching, but with optional monorepo prefix filtering.
find_previous_tag
Find the tag immediately before current_tag in commit history.
find_previous_tag_with_prefix
Like find_previous_tag, but with optional monorepo prefix filtering.
get_all_commits
Get all commits reachable from HEAD, optionally filtered to a path. Used for initial releases where there is no previous tag.
get_all_commits_paths
Get all commits reachable from HEAD, filtered to multiple paths.
get_all_semver_tags
Get all semver tags in the repo, sorted descending by version. Prerelease tags sort after release tags of the same major.minor.patch.
get_branch_semver_tags
Get semver tags reachable from HEAD, sorted descending by version. Prerelease tags sort after release tags of the same major.minor.patch.
get_commit_messages_between
Get commit subjects between two refs.
get_commit_messages_between_path
Get commit subjects between two refs that touched a specific path.
get_commits_between
Get commits between two refs, optionally filtered to a path.
get_commits_between_paths
Get commits between two refs, filtered to multiple paths (git log – path1 path2 …).
get_current_branch
Get the current branch name.
get_first_commit
Return the SHA of the very first commit in the repository.
get_head_commit
Get the full commit hash of HEAD.
get_last_commit_messages
Get last N commit subjects.
get_last_commit_messages_path
Get last N commit subjects that touched a specific path.
get_short_commit
Get the short commit hash of HEAD.
gh_api_get
GET a GitHub API endpoint via the gh CLI (single request, no pagination).
gh_api_get_paginated
GET a GitHub API endpoint via the gh CLI, with pagination.
git_status_porcelain
Return the git status --porcelain output showing dirty files.
has_changes_since
Check if there are changes in a path since a given tag.
has_commits_since_tag
Check if there are any commits since a given tag.
has_version_placeholder
Check whether a tag template string contains any recognised version placeholder.
head_commit_hash_in
git -C <repo> rev-parse HEAD — return HEAD’s full commit hash for the given repository (or worktree). Path-taking sibling of get_head_commit so callers (the determinism harness, future CI glue) can resolve HEAD without cd-ing into the repo first.
head_commit_timestamp_in
git -C <repo> log -1 --format=%ct HEAD — return HEAD’s committer timestamp (seconds since UNIX epoch) for the given repository. Used by the determinism harness as the non-snapshot SDE seed.
head_is_at_tag
Returns true when HEAD coincides with a tag.
is_git_dirty
Check whether the working tree has uncommitted changes.
is_git_repo
Check whether the current directory is inside a git repository.
is_shallow_clone
Check whether the current repository is a shallow clone.
list_tags_with_prefix
git -C <workspace_root> tag --list --sort=-v:refname '<prefix>*' — return the list of refs whose name starts with prefix, ordered by reverse semver. Returns Ok(Vec::new()) when git fails (no repo, no tags) so callers can treat absence as a non-error.
local_git_user_email
Read git config user.email, or None if unset / git is unavailable.
local_git_user_name
Read git config user.name, or None if unset / git is unavailable.
log_subjects_for_range
git -C <workspace_root> -c log.showSignature=false log --pretty=format:%B%x1e <range> -- <rel_path> — list commit message bodies (subject+body) for commits in range touching rel_path, using the \x1e (RS) byte as a between-commits separator so multi-line bodies survive parsing.
parse_github_remote
Parse owner and repo name from a GitHub remote URL. Supports HTTPS (https://github.com/owner/repo.git) and SSH (git@github.com:owner/repo.git).
parse_remote_owner_repo
Parse owner and repo from any git remote URL, regardless of host.
parse_semver
Parse a strict semver version from a string like “v1.2.3”, “1.2.3”, “v1.0.0-rc.1”, “v1.0.0+build.42”, or “v1.0.0-rc.1+build.42”.
parse_semver_tag
Parse a semver version from a prefixed tag string.
paths_changed_since_tag
git diff --name-only <tag>..HEAD -- <paths>... — return true when any of the named paths changed between tag and HEAD. Returns Ok(false) when git fails (e.g. not a git repo) so callers can treat the absence-of-info case as “no changes”.
render_ignore_patterns
Render ignore patterns (both ignore_tags and ignore_tag_prefixes) through the template engine when template_vars is provided.
resolve_snapshot_sde
Resolves the SOURCE_DATE_EPOCH for a snapshot-mode release run.
short_commit_str
Truncate a full commit SHA string to SHORT_COMMIT_LEN characters. Returns the input unchanged when it’s already shorter or equal in length. Use this any time the SHA arrives as a string (e.g. deserialized from a manifest or read from a template var) rather than running git rev-parse --short again — saves a subprocess and keeps the length convention in one place.
stage_and_commit
Stage specific files and create a commit.
strip_monorepo_prefix
Strip a monorepo tag prefix from a tag string.
tag_points_at_head
Check whether tag points at the current HEAD commit.