Files
beads/internal/compact/git.go
Peter Chanthamynavong 0a48519561 feat(context): centralize RepoContext API for git operations (#1102)
Centralizes repository context resolution via RepoContext API, fixing bugs where git commands run in the wrong repo when BEADS_DIR points elsewhere or in worktree scenarios.
2026-01-15 07:55:08 -08:00

35 lines
959 B
Go

package compact
import (
"context"
"strings"
"github.com/steveyegge/beads/internal/beads"
)
// gitExec is a function hook for executing git commands.
// In production, it uses RepoContext. In tests, it can be swapped for mocking.
var gitExec = defaultGitExec
// defaultGitExec uses RepoContext to execute git commands in the beads repository.
func defaultGitExec(name string, args ...string) ([]byte, error) {
// name is always "git" when called from GetCurrentCommitHash
rc, err := beads.GetRepoContext()
if err != nil {
return nil, err
}
cmd := rc.GitCmd(context.Background(), args...)
return cmd.Output()
}
// GetCurrentCommitHash returns the current git HEAD commit hash for the beads repository.
// Returns empty string if not in a git repository or if git command fails.
func GetCurrentCommitHash() string {
output, err := gitExec("git", "rev-parse", "HEAD")
if err != nil {
return ""
}
return strings.TrimSpace(string(output))
}