repo: fix some go-git implementation

This commit is contained in:
Michael Muré 2020-09-08 14:31:40 +02:00
parent bde9375632
commit d4f1d5659b
5 changed files with 26 additions and 11 deletions

View File

@ -4,9 +4,10 @@ import (
"fmt"
"strings"
"github.com/pkg/errors"
"github.com/MichaelMure/git-bug/entity"
"github.com/MichaelMure/git-bug/repository"
"github.com/pkg/errors"
)
// Fetch retrieve updates from a remote

View File

@ -302,8 +302,8 @@ func (repo *GitRepo) RemoveRef(ref string) error {
}
// ListRefs will return a list of Git ref matching the given refspec
func (repo *GitRepo) ListRefs(refspec string) ([]string, error) {
stdout, err := repo.runGitCommand("for-each-ref", "--format=%(refname)", refspec)
func (repo *GitRepo) ListRefs(refPrefix string) ([]string, error) {
stdout, err := repo.runGitCommand("for-each-ref", "--format=%(refname)", refPrefix)
if err != nil {
return nil, err

View File

@ -7,6 +7,7 @@ import (
"os"
stdpath "path"
"path/filepath"
"strings"
"sync"
"time"
@ -420,7 +421,7 @@ func (repo *GoGitRepo) RemoveRef(ref string) error {
return repo.r.Storer.RemoveReference(plumbing.ReferenceName(ref))
}
func (repo *GoGitRepo) ListRefs(refspec string) ([]string, error) {
func (repo *GoGitRepo) ListRefs(refPrefix string) ([]string, error) {
refIter, err := repo.r.References()
if err != nil {
return nil, err
@ -428,9 +429,16 @@ func (repo *GoGitRepo) ListRefs(refspec string) ([]string, error) {
refs := make([]string, 0)
for ref, _ := refIter.Next(); ref != nil; {
refs = append(refs, ref.String()) // TODO: Use format to search
err = refIter.ForEach(func(ref *plumbing.Reference) error {
if strings.HasPrefix(ref.Name().String(), refPrefix) {
refs = append(refs, ref.Name().String())
}
return nil
})
if err != nil {
return nil, err
}
return refs, nil
}
@ -454,10 +462,16 @@ func (repo *GoGitRepo) ListCommits(ref string) ([]Hash, error) {
return nil, err
}
var commits []Hash // TODO: Implement refspec
for commit, _ := commitIter.Next(); commit != nil; {
var commits []Hash
err = commitIter.ForEach(func(commit *object.Commit) error {
commits = append(commits, Hash(commit.Hash.String()))
return nil
})
if err != nil {
return nil, err
}
return commits, nil
}

View File

@ -164,11 +164,11 @@ func (r *mockRepoForTest) CopyRef(source string, dest string) error {
return nil
}
func (r *mockRepoForTest) ListRefs(refspec string) ([]string, error) {
func (r *mockRepoForTest) ListRefs(refPrefix string) ([]string, error) {
var keys []string
for k := range r.refs {
if strings.HasPrefix(k, refspec) {
if strings.HasPrefix(k, refPrefix) {
keys = append(keys, k)
}
}

View File

@ -91,7 +91,7 @@ type RepoData interface {
RemoveRef(ref string) error
// ListRefs will return a list of Git ref matching the given refspec
ListRefs(refspec string) ([]string, error)
ListRefs(refPrefix string) ([]string, error)
// RefExist will check if a reference exist in Git
RefExist(ref string) (bool, error)