@ c362fc5ff73740244ceaacba31cdae3e6098ac04 | history
package handlers
import (
"errors"
"os"
"path"
"strings"
"github.com/go-git/go-git/v6"
"nmyk.io/bidet/internal/core"
)
const dotGit = ".git"
func (s Server) List() ([]*core.Repo, error) {
entries, err := os.ReadDir(s.Dir)
if err != nil {
return nil, err
}
var repos []*core.Repo
for _, e := range entries {
if e.Name() == dotGit {
continue
}
repo, err := s.Open(strings.TrimSuffix(e.Name(), dotGit))
if err == nil {
if _, err = repo.Worktree(); errors.Is(err, git.ErrIsBareRepository) {
repos = append(repos, repo)
}
}
}
if len(repos) == 0 {
return nil, errors.New("No repos found in " + s.Dir)
}
return repos, nil
}
func (s Server) repoPath(repoName string) string {
return path.Join(s.Dir, repoName) + dotGit
}
func (s Server) Open(repoName string) (*core.Repo, error) {
if _, err := os.Stat(s.repoPath(repoName)); os.IsNotExist(err) {
return nil, err
}
repo, err := git.PlainOpen(s.repoPath(repoName))
if err != nil {
return nil, err
}
return &core.Repo{Repository: repo, Name: repoName}, nil
}