Author | Jakob Wakeling <[email protected]> |
Date | 2025-02-06 02:05:36 |
Commit | 113a52e48aefe1a15a501cea4de5dc6fa32f5024 |
Parent | 09af50073069a0bda6836ff09d867e96e453416f |
Tag | 0.2.2 |
Fix absent annotated tags on log and commit pages
Diffstat
M | Makefile | | | 2 | +- |
M | src/goit/git.go | | | 30 | +++++++++++++++--------------- |
M | src/repo/commit.go | | | 2 | +- |
M | src/repo/log.go | | | 2 | +- |
M | src/repo/refs.go | | | 35 | +++++++---------------------------- |
5 files changed, 25 insertions, 46 deletions
diff --git a/Makefile b/Makefile index a205aa4..1a234d4 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ all: help MODULE = "$(shell go list -m)" PROGRAM = "goit" -VERSION ?= "dev" +VERSION ?= "$(shell git describe --tags --always)" build: ## Build the project @go build -ldflags "-X $(MODULE)/res.Version=$(VERSION)" -o ./bin/$(PROGRAM) ./src diff --git a/src/goit/git.go b/src/goit/git.go index 2b9fad6..242b06b 100644 --- a/src/goit/git.go +++ b/src/goit/git.go @@ -6,6 +6,7 @@ package goit import ( "bytes" "compress/gzip" + "errors" "io" "log" "net/http" @@ -378,38 +379,37 @@ type RefCommit struct { /* Return an array of tag referenced commits for a repository. */ func TaggedCommits(gr *git.Repository) ([]RefCommit, error) { - var taggedCommits []RefCommit + var tags []RefCommit - tags, err := gr.Tags() - if err != nil { + if iter, err := gr.Tags(); err != nil { return nil, err - } - - if err := tags.ForEach(func(ref *plumbing.Reference) error { + } else if err := iter.ForEach(func(ref *plumbing.Reference) error { var commit *object.Commit - tag, err := gr.TagObject(ref.Hash()) - switch err { - case nil: - if commit, err = gr.CommitObject(tag.Target); err != nil { + if tag, err := gr.TagObject(ref.Hash()); err != nil { + if !errors.Is(err, plumbing.ErrObjectNotFound) { return err } - case plumbing.ErrObjectNotFound: + + /* Tag is not annotated. */ if commit, err = gr.CommitObject(ref.Hash()); err != nil { return err } - default: - return err + } else { + /* Tag is annotated. */ + if commit, err = gr.CommitObject(tag.Target); err != nil { + return err + } } - taggedCommits = append(taggedCommits, RefCommit{ref, commit}) + tags = append(tags, RefCommit{ref, commit}) return nil }); err != nil { return nil, err } - return taggedCommits, nil + return tags, nil } /* Return an array of branch referenced commits for a repository. */ diff --git a/src/repo/commit.go b/src/repo/commit.go index e6b690b..441366c 100644 --- a/src/repo/commit.go +++ b/src/repo/commit.go @@ -119,7 +119,7 @@ func HandleCommit(w http.ResponseWriter, r *http.Request) { } for _, taggedCommit := range taggedCommits { - if taggedCommit.Ref.Hash().String() == commit.Hash.String() { + if taggedCommit.Commit.Hash.String() == commit.Hash.String() { data.Tags = append(data.Tags, taggedCommit.Ref.Name().Short()) } } diff --git a/src/repo/log.go b/src/repo/log.go index ddc1c1d..f6d50db 100644 --- a/src/repo/log.go +++ b/src/repo/log.go @@ -148,7 +148,7 @@ func HandleLog(w http.ResponseWriter, r *http.Request) { var tags []string for _, taggedCommit := range taggedCommits { - if taggedCommit.Ref.Hash().String() == c.Hash.String() { + if taggedCommit.Commit.Hash.String() == c.Hash.String() { tags = append(tags, taggedCommit.Ref.Name().Short()) } } diff --git a/src/repo/refs.go b/src/repo/refs.go index 73abad5..00fd0b5 100644 --- a/src/repo/refs.go +++ b/src/repo/refs.go @@ -16,7 +16,6 @@ import ( "github.com/go-chi/chi/v5" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" - "github.com/go-git/go-git/v5/plumbing/object" ) func HandleRefs(w http.ResponseWriter, r *http.Request) { @@ -99,39 +98,19 @@ func HandleRefs(w http.ResponseWriter, r *http.Request) { return } - if iter, err := gr.Tags(); err != nil { + tags, err := goit.TaggedCommits(gr) + if err != nil { util.PrintFuncError(err) goit.HttpError(w, http.StatusInternalServerError) return - } else if err := iter.ForEach(func(r *plumbing.Reference) error { - var c *object.Commit - - if tag, err := gr.TagObject(r.Hash()); err != nil { - if !errors.Is(err, plumbing.ErrObjectNotFound) { - return err - } - } else { - if c, err = gr.CommitObject(tag.Target); err != nil { - return err - } - } - - if c == nil { - if c, err = gr.CommitObject(r.Hash()); err != nil { - return err - } - } + } + for _, tag := range tags { data.Tags = append(data.Tags, row{ - Name: r.Name().Short(), Message: strings.SplitN(c.Message, "\n", 2)[0], Author: c.Author.Name, - LastCommit: c.Author.When.UTC().Format(time.DateTime), Hash: c.Hash.String(), + Name: tag.Ref.Name().Short(), Message: strings.SplitN(tag.Commit.Message, "\n", 2)[0], + Author: tag.Commit.Author.Name, LastCommit: tag.Commit.Author.When.UTC().Format(time.DateTime), + Hash: tag.Commit.Hash.String(), }) - - return nil - }); err != nil { - util.PrintFuncError(err) - goit.HttpError(w, http.StatusInternalServerError) - return } slices.Reverse(data.Tags)