package git import "os" import "path/filepath" import git "github.com/go-git/go-git/v5" type RepoManager struct { BaseDir string } func (rm *RepoManager) Ensure() error { return os.MkdirAll(rm.BaseDir, 0o755) } func (rm *RepoManager) RepoPath(repoID string) string { return filepath.Join(rm.BaseDir, repoID) } func (rm *RepoManager) RepoPathFor(projectID, repoName string) string { return filepath.Join(rm.BaseDir, projectID, repoName+".git") } func (rm *RepoManager) InitRepo(repoPath string, bare bool) error { var err error err = rm.Ensure() if err != nil { return err } err = os.MkdirAll(repoPath, 0o755) if err != nil { return err } _, err = git.PlainInit(repoPath, bare) return err }