diff options
author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-07-07 20:28:42 +0200 |
---|---|---|
committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-07-07 21:44:29 +0200 |
commit | 44bc8e4078a09857ad86691a83e7ba7d4e3a69c4 (patch) | |
tree | 6788cafeaac286d381cc69e1917dab6ae58d1f85 /pkg/git | |
parent | 8dff852753a1c4a708fd87e3cbb0f4844803aa95 (diff) | |
download | cerrado-44bc8e4078a09857ad86691a83e7ba7d4e3a69c4.tar.gz cerrado-44bc8e4078a09857ad86691a83e7ba7d4e3a69c4.tar.bz2 cerrado-44bc8e4078a09857ad86691a83e7ba7d4e3a69c4.zip |
ref: Simplify path builder code
Diffstat (limited to 'pkg/git')
-rw-r--r-- | pkg/git/git.go | 48 |
1 files changed, 41 insertions, 7 deletions
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 "" + +} |