diff --git a/modules/templates/helper.go b/modules/templates/helper.go index 24a383252b..098a642556 100644 --- a/modules/templates/helper.go +++ b/modules/templates/helper.go @@ -125,6 +125,7 @@ func NewFuncMap() []template.FuncMap { "RenderCommitMessage": RenderCommitMessage, "RenderCommitMessageLink": RenderCommitMessageLink, "RenderCommitBody": RenderCommitBody, + "RenderNote": RenderNote, "IsMultilineCommitMessage": IsMultilineCommitMessage, "ThemeColorMetaTag": func() string { return setting.UI.ThemeColorMetaTag @@ -392,6 +393,17 @@ func RenderCommitBody(msg, urlPrefix string, metas map[string]string) template.H return template.HTML(strings.Join(body[1:], "\n")) } +// RenderNote renders the contents of a git-notes file as a commit message. +func RenderNote(msg, urlPrefix string, metas map[string]string) template.HTML { + cleanMsg := template.HTMLEscapeString(msg) + fullMessage, err := markup.RenderCommitMessage([]byte(cleanMsg), urlPrefix, "", metas) + if err != nil { + log.Error("RenderNote: %v", err) + return "" + } + return template.HTML(string(fullMessage)) +} + // IsMultilineCommitMessage checks to see if a commit message contains multiple lines. func IsMultilineCommitMessage(msg string) bool { return strings.Count(strings.TrimSpace(msg), "\n") >= 1 diff --git a/routers/repo/commit.go b/routers/repo/commit.go index 2978eda6c0..c9b09743f0 100644 --- a/routers/repo/commit.go +++ b/routers/repo/commit.go @@ -6,6 +6,7 @@ package repo import ( + "io/ioutil" "path" "strings" @@ -15,6 +16,7 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/templates" ) const ( @@ -246,6 +248,23 @@ func Diff(ctx *context.Context) { ctx.Data["Parents"] = parents ctx.Data["DiffNotAvailable"] = diff.NumFiles() == 0 ctx.Data["SourcePath"] = setting.AppSubURL + "/" + path.Join(userName, repoName, "src", "commit", commitID) + + notes, err := ctx.Repo.GitRepo.GetCommit("refs/notes/commits") + if err == nil { + entry, err := notes.GetTreeEntryByPath(commitID) + if err == nil { + blob := entry.Blob() + dataRc, err := blob.DataAsync() + if err == nil { + d, err := ioutil.ReadAll(dataRc) + dataRc.Close() + if err == nil { + ctx.Data["Note"] = string(templates.ToUTF8WithFallback(d)) + } + } + } + } + if commit.ParentCount() > 0 { ctx.Data["BeforeSourcePath"] = setting.AppSubURL + "/" + path.Join(userName, repoName, "src", "commit", parents[0]) } diff --git a/templates/repo/diff/page.tmpl b/templates/repo/diff/page.tmpl index c8f5a3d9f0..4f5a1fc19d 100644 --- a/templates/repo/diff/page.tmpl +++ b/templates/repo/diff/page.tmpl @@ -65,6 +65,12 @@ {{end}} {{end}} + {{if .Note}} +
{{RenderNote .Note $.RepoLink $.Repository.ComposeMetas}}+