@ -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 )
rendered Message, 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.