diff options
author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2025-03-25 21:20:13 +0100 |
---|---|---|
committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2025-03-25 21:20:13 +0100 |
commit | 6006194c072dba9f65aa08c6e3be06ea8ead8910 (patch) | |
tree | e647fd2063efce999ac97761f05aaf38fee135dd /pkg/git/git.go | |
parent | c1247a52e92523be8d225d20dc9592f32dca5088 (diff) | |
download | cerrado-6006194c072dba9f65aa08c6e3be06ea8ead8910.tar.gz cerrado-6006194c072dba9f65aa08c6e3be06ea8ead8910.tar.bz2 cerrado-6006194c072dba9f65aa08c6e3be06ea8ead8910.zip |
feat: Add ref page
Now there is page more tailored to a single ref.
Diffstat (limited to 'pkg/git/git.go')
-rw-r--r-- | pkg/git/git.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/pkg/git/git.go b/pkg/git/git.go index d72e561..64c721a 100644 --- a/pkg/git/git.go +++ b/pkg/git/git.go @@ -19,6 +19,7 @@ import ( var ( MissingRefErr = errors.New("Reference not found") TreeForFileErr = errors.New("Trying to get tree of a file") + eofIter = errors.New("End of a iterator") ) type ( @@ -198,6 +199,54 @@ func (g *GitRepository) Head() (*plumbing.Reference, error) { return g.repository.Head() } +func (g *GitRepository) Tag() (*object.Commit, *TagReference, error) { + err := g.validateRef() + if err != nil { + return nil, nil, err + } + + c, err := g.repository.CommitObject(g.ref) + if err != nil { + return nil, nil, err + } + + var tagReference *TagReference + + iter, err := g.repository.Tags() + if err != nil { + return nil, nil, err + } + + if err := iter.ForEach(func(ref *plumbing.Reference) error { + obj, err := g.repository.TagObject(ref.Hash()) + switch err { + case nil: + if obj.Target == c.Hash { + tagReference = &TagReference{ + ref: ref, + tag: obj, + } + return eofIter + } + return nil + case plumbing.ErrObjectNotFound: + if c.Hash == ref.Hash() { + tagReference = &TagReference{ + ref: ref, + } + return eofIter + } + return nil + default: + return err + } + }); err != nil && !errors.Is(eofIter, err) { + return nil, nil, err + } + + return c, tagReference, nil +} + func (g *GitRepository) Tags() ([]*TagReference, error) { iter, err := g.repository.Tags() if err != nil { |