package testgit
import (
"os"
"os/exec"
"testing"
"codeberg.org/lindenii/furgit/object/id"
)
type Repo struct {
path string
objectFormat id.ObjectFormat
env []string
}
type RepoOptions struct {
ObjectFormat id.ObjectFormat
}
func NewRepo(tb testing.TB, opts RepoOptions) (*Repo, error) {
tb.Helper()
repo := &Repo{
path: tb.TempDir(),
objectFormat: opts.ObjectFormat,
env: append(os.Environ(),
"GIT_CONFIG_GLOBAL=/dev/null",
"GIT_CONFIG_SYSTEM=/dev/null",
"GIT_AUTHOR_NAME=Test Author",
"GIT_AUTHOR_EMAIL=test@example.org",
"GIT_COMMITTER_NAME=Test Committer",
"GIT_COMMITTER_EMAIL=committer@example.org",
"GIT_AUTHOR_DATE=1234567890 +0000",
"GIT_COMMITTER_DATE=1234567890 +0000",
),
}
return repo, repo.Command(tb, "git", "init", "--object-format="+repo.objectFormat.String(), "--", repo.path).Run() //nolint:wrapcheck
}
func (repo *Repo) ObjectFormat() id.ObjectFormat {
return repo.objectFormat
}
func (repo *Repo) Command(
tb testing.TB,
command string,
args ...string,
) *exec.Cmd {
tb.Helper()
//nolint:noctx
cmd := exec.Command(command, args...)
cmd.Dir = repo.path
cmd.Env = repo.env
return cmd
}