mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Backport #34412 by wxiaoguang Fix #34398, fix #33308 Remove all `repo.ComposeCommentMetas` from templates, only use `repo` to render commit message. Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		| @@ -47,7 +47,7 @@ func (c *commitChecker) IsCommitIDExisting(commitID string) bool { | ||||
| 		c.gitRepo, c.gitRepoCloser = r, closer | ||||
| 	} | ||||
|  | ||||
| 	exist = c.gitRepo.IsReferenceExist(commitID) // Don't use IsObjectExist since it doesn't support short hashs with gogit edition. | ||||
| 	exist = c.gitRepo.IsReferenceExist(commitID) // Don't use IsObjectExist since it doesn't support short hashes with gogit edition. | ||||
| 	c.commitCache[commitID] = exist | ||||
| 	return exist | ||||
| } | ||||
|   | ||||
| @@ -17,6 +17,7 @@ import ( | ||||
| func TestDateTime(t *testing.T) { | ||||
| 	testTz, _ := time.LoadLocation("America/New_York") | ||||
| 	defer test.MockVariableValue(&setting.DefaultUILocation, testTz)() | ||||
| 	defer test.MockVariableValue(&setting.IsProd, true)() | ||||
| 	defer test.MockVariableValue(&setting.IsInTesting, false)() | ||||
|  | ||||
| 	du := NewDateUtils() | ||||
| @@ -53,6 +54,7 @@ func TestDateTime(t *testing.T) { | ||||
| func TestTimeSince(t *testing.T) { | ||||
| 	testTz, _ := time.LoadLocation("America/New_York") | ||||
| 	defer test.MockVariableValue(&setting.DefaultUILocation, testTz)() | ||||
| 	defer test.MockVariableValue(&setting.IsProd, true)() | ||||
| 	defer test.MockVariableValue(&setting.IsInTesting, false)() | ||||
|  | ||||
| 	du := NewDateUtils() | ||||
|   | ||||
| @@ -14,6 +14,8 @@ import ( | ||||
| 	"unicode" | ||||
|  | ||||
| 	issues_model "code.gitea.io/gitea/models/issues" | ||||
| 	"code.gitea.io/gitea/models/renderhelper" | ||||
| 	"code.gitea.io/gitea/models/repo" | ||||
| 	"code.gitea.io/gitea/modules/emoji" | ||||
| 	"code.gitea.io/gitea/modules/htmlutil" | ||||
| 	"code.gitea.io/gitea/modules/log" | ||||
| @@ -34,11 +36,11 @@ func NewRenderUtils(ctx reqctx.RequestContext) *RenderUtils { | ||||
| } | ||||
|  | ||||
| // RenderCommitMessage renders commit message with XSS-safe and special links. | ||||
| func (ut *RenderUtils) RenderCommitMessage(msg string, metas map[string]string) template.HTML { | ||||
| func (ut *RenderUtils) RenderCommitMessage(msg string, repo *repo.Repository) template.HTML { | ||||
| 	cleanMsg := template.HTMLEscapeString(msg) | ||||
| 	// we can safely assume that it will not return any error, since there | ||||
| 	// shouldn't be any special HTML. | ||||
| 	fullMessage, err := markup.PostProcessCommitMessage(markup.NewRenderContext(ut.ctx).WithMetas(metas), cleanMsg) | ||||
| 	fullMessage, err := markup.PostProcessCommitMessage(renderhelper.NewRenderContextRepoComment(ut.ctx, repo), cleanMsg) | ||||
| 	if err != nil { | ||||
| 		log.Error("PostProcessCommitMessage: %v", err) | ||||
| 		return "" | ||||
| @@ -52,7 +54,7 @@ func (ut *RenderUtils) RenderCommitMessage(msg string, metas map[string]string) | ||||
|  | ||||
| // RenderCommitMessageLinkSubject renders commit message as a XSS-safe link to | ||||
| // the provided default url, handling for special links without email to links. | ||||
| func (ut *RenderUtils) RenderCommitMessageLinkSubject(msg, urlDefault string, metas map[string]string) template.HTML { | ||||
| func (ut *RenderUtils) RenderCommitMessageLinkSubject(msg, urlDefault string, repo *repo.Repository) template.HTML { | ||||
| 	msgLine := strings.TrimLeftFunc(msg, unicode.IsSpace) | ||||
| 	lineEnd := strings.IndexByte(msgLine, '\n') | ||||
| 	if lineEnd > 0 { | ||||
| @@ -63,9 +65,8 @@ func (ut *RenderUtils) RenderCommitMessageLinkSubject(msg, urlDefault string, me | ||||
| 		return "" | ||||
| 	} | ||||
|  | ||||
| 	// we can safely assume that it will not return any error, since there | ||||
| 	// shouldn't be any special HTML. | ||||
| 	renderedMessage, err := markup.PostProcessCommitMessageSubject(markup.NewRenderContext(ut.ctx).WithMetas(metas), urlDefault, template.HTMLEscapeString(msgLine)) | ||||
| 	// we can safely assume that it will not return any error, since there shouldn't be any special HTML. | ||||
| 	renderedMessage, err := markup.PostProcessCommitMessageSubject(renderhelper.NewRenderContextRepoComment(ut.ctx, repo), urlDefault, template.HTMLEscapeString(msgLine)) | ||||
| 	if err != nil { | ||||
| 		log.Error("PostProcessCommitMessageSubject: %v", err) | ||||
| 		return "" | ||||
| @@ -74,7 +75,7 @@ func (ut *RenderUtils) RenderCommitMessageLinkSubject(msg, urlDefault string, me | ||||
| } | ||||
|  | ||||
| // RenderCommitBody extracts the body of a commit message without its title. | ||||
| func (ut *RenderUtils) RenderCommitBody(msg string, metas map[string]string) template.HTML { | ||||
| func (ut *RenderUtils) RenderCommitBody(msg string, repo *repo.Repository) template.HTML { | ||||
| 	msgLine := strings.TrimSpace(msg) | ||||
| 	lineEnd := strings.IndexByte(msgLine, '\n') | ||||
| 	if lineEnd > 0 { | ||||
| @@ -87,7 +88,7 @@ func (ut *RenderUtils) RenderCommitBody(msg string, metas map[string]string) tem | ||||
| 		return "" | ||||
| 	} | ||||
|  | ||||
| 	renderedMessage, err := markup.PostProcessCommitMessage(markup.NewRenderContext(ut.ctx).WithMetas(metas), template.HTMLEscapeString(msgLine)) | ||||
| 	renderedMessage, err := markup.PostProcessCommitMessage(renderhelper.NewRenderContextRepoComment(ut.ctx, repo), template.HTMLEscapeString(msgLine)) | ||||
| 	if err != nil { | ||||
| 		log.Error("PostProcessCommitMessage: %v", err) | ||||
| 		return "" | ||||
| @@ -105,8 +106,8 @@ func renderCodeBlock(htmlEscapedTextToRender template.HTML) template.HTML { | ||||
| } | ||||
|  | ||||
| // RenderIssueTitle renders issue/pull title with defined post processors | ||||
| func (ut *RenderUtils) RenderIssueTitle(text string, metas map[string]string) template.HTML { | ||||
| 	renderedText, err := markup.PostProcessIssueTitle(markup.NewRenderContext(ut.ctx).WithMetas(metas), template.HTMLEscapeString(text)) | ||||
| func (ut *RenderUtils) RenderIssueTitle(text string, repo *repo.Repository) template.HTML { | ||||
| 	renderedText, err := markup.PostProcessIssueTitle(renderhelper.NewRenderContextRepoComment(ut.ctx, repo), template.HTMLEscapeString(text)) | ||||
| 	if err != nil { | ||||
| 		log.Error("PostProcessIssueTitle: %v", err) | ||||
| 		return "" | ||||
|   | ||||
| @@ -32,22 +32,22 @@ func renderMarkdownToHtmlLegacy(ctx context.Context, input string) template.HTML | ||||
| 	return NewRenderUtils(reqctx.FromContext(ctx)).MarkdownToHtml(input) | ||||
| } | ||||
|  | ||||
| func renderCommitMessageLegacy(ctx context.Context, msg string, metas map[string]string) template.HTML { | ||||
| func renderCommitMessageLegacy(ctx context.Context, msg string, _ map[string]string) template.HTML { | ||||
| 	panicIfDevOrTesting() | ||||
| 	return NewRenderUtils(reqctx.FromContext(ctx)).RenderCommitMessage(msg, metas) | ||||
| 	return NewRenderUtils(reqctx.FromContext(ctx)).RenderCommitMessage(msg, nil) | ||||
| } | ||||
|  | ||||
| func renderCommitMessageLinkSubjectLegacy(ctx context.Context, msg, urlDefault string, metas map[string]string) template.HTML { | ||||
| func renderCommitMessageLinkSubjectLegacy(ctx context.Context, msg, urlDefault string, _ map[string]string) template.HTML { | ||||
| 	panicIfDevOrTesting() | ||||
| 	return NewRenderUtils(reqctx.FromContext(ctx)).RenderCommitMessageLinkSubject(msg, urlDefault, metas) | ||||
| 	return NewRenderUtils(reqctx.FromContext(ctx)).RenderCommitMessageLinkSubject(msg, urlDefault, nil) | ||||
| } | ||||
|  | ||||
| func renderIssueTitleLegacy(ctx context.Context, text string, metas map[string]string) template.HTML { | ||||
| func renderIssueTitleLegacy(ctx context.Context, text string, _ map[string]string) template.HTML { | ||||
| 	panicIfDevOrTesting() | ||||
| 	return NewRenderUtils(reqctx.FromContext(ctx)).RenderIssueTitle(text, metas) | ||||
| 	return NewRenderUtils(reqctx.FromContext(ctx)).RenderIssueTitle(text, nil) | ||||
| } | ||||
|  | ||||
| func renderCommitBodyLegacy(ctx context.Context, msg string, metas map[string]string) template.HTML { | ||||
| func renderCommitBodyLegacy(ctx context.Context, msg string, _ map[string]string) template.HTML { | ||||
| 	panicIfDevOrTesting() | ||||
| 	return NewRenderUtils(reqctx.FromContext(ctx)).RenderCommitBody(msg, metas) | ||||
| 	return NewRenderUtils(reqctx.FromContext(ctx)).RenderCommitBody(msg, nil) | ||||
| } | ||||
|   | ||||
| @@ -11,11 +11,11 @@ import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"code.gitea.io/gitea/models/issues" | ||||
| 	"code.gitea.io/gitea/models/unittest" | ||||
| 	"code.gitea.io/gitea/modules/git" | ||||
| 	"code.gitea.io/gitea/modules/log" | ||||
| 	"code.gitea.io/gitea/models/repo" | ||||
| 	user_model "code.gitea.io/gitea/models/user" | ||||
| 	"code.gitea.io/gitea/modules/markup" | ||||
| 	"code.gitea.io/gitea/modules/reqctx" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| 	"code.gitea.io/gitea/modules/test" | ||||
| 	"code.gitea.io/gitea/modules/translation" | ||||
|  | ||||
| @@ -47,19 +47,8 @@ mail@domain.com | ||||
| 	return strings.ReplaceAll(s, "<SPACE>", " ") | ||||
| } | ||||
|  | ||||
| var testMetas = map[string]string{ | ||||
| 	"user":                         "user13", | ||||
| 	"repo":                         "repo11", | ||||
| 	"repoPath":                     "../../tests/gitea-repositories-meta/user13/repo11.git/", | ||||
| 	"markdownNewLineHardBreak":     "true", | ||||
| 	"markupAllowShortIssuePattern": "true", | ||||
| } | ||||
|  | ||||
| func TestMain(m *testing.M) { | ||||
| 	unittest.InitSettingsForTesting() | ||||
| 	if err := git.InitSimple(context.Background()); err != nil { | ||||
| 		log.Fatal("git init failed, err: %v", err) | ||||
| 	} | ||||
| 	setting.Markdown.RenderOptionsComment.ShortIssuePattern = true | ||||
| 	markup.Init(&markup.RenderHelperFuncs{ | ||||
| 		IsUsernameMentionable: func(ctx context.Context, username string) bool { | ||||
| 			return username == "mention-user" | ||||
| @@ -74,46 +63,52 @@ func newTestRenderUtils(t *testing.T) *RenderUtils { | ||||
| 	return NewRenderUtils(ctx) | ||||
| } | ||||
|  | ||||
| func TestRenderCommitBody(t *testing.T) { | ||||
| 	defer test.MockVariableValue(&markup.RenderBehaviorForTesting.DisableAdditionalAttributes, true)() | ||||
| 	type args struct { | ||||
| 		msg string | ||||
| func TestRenderRepoComment(t *testing.T) { | ||||
| 	mockRepo := &repo.Repository{ | ||||
| 		ID: 1, OwnerName: "user13", Name: "repo11", | ||||
| 		Owner: &user_model.User{ID: 13, Name: "user13"}, | ||||
| 		Units: []*repo.RepoUnit{}, | ||||
| 	} | ||||
| 	tests := []struct { | ||||
| 		name string | ||||
| 		args args | ||||
| 		want template.HTML | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name: "multiple lines", | ||||
| 			args: args{ | ||||
| 				msg: "first line\nsecond line", | ||||
| 	t.Run("RenderCommitBody", func(t *testing.T) { | ||||
| 		defer test.MockVariableValue(&markup.RenderBehaviorForTesting.DisableAdditionalAttributes, true)() | ||||
| 		type args struct { | ||||
| 			msg string | ||||
| 		} | ||||
| 		tests := []struct { | ||||
| 			name string | ||||
| 			args args | ||||
| 			want template.HTML | ||||
| 		}{ | ||||
| 			{ | ||||
| 				name: "multiple lines", | ||||
| 				args: args{ | ||||
| 					msg: "first line\nsecond line", | ||||
| 				}, | ||||
| 				want: "second line", | ||||
| 			}, | ||||
| 			want: "second line", | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "multiple lines with leading newlines", | ||||
| 			args: args{ | ||||
| 				msg: "\n\n\n\nfirst line\nsecond line", | ||||
| 			{ | ||||
| 				name: "multiple lines with leading newlines", | ||||
| 				args: args{ | ||||
| 					msg: "\n\n\n\nfirst line\nsecond line", | ||||
| 				}, | ||||
| 				want: "second line", | ||||
| 			}, | ||||
| 			want: "second line", | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "multiple lines with trailing newlines", | ||||
| 			args: args{ | ||||
| 				msg: "first line\nsecond line\n\n\n", | ||||
| 			{ | ||||
| 				name: "multiple lines with trailing newlines", | ||||
| 				args: args{ | ||||
| 					msg: "first line\nsecond line\n\n\n", | ||||
| 				}, | ||||
| 				want: "second line", | ||||
| 			}, | ||||
| 			want: "second line", | ||||
| 		}, | ||||
| 	} | ||||
| 	ut := newTestRenderUtils(t) | ||||
| 	for _, tt := range tests { | ||||
| 		t.Run(tt.name, func(t *testing.T) { | ||||
| 			assert.Equalf(t, tt.want, ut.RenderCommitBody(tt.args.msg, nil), "RenderCommitBody(%v, %v)", tt.args.msg, nil) | ||||
| 		}) | ||||
| 	} | ||||
| 		} | ||||
| 		ut := newTestRenderUtils(t) | ||||
| 		for _, tt := range tests { | ||||
| 			t.Run(tt.name, func(t *testing.T) { | ||||
| 				assert.Equalf(t, tt.want, ut.RenderCommitBody(tt.args.msg, mockRepo), "RenderCommitBody(%v, %v)", tt.args.msg, nil) | ||||
| 			}) | ||||
| 		} | ||||
|  | ||||
| 	expected := `/just/a/path.bin | ||||
| 		expected := `/just/a/path.bin | ||||
| <a href="https://example.com/file.bin">https://example.com/file.bin</a> | ||||
| [local link](file.bin) | ||||
| [remote link](<a href="https://example.com">https://example.com</a>) | ||||
| @@ -132,22 +127,22 @@ com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb mit | ||||
| <a href="/mention-user">@mention-user</a> test | ||||
| <a href="/user13/repo11/issues/123" class="ref-issue">#123</a> | ||||
|   space` | ||||
| 	assert.Equal(t, expected, string(newTestRenderUtils(t).RenderCommitBody(testInput(), testMetas))) | ||||
| } | ||||
| 		assert.Equal(t, expected, string(newTestRenderUtils(t).RenderCommitBody(testInput(), mockRepo))) | ||||
| 	}) | ||||
|  | ||||
| func TestRenderCommitMessage(t *testing.T) { | ||||
| 	expected := `space <a href="/mention-user" data-markdown-generated-content="">@mention-user</a>  ` | ||||
| 	assert.EqualValues(t, expected, newTestRenderUtils(t).RenderCommitMessage(testInput(), testMetas)) | ||||
| } | ||||
| 	t.Run("RenderCommitMessage", func(t *testing.T) { | ||||
| 		expected := `space <a href="/mention-user" data-markdown-generated-content="">@mention-user</a>  ` | ||||
| 		assert.EqualValues(t, expected, newTestRenderUtils(t).RenderCommitMessage(testInput(), mockRepo)) | ||||
| 	}) | ||||
|  | ||||
| func TestRenderCommitMessageLinkSubject(t *testing.T) { | ||||
| 	expected := `<a href="https://example.com/link" class="muted">space </a><a href="/mention-user" data-markdown-generated-content="">@mention-user</a>` | ||||
| 	assert.EqualValues(t, expected, newTestRenderUtils(t).RenderCommitMessageLinkSubject(testInput(), "https://example.com/link", testMetas)) | ||||
| } | ||||
| 	t.Run("RenderCommitMessageLinkSubject", func(t *testing.T) { | ||||
| 		expected := `<a href="https://example.com/link" class="muted">space </a><a href="/mention-user" data-markdown-generated-content="">@mention-user</a>` | ||||
| 		assert.EqualValues(t, expected, newTestRenderUtils(t).RenderCommitMessageLinkSubject(testInput(), "https://example.com/link", mockRepo)) | ||||
| 	}) | ||||
|  | ||||
| func TestRenderIssueTitle(t *testing.T) { | ||||
| 	defer test.MockVariableValue(&markup.RenderBehaviorForTesting.DisableAdditionalAttributes, true)() | ||||
| 	expected := `  space @mention-user<SPACE><SPACE> | ||||
| 	t.Run("RenderIssueTitle", func(t *testing.T) { | ||||
| 		defer test.MockVariableValue(&markup.RenderBehaviorForTesting.DisableAdditionalAttributes, true)() | ||||
| 		expected := `  space @mention-user<SPACE><SPACE> | ||||
| /just/a/path.bin | ||||
| https://example.com/file.bin | ||||
| [local link](file.bin) | ||||
| @@ -168,8 +163,9 @@ mail@domain.com | ||||
| <a href="/user13/repo11/issues/123" class="ref-issue">#123</a> | ||||
|   space<SPACE><SPACE> | ||||
| ` | ||||
| 	expected = strings.ReplaceAll(expected, "<SPACE>", " ") | ||||
| 	assert.Equal(t, expected, string(newTestRenderUtils(t).RenderIssueTitle(testInput(), testMetas))) | ||||
| 		expected = strings.ReplaceAll(expected, "<SPACE>", " ") | ||||
| 		assert.Equal(t, expected, string(newTestRenderUtils(t).RenderIssueTitle(testInput(), mockRepo))) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestRenderMarkdownToHtml(t *testing.T) { | ||||
|   | ||||
| @@ -201,7 +201,7 @@ func feedActionsToFeedItems(ctx *context.Context, actions activities_model.Actio | ||||
| 			switch act.OpType { | ||||
| 			case activities_model.ActionCommitRepo, activities_model.ActionMirrorSyncPush: | ||||
| 				push := templates.ActionContent2Commits(act) | ||||
|  | ||||
| 				_ = act.LoadRepo(ctx) | ||||
| 				for _, commit := range push.Commits { | ||||
| 					if len(desc) != 0 { | ||||
| 						desc += "\n\n" | ||||
| @@ -209,7 +209,7 @@ func feedActionsToFeedItems(ctx *context.Context, actions activities_model.Actio | ||||
| 					desc += fmt.Sprintf("<a href=\"%s\">%s</a>\n%s", | ||||
| 						html.EscapeString(fmt.Sprintf("%s/commit/%s", act.GetRepoAbsoluteLink(ctx), commit.Sha1)), | ||||
| 						commit.Sha1, | ||||
| 						renderUtils.RenderCommitMessage(commit.Message, nil), | ||||
| 						renderUtils.RenderCommitMessage(commit.Message, act.Repo), | ||||
| 					) | ||||
| 				} | ||||
|  | ||||
|   | ||||
| @@ -200,13 +200,9 @@ func ViewPost(ctx *context_module.Context) { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// TODO: "ComposeCommentMetas" (usually for comment) is not quite right, but it is still the same as what template "RenderCommitMessage" does. | ||||
| 	// need to be refactored together in the future | ||||
| 	metas := ctx.Repo.Repository.ComposeCommentMetas(ctx) | ||||
|  | ||||
| 	// the title for the "run" is from the commit message | ||||
| 	resp.State.Run.Title = run.Title | ||||
| 	resp.State.Run.TitleHTML = templates.NewRenderUtils(ctx).RenderCommitMessage(run.Title, metas) | ||||
| 	resp.State.Run.TitleHTML = templates.NewRenderUtils(ctx).RenderCommitMessage(run.Title, ctx.Repo.Repository) | ||||
| 	resp.State.Run.Link = run.Link() | ||||
| 	resp.State.Run.CanCancel = !run.Status.IsDone() && ctx.Repo.CanWrite(unit.TypeActions) | ||||
| 	resp.State.Run.CanApprove = run.NeedApproval && ctx.Repo.CanWrite(unit.TypeActions) | ||||
|   | ||||
| @@ -27,7 +27,7 @@ | ||||
| 									<button class="btn interact-fg tw-px-1" data-clipboard-text="{{.DefaultBranchBranch.DBBranch.Name}}" data-tooltip-content="{{ctx.Locale.Tr "copy_branch"}}">{{svg "octicon-copy" 14}}</button> | ||||
| 									{{template "repo/commit_statuses" dict "Status" (index $.CommitStatus .DefaultBranchBranch.DBBranch.CommitID) "Statuses" (index $.CommitStatuses .DefaultBranchBranch.DBBranch.CommitID)}} | ||||
| 								</div> | ||||
| 								<p class="info tw-flex tw-items-center tw-my-1">{{svg "octicon-git-commit" 16 "tw-mr-1"}}<a href="{{.RepoLink}}/commit/{{PathEscape .DefaultBranchBranch.DBBranch.CommitID}}">{{ShortSha .DefaultBranchBranch.DBBranch.CommitID}}</a> · <span class="commit-message">{{ctx.RenderUtils.RenderCommitMessage .DefaultBranchBranch.DBBranch.CommitMessage (.Repository.ComposeCommentMetas ctx)}}</span> · {{ctx.Locale.Tr "org.repo_updated"}} {{DateUtils.TimeSince .DefaultBranchBranch.DBBranch.CommitTime}}{{if .DefaultBranchBranch.DBBranch.Pusher}}  {{template "shared/user/avatarlink" dict "user" .DefaultBranchBranch.DBBranch.Pusher}}{{template "shared/user/namelink" .DefaultBranchBranch.DBBranch.Pusher}}{{end}}</p> | ||||
| 								<p class="info tw-flex tw-items-center tw-my-1">{{svg "octicon-git-commit" 16 "tw-mr-1"}}<a href="{{.RepoLink}}/commit/{{PathEscape .DefaultBranchBranch.DBBranch.CommitID}}">{{ShortSha .DefaultBranchBranch.DBBranch.CommitID}}</a> · <span class="commit-message">{{ctx.RenderUtils.RenderCommitMessage .DefaultBranchBranch.DBBranch.CommitMessage .Repository}}</span> · {{ctx.Locale.Tr "org.repo_updated"}} {{DateUtils.TimeSince .DefaultBranchBranch.DBBranch.CommitTime}}{{if .DefaultBranchBranch.DBBranch.Pusher}}  {{template "shared/user/avatarlink" dict "user" .DefaultBranchBranch.DBBranch.Pusher}}{{template "shared/user/namelink" .DefaultBranchBranch.DBBranch.Pusher}}{{end}}</p> | ||||
| 							</td> | ||||
| 							{{/* FIXME: here and below, the tw-overflow-visible is not quite right but it is still needed the moment: to show the important buttons when the width is narrow */}} | ||||
| 							<td class="tw-text-right tw-overflow-visible"> | ||||
| @@ -103,7 +103,7 @@ | ||||
| 									<button class="btn interact-fg tw-px-1" data-clipboard-text="{{.DBBranch.Name}}" data-tooltip-content="{{ctx.Locale.Tr "copy_branch"}}">{{svg "octicon-copy" 14}}</button> | ||||
| 									{{template "repo/commit_statuses" dict "Status" (index $.CommitStatus .DBBranch.CommitID) "Statuses" (index $.CommitStatuses .DBBranch.CommitID)}} | ||||
| 								</div> | ||||
| 								<p class="info tw-flex tw-items-center tw-my-1">{{svg "octicon-git-commit" 16 "tw-mr-1"}}<a href="{{$.RepoLink}}/commit/{{PathEscape .DBBranch.CommitID}}">{{ShortSha .DBBranch.CommitID}}</a> · <span class="commit-message">{{ctx.RenderUtils.RenderCommitMessage .DBBranch.CommitMessage ($.Repository.ComposeCommentMetas ctx)}}</span> · {{ctx.Locale.Tr "org.repo_updated"}} {{DateUtils.TimeSince .DBBranch.CommitTime}}{{if .DBBranch.Pusher}}  {{template "shared/user/avatarlink" dict "user" .DBBranch.Pusher}}  {{template "shared/user/namelink" .DBBranch.Pusher}}{{end}}</p> | ||||
| 								<p class="info tw-flex tw-items-center tw-my-1">{{svg "octicon-git-commit" 16 "tw-mr-1"}}<a href="{{$.RepoLink}}/commit/{{PathEscape .DBBranch.CommitID}}">{{ShortSha .DBBranch.CommitID}}</a> · <span class="commit-message">{{ctx.RenderUtils.RenderCommitMessage .DBBranch.CommitMessage $.Repository}}</span> · {{ctx.Locale.Tr "org.repo_updated"}} {{DateUtils.TimeSince .DBBranch.CommitTime}}{{if .DBBranch.Pusher}}  {{template "shared/user/avatarlink" dict "user" .DBBranch.Pusher}}  {{template "shared/user/namelink" .DBBranch.Pusher}}{{end}}</p> | ||||
| 							{{end}} | ||||
| 							</td> | ||||
| 							<td class="two wide ui"> | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| 	<div class="ui container fluid padded"> | ||||
| 		<div class="ui top attached header clearing segment tw-relative commit-header"> | ||||
| 			<div class="tw-flex tw-mb-4 tw-gap-1"> | ||||
| 				<h3 class="tw-mb-0 tw-flex-1"><span class="commit-summary" title="{{.Commit.Summary}}">{{ctx.RenderUtils.RenderCommitMessage .Commit.Message ($.Repository.ComposeCommentMetas ctx)}}</span>{{template "repo/commit_statuses" dict "Status" .CommitStatus "Statuses" .CommitStatuses}}</h3> | ||||
| 				<h3 class="tw-mb-0 tw-flex-1"><span class="commit-summary" title="{{.Commit.Summary}}">{{ctx.RenderUtils.RenderCommitMessage .Commit.Message $.Repository}}</span>{{template "repo/commit_statuses" dict "Status" .CommitStatus "Statuses" .CommitStatuses}}</h3> | ||||
| 				{{if not $.PageIsWiki}} | ||||
| 					<div class="commit-header-buttons"> | ||||
| 						<a class="ui primary tiny button" href="{{.SourcePath}}"> | ||||
| @@ -122,7 +122,7 @@ | ||||
| 				{{end}} | ||||
| 			</div> | ||||
| 			{{if IsMultilineCommitMessage .Commit.Message}} | ||||
| 				<pre class="commit-body">{{ctx.RenderUtils.RenderCommitBody .Commit.Message ($.Repository.ComposeCommentMetas ctx)}}</pre> | ||||
| 				<pre class="commit-body">{{ctx.RenderUtils.RenderCommitBody .Commit.Message $.Repository}}</pre> | ||||
| 			{{end}} | ||||
| 			{{template "repo/commit_load_branches_and_tags" .}} | ||||
| 		</div> | ||||
|   | ||||
| @@ -44,7 +44,7 @@ | ||||
| 							<span class="commit-summary {{if gt .ParentCount 1}} grey text{{end}}" title="{{.Summary}}">{{.Summary | ctx.RenderUtils.RenderEmoji}}</span> | ||||
| 						{{else}} | ||||
| 							{{$commitLink:= printf "%s/commit/%s" $commitRepoLink (PathEscape .ID.String)}} | ||||
| 							<span class="commit-summary {{if gt .ParentCount 1}} grey text{{end}}" title="{{.Summary}}">{{ctx.RenderUtils.RenderCommitMessageLinkSubject .Message $commitLink ($.Repository.ComposeCommentMetas ctx)}}</span> | ||||
| 							<span class="commit-summary {{if gt .ParentCount 1}} grey text{{end}}" title="{{.Summary}}">{{ctx.RenderUtils.RenderCommitMessageLinkSubject .Message $commitLink $.Repository}}</span> | ||||
| 						{{end}} | ||||
| 						</span> | ||||
| 						{{if IsMultilineCommitMessage .Message}} | ||||
| @@ -52,7 +52,7 @@ | ||||
| 						{{end}} | ||||
| 						{{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses}} | ||||
| 						{{if IsMultilineCommitMessage .Message}} | ||||
| 						<pre class="commit-body tw-hidden">{{ctx.RenderUtils.RenderCommitBody .Message ($.Repository.ComposeCommentMetas ctx)}}</pre> | ||||
| 						<pre class="commit-body tw-hidden">{{ctx.RenderUtils.RenderCommitBody .Message $.Repository}}</pre> | ||||
| 						{{end}} | ||||
| 						{{if $.CommitsTagsMap}} | ||||
| 							{{range (index $.CommitsTagsMap .ID.String)}} | ||||
|   | ||||
| @@ -15,7 +15,7 @@ | ||||
| 		{{$commitLink:= printf "%s/%s" $commitBaseLink (PathEscape .ID.String)}} | ||||
|  | ||||
| 		<span class="tw-flex-1 tw-font-mono gt-ellipsis" title="{{.Summary}}"> | ||||
| 			{{- ctx.RenderUtils.RenderCommitMessageLinkSubject .Message $commitLink ($.comment.Issue.PullRequest.BaseRepo.ComposeCommentMetas ctx) -}} | ||||
| 			{{- ctx.RenderUtils.RenderCommitMessageLinkSubject .Message $commitLink $.comment.Issue.PullRequest.BaseRepo -}} | ||||
| 		</span> | ||||
|  | ||||
| 		{{if IsMultilineCommitMessage .Message}} | ||||
| @@ -29,7 +29,7 @@ | ||||
| 	</div> | ||||
| 	{{if IsMultilineCommitMessage .Message}} | ||||
| 	<pre class="commit-body tw-ml-[33px] tw-hidden" data-singular-commit-body-for="{{$tag}}"> | ||||
| 		{{- ctx.RenderUtils.RenderCommitBody .Message ($.comment.Issue.PullRequest.BaseRepo.ComposeCommentMetas ctx) -}} | ||||
| 		{{- ctx.RenderUtils.RenderCommitBody .Message $.comment.Issue.PullRequest.BaseRepo -}} | ||||
| 	</pre> | ||||
| 	{{end}} | ||||
| {{end}} | ||||
|   | ||||
| @@ -189,7 +189,7 @@ | ||||
| 				<div class="ui segment flex-text-block tw-gap-4"> | ||||
| 					{{template "shared/issueicon" .}} | ||||
| 					<div class="issue-title tw-break-anywhere"> | ||||
| 						{{ctx.RenderUtils.RenderIssueTitle .PullRequest.Issue.Title ($.Repository.ComposeCommentMetas ctx)}} | ||||
| 						{{ctx.RenderUtils.RenderIssueTitle .PullRequest.Issue.Title $.Repository}} | ||||
| 						<span class="index">#{{.PullRequest.Issue.Index}}</span> | ||||
| 					</div> | ||||
| 					<a href="{{$.RepoLink}}/pulls/{{.PullRequest.Issue.Index}}" class="ui compact button primary"> | ||||
|   | ||||
| @@ -8,7 +8,7 @@ | ||||
| 					{{template "repo/commit_sign_badge" dict "Commit" $commit.Commit "CommitBaseLink" (print $.RepoLink "/commit") "CommitSignVerification" $commit.Verification}} | ||||
|  | ||||
| 					<span class="message tw-inline-block gt-ellipsis"> | ||||
| 						<span>{{ctx.RenderUtils.RenderCommitMessage $commit.Subject ($.Repository.ComposeCommentMetas ctx)}}</span> | ||||
| 						<span>{{ctx.RenderUtils.RenderCommitMessage $commit.Subject $.Repository}}</span> | ||||
| 					</span> | ||||
|  | ||||
| 					<span class="commit-refs flex-text-inline"> | ||||
|   | ||||
| @@ -13,7 +13,7 @@ | ||||
| 	{{$canEditIssueTitle := and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .Repository.IsArchived)}} | ||||
| 	<div class="issue-title" id="issue-title-display"> | ||||
| 		<h1 class="tw-break-anywhere"> | ||||
| 			{{ctx.RenderUtils.RenderIssueTitle .Issue.Title ($.Repository.ComposeCommentMetas ctx)}} | ||||
| 			{{ctx.RenderUtils.RenderIssueTitle .Issue.Title $.Repository}} | ||||
| 			<span class="index">#{{.Issue.Index}}</span> | ||||
| 		</h1> | ||||
| 		<div class="issue-title-buttons"> | ||||
|   | ||||
| @@ -21,10 +21,10 @@ | ||||
| 	{{template "repo/commit_statuses" dict "Status" .LatestCommitStatus "Statuses" .LatestCommitStatuses}} | ||||
|  | ||||
| 	{{$commitLink:= printf "%s/commit/%s" .RepoLink (PathEscape .LatestCommit.ID.String)}} | ||||
| 	<span class="grey commit-summary" title="{{.LatestCommit.Summary}}"><span class="message-wrapper">{{ctx.RenderUtils.RenderCommitMessageLinkSubject .LatestCommit.Message $commitLink ($.Repository.ComposeCommentMetas ctx)}}</span> | ||||
| 	<span class="grey commit-summary" title="{{.LatestCommit.Summary}}"><span class="message-wrapper">{{ctx.RenderUtils.RenderCommitMessageLinkSubject .LatestCommit.Message $commitLink $.Repository}}</span> | ||||
| 		{{if IsMultilineCommitMessage .LatestCommit.Message}} | ||||
| 			<button class="ui button ellipsis-button" aria-expanded="false" data-global-click="onRepoEllipsisButtonClick">...</button> | ||||
| 			<pre class="commit-body tw-hidden">{{ctx.RenderUtils.RenderCommitBody .LatestCommit.Message ($.Repository.ComposeCommentMetas ctx)}}</pre> | ||||
| 			<pre class="commit-body tw-hidden">{{ctx.RenderUtils.RenderCommitBody .LatestCommit.Message $.Repository}}</pre> | ||||
| 		{{end}} | ||||
| 	</span> | ||||
| {{end}} | ||||
|   | ||||
| @@ -47,7 +47,7 @@ | ||||
| 			<div class="repo-file-cell message loading-icon-2px"> | ||||
| 				{{if $commit}} | ||||
| 					{{$commitLink := printf "%s/commit/%s" $.RepoLink (PathEscape $commit.ID.String)}} | ||||
| 					{{ctx.RenderUtils.RenderCommitMessageLinkSubject $commit.Message $commitLink ($.Repository.ComposeCommentMetas ctx)}} | ||||
| 					{{ctx.RenderUtils.RenderCommitMessageLinkSubject $commit.Message $commitLink $.Repository}} | ||||
| 				{{else}} | ||||
| 					… {{/* will be loaded again by LastCommitLoaderURL */}} | ||||
| 				{{end}} | ||||
|   | ||||
| @@ -94,7 +94,7 @@ | ||||
| 								<img alt class="ui avatar" src="{{$push.AvatarLink ctx .AuthorEmail}}" title="{{.AuthorName}}" width="16" height="16"> | ||||
| 								<a class="ui sha label" href="{{$commitLink}}">{{ShortSha .Sha1}}</a> | ||||
| 								<span class="text truncate"> | ||||
| 									{{ctx.RenderUtils.RenderCommitMessage .Message ($repo.ComposeCommentMetas ctx)}} | ||||
| 									{{ctx.RenderUtils.RenderCommitMessage .Message $repo}} | ||||
| 								</span> | ||||
| 							</div> | ||||
| 						{{end}} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user