aboutsummaryrefslogtreecommitdiff
path: root/pkg/service/git.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/service/git.go')
-rw-r--r--pkg/service/git.go50
1 files changed, 45 insertions, 5 deletions
diff --git a/pkg/service/git.go b/pkg/service/git.go
index 57b9b6e..9bf11f4 100644
--- a/pkg/service/git.go
+++ b/pkg/service/git.go
@@ -15,6 +15,7 @@ type (
Title string
LastCommitMessage string
LastCommitDate string
+ Ref string
}
GitService struct {
@@ -41,29 +42,50 @@ func (g *GitService) ListRepositories() ([]*Repository, error) {
repos := make([]*Repository, len(rs))
for i, r := range rs {
- repo := git.NewGitRepository(r.Path)
+ repo, err := git.OpenRepository(r.Path)
+ if err != nil {
+ return nil, err
+ }
+ if err != nil {
+ return nil, err
+ }
+
obj, err := repo.LastCommit()
if err != nil {
return nil, err
}
+ head, err := repo.Head()
+ if err != nil {
+ return nil, err
+ }
+
baseName := path.Base(r.Path)
repos[i] = &Repository{
Name: baseName,
Title: baseName,
LastCommitMessage: obj.Message,
LastCommitDate: obj.Author.When.Format(timeFormat),
+ Ref: head.Name().Short(),
}
}
return repos, nil
}
-func (g *GitService) ListCommits(name string) ([]*object.Commit, error) {
+func (g *GitService) ListCommits(name, ref string) ([]*object.Commit, error) {
// TODO: handle nil
r := g.configRepo.GetByName(name)
- repo := git.NewGitRepository(r.Path)
+ repo, err := git.OpenRepository(r.Path)
+ if err != nil {
+ return nil, err
+ }
+
+ err = repo.SetRef(ref)
+ if err != nil {
+ return nil, err
+ }
return repo.Commits()
}
@@ -71,7 +93,10 @@ func (g *GitService) ListTags(name string) ([]*object.Tag, error) {
// TODO: handle nil
r := g.configRepo.GetByName(name)
- repo := git.NewGitRepository(r.Path)
+ repo, err := git.OpenRepository(r.Path)
+ if err != nil {
+ return nil, err
+ }
return repo.Tags()
}
@@ -79,6 +104,21 @@ func (g *GitService) ListBranches(name string) ([]*plumbing.Reference, error) {
// TODO: handle nil
r := g.configRepo.GetByName(name)
- repo := git.NewGitRepository(r.Path)
+ repo, err := git.OpenRepository(r.Path)
+ if err != nil {
+ return nil, err
+ }
return repo.Branches()
}
+
+func (g *GitService) GetHead(name string) (*plumbing.Reference, error) {
+ // TODO: handle nil
+ r := g.configRepo.GetByName(name)
+
+ repo, err := git.OpenRepository(r.Path)
+ if err != nil {
+ return nil, err
+ }
+
+ return repo.Head()
+}