From 44bc8e4078a09857ad86691a83e7ba7d4e3a69c4 Mon Sep 17 00:00:00 2001 From: "Gabriel A. Giovanini" Date: Sun, 7 Jul 2024 20:28:42 +0200 Subject: ref: Simplify path builder code --- pkg/git/git.go | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) (limited to 'pkg/git') diff --git a/pkg/git/git.go b/pkg/git/git.go index 6b58d35..7341c1b 100644 --- a/pkg/git/git.go +++ b/pkg/git/git.go @@ -38,6 +38,11 @@ type ( modTime time.Time isDir bool } + + TagReference struct { + ref *plumbing.Reference + tag *object.Tag + } ) func OpenRepository(dir string) (*GitRepository, error) { @@ -119,18 +124,31 @@ func (g *GitRepository) Head() (*plumbing.Reference, error) { return g.repository.Head() } -func (g *GitRepository) Tags() ([]*plumbing.Reference, error) { - ti, err := g.repository.Tags() +func (g *GitRepository) Tags() ([]*TagReference, error) { + iter, err := g.repository.Tags() if err != nil { return nil, err } - tags := []*plumbing.Reference{} - err = ti.ForEach(func(t *plumbing.Reference) error { - tags = append(tags, t) + tags := make([]*TagReference, 0) + + if err := iter.ForEach(func(ref *plumbing.Reference) error { + obj, err := g.repository.TagObject(ref.Hash()) + switch err { + case nil: + tags = append(tags, &TagReference{ + ref: ref, + tag: obj, + }) + case plumbing.ErrObjectNotFound: + tags = append(tags, &TagReference{ + ref: ref, + }) + default: + return err + } return nil - }) - if err != nil { + }); err != nil { return nil, err } @@ -361,3 +379,19 @@ func (i *infoWrapper) IsDir() bool { func (i *infoWrapper) Sys() any { return nil } + +func (t *TagReference) HashString() string { + return t.ref.Hash().String() +} + +func (t *TagReference) ShortName() string { + return t.ref.Name().Short() +} + +func (t *TagReference) Message() string { + if t.tag != nil { + return t.tag.Message + } + return "" + +} -- cgit v1.2.3