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.
This commit is contained in:
committed by
GitHub
parent
159114563b
commit
0a48519561
@@ -1,15 +1,29 @@
|
||||
package compact
|
||||
|
||||
import (
|
||||
"os/exec"
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/steveyegge/beads/internal/beads"
|
||||
)
|
||||
|
||||
var gitExec = func(name string, args ...string) ([]byte, error) {
|
||||
return exec.Command(name, args...).Output()
|
||||
// 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.
|
||||
// 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")
|
||||
|
||||
Reference in New Issue
Block a user