From ccf7366db0b47e0720a61666acdaa6e6ab1e2273 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 20 Aug 2024 01:04:06 +0800 Subject: [PATCH] Add tag name in the commits list (#31082) Fix #10036 This PR adds some labels for tags of this commit after the commit message on the commits table. The tag template is share as commit graph's. Desktop: image Mobile: image --- models/migrations/migrations.go | 2 ++ models/migrations/v1_23/v304.go | 13 +++++++++++++ models/repo/release.go | 16 +++++++++++++++- models/repo/release_test.go | 13 +++++++++++++ options/locale/locale_en-US.ini | 1 + routers/web/repo/commit.go | 12 +++++++++++- templates/repo/commits_list.tmpl | 5 +++++ templates/repo/graph/commits.tmpl | 4 +--- templates/repo/tag/name.tmpl | 3 +++ 9 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 models/migrations/v1_23/v304.go create mode 100644 templates/repo/tag/name.tmpl diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index a3264160e54..13551423ce4 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -599,6 +599,8 @@ var migrations = []Migration{ NewMigration("Add index to action_task stopped log_expired", v1_23.AddIndexToActionTaskStoppedLogExpired), // v303 -> v304 NewMigration("Add metadata column for comment table", v1_23.AddCommentMetaDataColumn), + // v304 -> v305 + NewMigration("Add index for release sha1", v1_23.AddIndexForReleaseSha1), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v1_23/v304.go b/models/migrations/v1_23/v304.go new file mode 100644 index 00000000000..65cffedbd99 --- /dev/null +++ b/models/migrations/v1_23/v304.go @@ -0,0 +1,13 @@ +// Copyright 2024 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package v1_23 //nolint + +import "xorm.io/xorm" + +func AddIndexForReleaseSha1(x *xorm.Engine) error { + type Release struct { + Sha1 string `xorm:"INDEX VARCHAR(64)"` + } + return x.Sync(new(Release)) +} diff --git a/models/repo/release.go b/models/repo/release.go index 3123edd9780..16432583011 100644 --- a/models/repo/release.go +++ b/models/repo/release.go @@ -77,7 +77,7 @@ type Release struct { Target string TargetBehind string `xorm:"-"` // to handle non-existing or empty target Title string - Sha1 string `xorm:"VARCHAR(64)"` + Sha1 string `xorm:"INDEX VARCHAR(64)"` NumCommits int64 NumCommitsBehind int64 `xorm:"-"` Note string `xorm:"TEXT"` @@ -537,3 +537,17 @@ func InsertReleases(ctx context.Context, rels ...*Release) error { return committer.Commit() } + +func FindTagsByCommitIDs(ctx context.Context, repoID int64, commitIDs ...string) (map[string][]*Release, error) { + releases := make([]*Release, 0, len(commitIDs)) + if err := db.GetEngine(ctx).Where("repo_id=?", repoID). + In("sha1", commitIDs). + Find(&releases); err != nil { + return nil, err + } + res := make(map[string][]*Release, len(releases)) + for _, r := range releases { + res[r.Sha1] = append(res[r.Sha1], r) + } + return res, nil +} diff --git a/models/repo/release_test.go b/models/repo/release_test.go index 3643bff7f16..41ea083229d 100644 --- a/models/repo/release_test.go +++ b/models/repo/release_test.go @@ -25,3 +25,16 @@ func TestMigrate_InsertReleases(t *testing.T) { err := InsertReleases(db.DefaultContext, r) assert.NoError(t, err) } + +func Test_FindTagsByCommitIDs(t *testing.T) { + assert.NoError(t, unittest.PrepareTestDatabase()) + + sha1Rels, err := FindTagsByCommitIDs(db.DefaultContext, 1, "65f1bf27bc3bf70f64657658635e66094edbcb4d") + assert.NoError(t, err) + assert.Len(t, sha1Rels, 1) + rels := sha1Rels["65f1bf27bc3bf70f64657658635e66094edbcb4d"] + assert.Len(t, rels, 3) + assert.Equal(t, "v1.1", rels[0].TagName) + assert.Equal(t, "delete-tag", rels[1].TagName) + assert.Equal(t, "v1.0", rels[2].TagName) +} diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index ef7628967c5..042fd549a0b 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -1274,6 +1274,7 @@ commit_graph.color = Color commit.contained_in = This commit is contained in: commit.contained_in_default_branch = This commit is part of the default branch commit.load_referencing_branches_and_tags = Load branches and tags referencing this commit +commit.load_tags_failed = Load tags failed because of internal error blame = Blame download_file = Download file normal_view = Normal View diff --git a/routers/web/repo/commit.go b/routers/web/repo/commit.go index e5d84db6179..c91d5fad056 100644 --- a/routers/web/repo/commit.go +++ b/routers/web/repo/commit.go @@ -83,7 +83,17 @@ func Commits(ctx *context.Context) { return } ctx.Data["Commits"] = processGitCommits(ctx, commits) - + commitIDs := make([]string, 0, len(commits)) + for _, c := range commits { + commitIDs = append(commitIDs, c.ID.String()) + } + commitsTagsMap, err := repo_model.FindTagsByCommitIDs(ctx, ctx.Repo.Repository.ID, commitIDs...) + if err != nil { + log.Error("FindTagsByCommitIDs: %v", err) + ctx.Flash.Error(ctx.Tr("repo.commit.load_tags_failed")) + } else { + ctx.Data["CommitsTagsMap"] = commitsTagsMap + } ctx.Data["Username"] = ctx.Repo.Owner.Name ctx.Data["Reponame"] = ctx.Repo.Repository.Name ctx.Data["CommitCount"] = commitsCount diff --git a/templates/repo/commits_list.tmpl b/templates/repo/commits_list.tmpl index bb5d2a03947..917a445fde9 100644 --- a/templates/repo/commits_list.tmpl +++ b/templates/repo/commits_list.tmpl @@ -72,6 +72,11 @@ {{if IsMultilineCommitMessage .Message}}
{{RenderCommitBody $.Context .Message ($.Repository.ComposeMetas ctx)}}
{{end}} + {{if $.CommitsTagsMap}} + {{range (index $.CommitsTagsMap .ID.String)}} + {{- template "repo/tag/name" dict "RepoLink" $.Repository.Link "TagName" .TagName "IsRelease" (not .IsTag) -}} + {{end}} + {{end}} {{if .Committer}} {{TimeSince .Committer.When ctx.Locale}} diff --git a/templates/repo/graph/commits.tmpl b/templates/repo/graph/commits.tmpl index 39b86d9a164..9b179552df8 100644 --- a/templates/repo/graph/commits.tmpl +++ b/templates/repo/graph/commits.tmpl @@ -42,9 +42,7 @@ {{end}} {{else if eq $refGroup "tags"}} - - {{svg "octicon-tag"}} {{.ShortName}} - + {{- template "repo/tag/name" dict "RepoLink" $.Repository.Link "TagName" .ShortName -}} {{else if eq $refGroup "remotes"}} {{svg "octicon-cross-reference"}} {{.ShortName}} diff --git a/templates/repo/tag/name.tmpl b/templates/repo/tag/name.tmpl new file mode 100644 index 00000000000..c3042014d3f --- /dev/null +++ b/templates/repo/tag/name.tmpl @@ -0,0 +1,3 @@ + +{{svg "octicon-tag"}} {{.TagName}} +