|
|
|
@ -183,15 +183,27 @@ func ReplaceLeft(s, old, new string) string { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// RenderCommitMessage renders commit message with XSS-safe and special links.
|
|
|
|
|
func RenderCommitMessage(msg, urlPrefix string, metas map[string]string) template.HTML { |
|
|
|
|
func RenderCommitMessage(full bool, msg, urlPrefix string, metas map[string]string) template.HTML { |
|
|
|
|
cleanMsg := template.HTMLEscapeString(msg) |
|
|
|
|
fullMessage := string(base.RenderIssueIndexPattern([]byte(cleanMsg), urlPrefix, metas)) |
|
|
|
|
msgLines := strings.Split(strings.TrimSpace(fullMessage), "\n") |
|
|
|
|
for i := range msgLines { |
|
|
|
|
msgLines[i] = ReplaceLeft(msgLines[i], " ", " ") |
|
|
|
|
numLines := len(msgLines) |
|
|
|
|
if numLines == 0 { |
|
|
|
|
return template.HTML("") |
|
|
|
|
} else if !full { |
|
|
|
|
return template.HTML(msgLines[0]) |
|
|
|
|
} else if numLines == 1 || (numLines >= 2 && len(msgLines[1]) == 0) { |
|
|
|
|
// First line is a header, standalone or followed by empty line
|
|
|
|
|
header := fmt.Sprintf("<h3>%s</h3>", msgLines[0]) |
|
|
|
|
if numLines >= 2 { |
|
|
|
|
fullMessage = header + fmt.Sprintf("\n<pre>%s</pre>", strings.Join(msgLines[2:], "\n")) |
|
|
|
|
} else { |
|
|
|
|
fullMessage = header |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
// Non-standard git message, there is no header line
|
|
|
|
|
fullMessage = fmt.Sprintf("<h4>%s</h4>", strings.Join(msgLines, "<br>")) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fullMessage = strings.Join(msgLines, "<br>") |
|
|
|
|
return template.HTML(fullMessage) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|