Documentation
¶
Overview ¶
Package gitx is the binary's one door to git. The reads mirror the shell-outs bin/f10-load-project.sh makes - the bash script is the semantics oracle, and shelling out identically keeps the two comparable. The writes are `f10 start`'s - a branch (new, or tracking origin's), a worktree, and the config entries that record what a branch depends on - and `f10 finish`'s, which undoes them once the branch has merged: the pull, the worktree removal, the branch deletion. `f10 drive` adds one: the push of a branch it caught up before merging.
Everything goes through Exec, a variable so a test can answer git without a checkout. No go-git.
Index ¶
- Variables
- func AddWorktree(ctx context.Context, dir, path, branch, base string, create bool) error
- func CurrentBranch(ctx context.Context, dir string) string
- func DeleteBranch(ctx context.Context, dir, branch string) error
- func DeleteRemoteRef(ctx context.Context, dir, branch string) error
- func Fetch(ctx context.Context, dir string) error
- func FetchInto(ctx context.Context, dir, branch string) error
- func IsAncestor(ctx context.Context, dir, commit, ref string) bool
- func MergesCleanly(ctx context.Context, dir, base, head string) bool
- func Out(ctx context.Context, dir string, args ...string) string
- func PullFF(ctx context.Context, dir string) error
- func Push(ctx context.Context, dir, branch, lease string) error
- func Refs(ctx context.Context, dir string, patterns ...string) ([]string, error)
- func RemoteBranchExists(ctx context.Context, dir, branch string) (bool, error)
- func RemoveWorktree(ctx context.Context, dir, path string) error
- func SetConfig(ctx context.Context, dir, key, value string) error
- func Status(ctx context.Context, dir string) ([]string, error)
- func Switch(ctx context.Context, dir, branch string) error
- func TrackBranch(ctx context.Context, dir, branch string, force bool) error
- func UnsetConfig(ctx context.Context, dir, key string) error
- type ConfigEntry
- type Worktree
Constants ¶
This section is empty.
Variables ¶
var Exec = func(ctx context.Context, dir string, args ...string) (string, error) { cmd := exec.CommandContext(ctx, "git", args...) cmd.Dir = dir var stderr strings.Builder cmd.Stderr = &stderr out, err := cmd.Output() if err != nil { if msg := strings.TrimSpace(stderr.String()); msg != "" { return "", fmt.Errorf("git %s: %s", args[0], msg) } return "", fmt.Errorf("git %s: %w", args[0], err) } return strings.TrimSpace(string(out)), nil }
Exec runs git with args in dir and returns trimmed stdout. A failure carries git's own stderr, which names the cause better than any wrapper could.
Functions ¶
func AddWorktree ¶
AddWorktree checks branch out at path. With create, the branch is made from base - git's HEAD when base is "" - and must not exist yet; otherwise it must.
func CurrentBranch ¶
CurrentBranch is the branch dir has checked out, or "" when detached.
func DeleteBranch ¶
DeleteBranch deletes the local branch whether or not git sees it as merged: a squash or rebase merge leaves no trace git recognises, so the caller's proof is the host's, not git's. The branch's config section goes with it.
func DeleteRemoteRef ¶ added in v0.33.0
DeleteRemoteRef drops the local copy of origin's branch, which a branch deleted through the host's API leaves behind until a pruning fetch. git deletes a ref that is not there without complaint.
func FetchInto ¶
FetchInto updates local branch from origin's branch of the same name without touching the checkout: git fast-forwards a branch that is not checked out and refuses anything else.
func IsAncestor ¶
IsAncestor reports whether commit is reachable from ref. git answers with its exit code, so any failure reads as "no".
func MergesCleanly ¶ added in v0.33.0
MergesCleanly reports whether head merges into base without a conflict, tried in memory the way a host tries a pull request: nothing is checked out or written. git exits 1 for a conflict and higher for a bad ref, and any failure reads as "no", so a caller checks that both refs exist first. Not --quiet: git 2.56 exits 0 with it on a conflict.
func Out ¶
Out runs git and returns trimmed stdout, or "" on any error - absence is a valid result everywhere a read uses it.
func PullFF ¶
PullFF fast-forwards the checked-out branch from its upstream, and fails rather than merge when it cannot.
func Push ¶ added in v0.33.0
Push sends HEAD to origin's branch. A lease (the sha origin's branch had when the caller read it) forces the push only while origin still has that sha, which a rebased branch needs; "" pushes a fast-forward and nothing else.
func Refs ¶
Refs lists the refs matching patterns, in git's own order, as branch names: `refs/heads/` and `refs/remotes/` stripped, so a remote branch reads `origin/x`. The full refname is asked for rather than the short one, which git disambiguates to `heads/x` when a tag shares the name. A pattern is what for-each-ref takes: a literal ref, which also matches everything under it at a slash, or a glob.
func RemoteBranchExists ¶
RemoteBranchExists asks origin whether it still has branch, which is the one git read here that reaches the network.
func RemoveWorktree ¶
RemoveWorktree removes the checkout at path. A dirty tree makes git refuse, which callers rule out first.
func SetConfig ¶
SetConfig writes one entry to the repository's local config, replacing any value the key held. Local config never leaves the machine, which is what makes it the place for a per-branch fact in stealth mode.
func Status ¶
Status lists what `status --porcelain` reports for dir: one line per changed or untracked path, empty for a clean tree. Ignored files are not listed, so an excluded .f10/ never counts.
func Switch ¶ added in v0.35.0
Switch checks out branch in dir. A dirty tree can make git refuse, which callers rule out first.
func TrackBranch ¶ added in v0.35.0
TrackBranch creates local branch from origin's branch of the same name, tracking it, so a pull or push in its worktree needs no upstream set. With force an existing branch is moved there, which git refuses while a worktree has it checked out.
Types ¶
type ConfigEntry ¶
A ConfigEntry is one key and its value as `config --get-regexp` lists them.
func ConfigEntries ¶
func ConfigEntries(ctx context.Context, dir, pattern string) []ConfigEntry
ConfigEntries lists the local config entries whose key matches pattern, in git's order. No match is an empty list, not an error: git exits 1 for it, and absence is a valid answer here.