aboutsummaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
authorGabriel A. Giovanini <mail@gabrielgio.me>2025-02-15 21:18:06 +0100
committerGabriel A. Giovanini <mail@gabrielgio.me>2025-02-15 21:18:06 +0100
commit998c1777afeeb44ecf6ba2e735a4d6176a9b339e (patch)
treecd559a07a3a4a2e529947549f6352b6202031a23 /pkg
parent27400b0fce5d4ef3b7fd5ef4d25bac8f00754e33 (diff)
downloadcerrado-998c1777afeeb44ecf6ba2e735a4d6176a9b339e.tar.gz
cerrado-998c1777afeeb44ecf6ba2e735a4d6176a9b339e.tar.bz2
cerrado-998c1777afeeb44ecf6ba2e735a4d6176a9b339e.zip
feat: Add tag and branch to log
Now it is possible to see tag and branch on the log page.
Diffstat (limited to 'pkg')
-rw-r--r--pkg/git/git.go47
-rw-r--r--pkg/handler/git/handler.go2
2 files changed, 40 insertions, 9 deletions
diff --git a/pkg/git/git.go b/pkg/git/git.go
index 9e7f9c9..d72e561 100644
--- a/pkg/git/git.go
+++ b/pkg/git/git.go
@@ -34,7 +34,7 @@ type (
}
CommitReference struct {
commit *object.Commit
- ref *plumbing.Reference
+ refs []*plumbing.Reference
}
infoWrapper struct {
name string
@@ -103,10 +103,20 @@ func (g *GitRepository) LastCommit() (*CommitReference, error) {
commitRef := &CommitReference{commit: c}
if err := iter.ForEach(func(ref *plumbing.Reference) error {
- if ref.Hash() != c.Hash {
- return nil
+ obj, err := g.repository.TagObject(ref.Hash())
+ switch err {
+ case nil:
+ if obj.Target == commitRef.commit.Hash {
+ commitRef.AddReference(ref)
+ }
+ case plumbing.ErrObjectNotFound:
+ if commitRef.commit.Hash == ref.Hash() {
+ commitRef.AddReference(ref)
+ }
+ default:
+ return err
}
- commitRef.ref = ref
+
return nil
}); err != nil {
return nil, err
@@ -155,17 +165,26 @@ func (g *GitRepository) Commits(count int, from string) ([]*CommitReference, *ob
}
// new we fetch for possible tags for each commit
- iter, err := g.repository.Tags()
+ iter, err := g.repository.References()
if err != nil {
return nil, nil, err
}
if err := iter.ForEach(func(ref *plumbing.Reference) error {
for _, c := range commitRefs {
- if c.commit.Hash != ref.Hash() {
- continue
+ obj, err := g.repository.TagObject(ref.Hash())
+ switch err {
+ case nil:
+ if obj.Target == c.commit.Hash {
+ c.AddReference(ref)
+ }
+ case plumbing.ErrObjectNotFound:
+ if c.commit.Hash == ref.Hash() {
+ c.AddReference(ref)
+ }
+ default:
+ return err
}
- c.ref = ref
}
return nil
}); err != nil {
@@ -497,6 +516,18 @@ func (c *CommitReference) Commit() *object.Commit {
return c.commit
}
+func (c *CommitReference) HasReference() bool {
+ return len(c.refs) > 0
+}
+
+func (c *CommitReference) References() []*plumbing.Reference {
+ return c.refs
+}
+
+func (c *CommitReference) AddReference(ref *plumbing.Reference) {
+ c.refs = append(c.refs, ref)
+}
+
func (self *tagList) Len() int {
return len(self.refs)
}
diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go
index 33adc8d..b825ea4 100644
--- a/pkg/handler/git/handler.go
+++ b/pkg/handler/git/handler.go
@@ -384,7 +384,7 @@ func (g *GitHandler) Commit(w http.ResponseWriter, r *http.Request) error {
Name: name,
Ref: ref,
GitItemBase: &templates.GitItemCommitPage{
- Commit: commit.Commit(),
+ Commit: commit,
Diff: code.Bytes(),
},
}