|
|
|
@ -19,6 +19,7 @@ import ( |
|
|
|
|
"runtime" |
|
|
|
|
"strings" |
|
|
|
|
"time" |
|
|
|
|
"unicode" |
|
|
|
|
|
|
|
|
|
"code.gitea.io/gitea/models" |
|
|
|
|
"code.gitea.io/gitea/modules/base" |
|
|
|
@ -338,34 +339,46 @@ func RenderCommitMessageLink(msg, urlPrefix, urlDefault string, metas map[string |
|
|
|
|
// RenderCommitMessageLinkSubject renders commit message as a XXS-safe link to
|
|
|
|
|
// the provided default url, handling for special links without email to links.
|
|
|
|
|
func RenderCommitMessageLinkSubject(msg, urlPrefix, urlDefault string, metas map[string]string) template.HTML { |
|
|
|
|
cleanMsg := template.HTMLEscapeString(msg) |
|
|
|
|
msgLine := strings.TrimLeftFunc(msg, unicode.IsSpace) |
|
|
|
|
lineEnd := strings.IndexByte(msgLine, '\n') |
|
|
|
|
if lineEnd > 0 { |
|
|
|
|
msgLine = msgLine[:lineEnd] |
|
|
|
|
} |
|
|
|
|
msgLine = strings.TrimRightFunc(msgLine, unicode.IsSpace) |
|
|
|
|
if len(msgLine) == 0 { |
|
|
|
|
return template.HTML("") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// we can safely assume that it will not return any error, since there
|
|
|
|
|
// shouldn't be any special HTML.
|
|
|
|
|
fullMessage, err := markup.RenderCommitMessageSubject([]byte(cleanMsg), urlPrefix, urlDefault, metas) |
|
|
|
|
renderedMessage, err := markup.RenderCommitMessageSubject([]byte(template.HTMLEscapeString(msgLine)), urlPrefix, urlDefault, metas) |
|
|
|
|
if err != nil { |
|
|
|
|
log.Error("RenderCommitMessageSubject: %v", err) |
|
|
|
|
return "" |
|
|
|
|
} |
|
|
|
|
msgLines := strings.Split(strings.TrimSpace(string(fullMessage)), "\n") |
|
|
|
|
if len(msgLines) == 0 { |
|
|
|
|
return template.HTML("") |
|
|
|
|
} |
|
|
|
|
return template.HTML(msgLines[0]) |
|
|
|
|
return template.HTML(renderedMessage) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// RenderCommitBody extracts the body of a commit message without its title.
|
|
|
|
|
func RenderCommitBody(msg, urlPrefix string, metas map[string]string) template.HTML { |
|
|
|
|
cleanMsg := template.HTMLEscapeString(msg) |
|
|
|
|
fullMessage, err := markup.RenderCommitMessage([]byte(cleanMsg), urlPrefix, "", metas) |
|
|
|
|
msgLine := strings.TrimRightFunc(msg, unicode.IsSpace) |
|
|
|
|
lineEnd := strings.IndexByte(msgLine, '\n') |
|
|
|
|
if lineEnd > 0 { |
|
|
|
|
msgLine = msgLine[lineEnd+1:] |
|
|
|
|
} else { |
|
|
|
|
return template.HTML("") |
|
|
|
|
} |
|
|
|
|
msgLine = strings.TrimLeftFunc(msgLine, unicode.IsSpace) |
|
|
|
|
if len(msgLine) == 0 { |
|
|
|
|
return template.HTML("") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
renderedMessage, err := markup.RenderCommitMessage([]byte(template.HTMLEscapeString(msgLine)), urlPrefix, "", metas) |
|
|
|
|
if err != nil { |
|
|
|
|
log.Error("RenderCommitMessage: %v", err) |
|
|
|
|
return "" |
|
|
|
|
} |
|
|
|
|
body := strings.Split(strings.TrimSpace(string(fullMessage)), "\n") |
|
|
|
|
if len(body) == 0 { |
|
|
|
|
return template.HTML("") |
|
|
|
|
} |
|
|
|
|
return template.HTML(strings.Join(body[1:], "\n")) |
|
|
|
|
return template.HTML(renderedMessage) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// RenderNote renders the contents of a git-notes file as a commit message.
|
|
|
|
|