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.
35 lines
959 B
Go
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))
|
|
}
|