mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 03:25:11 +01: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), | ||||
| 	// 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 | ||||
|  | ||||
							
								
								
									
										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 | ||||
| 	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 | ||||
| } | ||||
|  | ||||
| @ -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) | ||||
| } | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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> | ||||
|  | ||||
| @ -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}} | ||||
|  | ||||
							
								
								
									
										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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user