mirror of
https://github.com/go-gitea/gitea
synced 2024-11-10 20:24:24 +00:00
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">
This commit is contained in:
parent
4f5c96627b
commit
ccf7366db0
@ -599,6 +599,8 @@ var migrations = []Migration{
|
|||||||
NewMigration("Add index to action_task stopped log_expired", v1_23.AddIndexToActionTaskStoppedLogExpired),
|
NewMigration("Add index to action_task stopped log_expired", v1_23.AddIndexToActionTaskStoppedLogExpired),
|
||||||
// v303 -> v304
|
// v303 -> v304
|
||||||
NewMigration("Add metadata column for comment table", v1_23.AddCommentMetaDataColumn),
|
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
|
// GetCurrentDBVersion returns the current db version
|
||||||
|
13
models/migrations/v1_23/v304.go
Normal file
13
models/migrations/v1_23/v304.go
Normal file
@ -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))
|
||||||
|
}
|
@ -77,7 +77,7 @@ type Release struct {
|
|||||||
Target string
|
Target string
|
||||||
TargetBehind string `xorm:"-"` // to handle non-existing or empty target
|
TargetBehind string `xorm:"-"` // to handle non-existing or empty target
|
||||||
Title string
|
Title string
|
||||||
Sha1 string `xorm:"VARCHAR(64)"`
|
Sha1 string `xorm:"INDEX VARCHAR(64)"`
|
||||||
NumCommits int64
|
NumCommits int64
|
||||||
NumCommitsBehind int64 `xorm:"-"`
|
NumCommitsBehind int64 `xorm:"-"`
|
||||||
Note string `xorm:"TEXT"`
|
Note string `xorm:"TEXT"`
|
||||||
@ -537,3 +537,17 @@ func InsertReleases(ctx context.Context, rels ...*Release) error {
|
|||||||
|
|
||||||
return committer.Commit()
|
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
|
||||||
|
}
|
||||||
|
@ -25,3 +25,16 @@ func TestMigrate_InsertReleases(t *testing.T) {
|
|||||||
err := InsertReleases(db.DefaultContext, r)
|
err := InsertReleases(db.DefaultContext, r)
|
||||||
assert.NoError(t, err)
|
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)
|
||||||
|
}
|
||||||
|
@ -1274,6 +1274,7 @@ commit_graph.color = Color
|
|||||||
commit.contained_in = This commit is contained in:
|
commit.contained_in = This commit is contained in:
|
||||||
commit.contained_in_default_branch = This commit is part of the default branch
|
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_referencing_branches_and_tags = Load branches and tags referencing this commit
|
||||||
|
commit.load_tags_failed = Load tags failed because of internal error
|
||||||
blame = Blame
|
blame = Blame
|
||||||
download_file = Download file
|
download_file = Download file
|
||||||
normal_view = Normal View
|
normal_view = Normal View
|
||||||
|
@ -83,7 +83,17 @@ func Commits(ctx *context.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
ctx.Data["Commits"] = processGitCommits(ctx, commits)
|
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["Username"] = ctx.Repo.Owner.Name
|
||||||
ctx.Data["Reponame"] = ctx.Repo.Repository.Name
|
ctx.Data["Reponame"] = ctx.Repo.Repository.Name
|
||||||
ctx.Data["CommitCount"] = commitsCount
|
ctx.Data["CommitCount"] = commitsCount
|
||||||
|
@ -72,6 +72,11 @@
|
|||||||
{{if IsMultilineCommitMessage .Message}}
|
{{if IsMultilineCommitMessage .Message}}
|
||||||
<pre class="commit-body tw-hidden">{{RenderCommitBody $.Context .Message ($.Repository.ComposeMetas ctx)}}</pre>
|
<pre class="commit-body tw-hidden">{{RenderCommitBody $.Context .Message ($.Repository.ComposeMetas ctx)}}</pre>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{if $.CommitsTagsMap}}
|
||||||
|
{{range (index $.CommitsTagsMap .ID.String)}}
|
||||||
|
{{- template "repo/tag/name" dict "RepoLink" $.Repository.Link "TagName" .TagName "IsRelease" (not .IsTag) -}}
|
||||||
|
{{end}}
|
||||||
|
{{end}}
|
||||||
</td>
|
</td>
|
||||||
{{if .Committer}}
|
{{if .Committer}}
|
||||||
<td class="text right aligned">{{TimeSince .Committer.When ctx.Locale}}</td>
|
<td class="text right aligned">{{TimeSince .Committer.When ctx.Locale}}</td>
|
||||||
|
@ -42,9 +42,7 @@
|
|||||||
</a>
|
</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
{{else if eq $refGroup "tags"}}
|
{{else if eq $refGroup "tags"}}
|
||||||
<a class="ui labelled basic tiny button" href="{{$.RepoLink}}/src/tag/{{.ShortName|PathEscape}}">
|
{{- template "repo/tag/name" dict "RepoLink" $.Repository.Link "TagName" .ShortName -}}
|
||||||
{{svg "octicon-tag"}} {{.ShortName}}
|
|
||||||
</a>
|
|
||||||
{{else if eq $refGroup "remotes"}}
|
{{else if eq $refGroup "remotes"}}
|
||||||
<a class="ui labelled basic tiny button" href="{{$.RepoLink}}/src/commit/{{$commit.Rev|PathEscape}}">
|
<a class="ui labelled basic tiny button" href="{{$.RepoLink}}/src/commit/{{$commit.Rev|PathEscape}}">
|
||||||
{{svg "octicon-cross-reference"}} {{.ShortName}}
|
{{svg "octicon-cross-reference"}} {{.ShortName}}
|
||||||
|
3
templates/repo/tag/name.tmpl
Normal file
3
templates/repo/tag/name.tmpl
Normal file
@ -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>
|
Loading…
Reference in New Issue
Block a user