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 | |
| 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')
| -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 {  | 
