Monorepo for Tangled
Something went wrong. Try again.
850 B · 42 lines
Go
at master
12345678910111213141516171819202122232425262728293031323334353637383940414243package gitea
import ( "context" "errors" "fmt" "os/exec" "strings"
"github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing/object")
func GetCommitByPathWithID(ctx context.Context, oid plumbing.Hash, repoPath, relpath string) (*object.Commit, error) { if len(relpath) == 0 { return nil, errors.New("relpath should not be empty") } // File name starts with ':' must be escaped. if relpath[0] == ':' { relpath = `\` + relpath }
out, err := exec.CommandContext(ctx, "git", "-C", repoPath, "log", "-1", "--pretty=format:%H", oid.String(), "--", relpath, ).Output() if err != nil { return nil, err }
rev := plumbing.NewHash(strings.TrimSpace(string(out))) if rev.IsZero() { return nil, fmt.Errorf("invalid commit id: %q", string(out)) }
return GetCommit(ctx, repoPath, rev.String())}