diff --git a/identity/identity_actions.go b/identity/identity_actions.go index aa6a2a9178d5f0a88f0f617adb3a0ea6fe67112b..e33b75f9675a679d93e630fd5b84d7c04cfdd43b 100644 --- a/identity/identity_actions.go +++ b/identity/identity_actions.go @@ -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 diff --git a/repository/git.go b/repository/git.go index 85107ba5a45afdaf8f7d5aabe06cc950a1f243e8..37b79556e864054a90c3254e4bb8551b42b19a4d 100644 --- a/repository/git.go +++ b/repository/git.go @@ -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 diff --git a/repository/gogit.go b/repository/gogit.go index bd8ada33567d2fec1773bdcf1082cad92c243404..78bae1f946c0875684c9a64879786ec627e629c5 100644 --- a/repository/gogit.go +++ b/repository/gogit.go @@ -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 } diff --git a/repository/mock_repo.go b/repository/mock_repo.go index b3b4cb416e42af92a5347d40ad878576ce445516..4e2c89bc7a0df72b3d230a836e936e14e6bb68fa 100644 --- a/repository/mock_repo.go +++ b/repository/mock_repo.go @@ -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) } } diff --git a/repository/repo.go b/repository/repo.go index 806edace2b6d81ec98431f1a5706753af7719795..3deb6f1be6117dfe363ae1c400823aea4353d5bb 100644 --- a/repository/repo.go +++ b/repository/repo.go @@ -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)