aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2024-08-20 01:04:06 +0800
committerGitHub <noreply@github.com>2024-08-19 17:04:06 +0000
commitccf7366db0b47e0720a61666acdaa6e6ab1e2273 (patch)
treeffd03dd9ab4cd8c8b0cd1c7f1df8a8d4f9e7d9d6
parent4f5c96627b4622d64593db2d436b1f3befa5f3c3 (diff)
downloadgitea-ccf7366db0b47e0720a61666acdaa6e6ab1e2273.tar.gz
gitea-ccf7366db0b47e0720a61666acdaa6e6ab1e2273.zip
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: <img width="1302" alt="image" src="https://github.com/go-gitea/gitea/assets/81045/ba94e1e6-2a3d-44f3-85a3-575fb5667c97"> Mobile: <img width="370" alt="image" src="https://github.com/go-gitea/gitea/assets/81045/e3eb1f44-3686-4012-aa9d-52cd88b22c0e">
-rw-r--r--models/migrations/migrations.go2
-rw-r--r--models/migrations/v1_23/v304.go13
-rw-r--r--models/repo/release.go16
-rw-r--r--models/repo/release_test.go13
-rw-r--r--options/locale/locale_en-US.ini1
-rw-r--r--routers/web/repo/commit.go12
-rw-r--r--templates/repo/commits_list.tmpl5
-rw-r--r--templates/repo/graph/commits.tmpl4
-rw-r--r--templates/repo/tag/name.tmpl3
9 files changed, 64 insertions, 5 deletions
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index a3264160e5..13551423ce 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 0000000000..65cffedbd9
--- /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 3123edd978..1643258301 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 3643bff7f1..41ea083229 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 ef7628967c..042fd549a0 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 e5d84db617..c91d5fad05 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 bb5d2a0394..917a445fde 100644
--- a/templates/repo/commits_list.tmpl
+++ b/templates/repo/commits_list.tmpl
@@ -72,6 +72,11 @@
{{if IsMultilineCommitMessage .Message}}
<pre class="commit-body tw-hidden">{{RenderCommitBody $.Context .Message ($.Repository.ComposeMetas ctx)}}</pre>
{{end}}
+ {{if $.CommitsTagsMap}}
+ {{range (index $.CommitsTagsMap .ID.String)}}
+ {{- template "repo/tag/name" dict "RepoLink" $.Repository.Link "TagName" .TagName "IsRelease" (not .IsTag) -}}
+ {{end}}
+ {{end}}
</td>
{{if .Committer}}
<td class="text right aligned">{{TimeSince .Committer.When ctx.Locale}}</td>
diff --git a/templates/repo/graph/commits.tmpl b/templates/repo/graph/commits.tmpl
index 39b86d9a16..9b179552df 100644
--- a/templates/repo/graph/commits.tmpl
+++ b/templates/repo/graph/commits.tmpl
@@ -42,9 +42,7 @@
</a>
{{end}}
{{else if eq $refGroup "tags"}}
- <a class="ui labelled basic tiny button" href="{{$.RepoLink}}/src/tag/{{.ShortName|PathEscape}}">
- {{svg "octicon-tag"}} {{.ShortName}}
- </a>
+ {{- template "repo/tag/name" dict "RepoLink" $.Repository.Link "TagName" .ShortName -}}
{{else if eq $refGroup "remotes"}}
<a class="ui labelled basic tiny button" href="{{$.RepoLink}}/src/commit/{{$commit.Rev|PathEscape}}">
{{svg "octicon-cross-reference"}} {{.ShortName}}
diff --git a/templates/repo/tag/name.tmpl b/templates/repo/tag/name.tmpl
new file mode 100644
index 0000000000..c3042014d3
--- /dev/null
+++ b/templates/repo/tag/name.tmpl
@@ -0,0 +1,3 @@
+<a class="ui label basic tiny button{{if .IsRelease}} primary{{end}}" href="{{.RepoLink}}/src/tag/{{.TagName|PathEscape}}">
+{{svg "octicon-tag"}} {{.TagName}}
+</a>