(refs #664)Normalize line separator and empty line

This commit is contained in:
Naoki Takezoe
2015-03-25 20:56:17 +09:00
parent a22878e2c5
commit 73766f11eb
4 changed files with 49 additions and 10 deletions

View File

@@ -6,6 +6,7 @@ import gitbucket.core.helper
import gitbucket.core.service._ import gitbucket.core.service._
import gitbucket.core.util._ import gitbucket.core.util._
import gitbucket.core.util.JGitUtil._ import gitbucket.core.util.JGitUtil._
import gitbucket.core.util.StringUtil._
import gitbucket.core.util.ControlUtil._ import gitbucket.core.util.ControlUtil._
import gitbucket.core.util.Implicits._ import gitbucket.core.util.Implicits._
import gitbucket.core.util.Directory._ import gitbucket.core.util.Directory._
@@ -236,9 +237,16 @@ trait RepositoryViewerControllerBase extends ControllerBase {
}) })
post("/:owner/:repository/create", editorForm)(collaboratorsOnly { (form, repository) => post("/:owner/:repository/create", editorForm)(collaboratorsOnly { (form, repository) =>
commitFile(repository, form.branch, form.path, Some(form.newFileName), None, commitFile(
StringUtil.convertLineSeparator(form.content, form.lineSeparator), form.charset, repository = repository,
form.message.getOrElse(s"Create ${form.newFileName}")) branch = form.branch,
path = form.path,
newFileName = Some(form.newFileName),
oldFileName = None,
content = appendNewLine(convertLineSeparator(form.content, form.lineSeparator), form.lineSeparator),
charset = form.charset,
message = form.message.getOrElse(s"Create ${form.newFileName}")
)
redirect(s"/${repository.owner}/${repository.name}/blob/${form.branch}/${ redirect(s"/${repository.owner}/${repository.name}/blob/${form.branch}/${
if(form.path.length == 0) form.newFileName else s"${form.path}/${form.newFileName}" if(form.path.length == 0) form.newFileName else s"${form.path}/${form.newFileName}"
@@ -246,13 +254,20 @@ trait RepositoryViewerControllerBase extends ControllerBase {
}) })
post("/:owner/:repository/update", editorForm)(collaboratorsOnly { (form, repository) => post("/:owner/:repository/update", editorForm)(collaboratorsOnly { (form, repository) =>
commitFile(repository, form.branch, form.path, Some(form.newFileName), form.oldFileName, commitFile(
StringUtil.convertLineSeparator(form.content, form.lineSeparator), form.charset, repository = repository,
if(form.oldFileName.exists(_ == form.newFileName)){ branch = form.branch,
path = form.path,
newFileName = Some(form.newFileName),
oldFileName = form.oldFileName,
content = appendNewLine(convertLineSeparator(form.content, form.lineSeparator), form.lineSeparator),
charset = form.charset,
message = if(form.oldFileName.exists(_ == form.newFileName)){
form.message.getOrElse(s"Update ${form.newFileName}") form.message.getOrElse(s"Update ${form.newFileName}")
} else { } else {
form.message.getOrElse(s"Rename ${form.oldFileName.get} to ${form.newFileName}") form.message.getOrElse(s"Rename ${form.oldFileName.get} to ${form.newFileName}")
}) }
)
redirect(s"/${repository.owner}/${repository.name}/blob/${form.branch}/${ redirect(s"/${repository.owner}/${repository.name}/blob/${form.branch}/${
if(form.path.length == 0) form.newFileName else s"${form.path}/${form.newFileName}" if(form.path.length == 0) form.newFileName else s"${form.path}/${form.newFileName}"

View File

@@ -3,6 +3,7 @@ package gitbucket.core.controller
import gitbucket.core.wiki.html import gitbucket.core.wiki.html
import gitbucket.core.service.{RepositoryService, WikiService, ActivityService, AccountService} import gitbucket.core.service.{RepositoryService, WikiService, ActivityService, AccountService}
import gitbucket.core.util._ import gitbucket.core.util._
import gitbucket.core.util.StringUtil._
import gitbucket.core.util.ControlUtil._ import gitbucket.core.util.ControlUtil._
import gitbucket.core.util.Implicits._ import gitbucket.core.util.Implicits._
import gitbucket.core.util.Directory._ import gitbucket.core.util.Directory._
@@ -110,8 +111,16 @@ trait WikiControllerBase extends ControllerBase {
post("/:owner/:repository/wiki/_edit", editForm)(collaboratorsOnly { (form, repository) => post("/:owner/:repository/wiki/_edit", editForm)(collaboratorsOnly { (form, repository) =>
defining(context.loginAccount.get){ loginAccount => defining(context.loginAccount.get){ loginAccount =>
saveWikiPage(repository.owner, repository.name, form.currentPageName, form.pageName, saveWikiPage(
form.content, loginAccount, form.message.getOrElse(""), Some(form.id)).map { commitId => repository.owner,
repository.name,
form.currentPageName,
form.pageName,
appendNewLine(convertLineSeparator(form.content, "LF"), "LF"),
loginAccount,
form.message.getOrElse(""),
Some(form.id)
).map { commitId =>
updateLastActivityDate(repository.owner, repository.name) updateLastActivityDate(repository.owner, repository.name)
recordEditWikiPageActivity(repository.owner, repository.name, loginAccount.userName, form.pageName, commitId) recordEditWikiPageActivity(repository.owner, repository.name, loginAccount.userName, form.pageName, commitId)
} }

View File

@@ -202,7 +202,7 @@ trait WikiService {
} }
/** /**
* Save the wiki page. * Save the wiki page and return the commit id.
*/ */
def saveWikiPage(owner: String, repository: String, currentPageName: String, newPageName: String, def saveWikiPage(owner: String, repository: String, currentPageName: String, newPageName: String,
content: String, committer: Account, message: String, currentId: Option[String]): Option[String] = { content: String, committer: Account, message: String, currentId: Option[String]): Option[String] = {

View File

@@ -62,6 +62,21 @@ object StringUtil {
} }
} }
/**
* Appends LF if the given string does not end with LF.
*
* @param content the content
* @param lineSeparator "LF" or "CRLF"
* @return the converted content
*/
def appendNewLine(content: String, lineSeparator: String): String = {
if(lineSeparator == "CRLF") {
if (content.endsWith("\r\n")) content else content + "\r\n"
} else {
if (content.endsWith("\n")) content else content + "\n"
}
}
/** /**
* Extract issue id like ```#issueId``` from the given message. * Extract issue id like ```#issueId``` from the given message.
* *