From 73766f11ebdfd99d4c2742c4a4681b3c42783c3a Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Wed, 25 Mar 2015 20:56:17 +0900 Subject: [PATCH] (refs #664)Normalize line separator and empty line --- .../RepositoryViewerController.scala | 29 ++++++++++++++----- .../core/controller/WikiController.scala | 13 +++++++-- .../gitbucket/core/service/WikiService.scala | 2 +- .../gitbucket/core/util/StringUtil.scala | 15 ++++++++++ 4 files changed, 49 insertions(+), 10 deletions(-) diff --git a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala index 1dca52124..411a58dbd 100644 --- a/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala +++ b/src/main/scala/gitbucket/core/controller/RepositoryViewerController.scala @@ -6,6 +6,7 @@ import gitbucket.core.helper import gitbucket.core.service._ import gitbucket.core.util._ import gitbucket.core.util.JGitUtil._ +import gitbucket.core.util.StringUtil._ import gitbucket.core.util.ControlUtil._ import gitbucket.core.util.Implicits._ import gitbucket.core.util.Directory._ @@ -236,9 +237,16 @@ trait RepositoryViewerControllerBase extends ControllerBase { }) post("/:owner/:repository/create", editorForm)(collaboratorsOnly { (form, repository) => - commitFile(repository, form.branch, form.path, Some(form.newFileName), None, - StringUtil.convertLineSeparator(form.content, form.lineSeparator), form.charset, - form.message.getOrElse(s"Create ${form.newFileName}")) + commitFile( + repository = repository, + 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}/${ 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) => - commitFile(repository, form.branch, form.path, Some(form.newFileName), form.oldFileName, - StringUtil.convertLineSeparator(form.content, form.lineSeparator), form.charset, - if(form.oldFileName.exists(_ == form.newFileName)){ + commitFile( + repository = repository, + 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}") } else { form.message.getOrElse(s"Rename ${form.oldFileName.get} to ${form.newFileName}") - }) + } + ) redirect(s"/${repository.owner}/${repository.name}/blob/${form.branch}/${ if(form.path.length == 0) form.newFileName else s"${form.path}/${form.newFileName}" diff --git a/src/main/scala/gitbucket/core/controller/WikiController.scala b/src/main/scala/gitbucket/core/controller/WikiController.scala index 2bdc7a079..7f876d059 100644 --- a/src/main/scala/gitbucket/core/controller/WikiController.scala +++ b/src/main/scala/gitbucket/core/controller/WikiController.scala @@ -3,6 +3,7 @@ package gitbucket.core.controller import gitbucket.core.wiki.html import gitbucket.core.service.{RepositoryService, WikiService, ActivityService, AccountService} import gitbucket.core.util._ +import gitbucket.core.util.StringUtil._ import gitbucket.core.util.ControlUtil._ import gitbucket.core.util.Implicits._ import gitbucket.core.util.Directory._ @@ -110,8 +111,16 @@ trait WikiControllerBase extends ControllerBase { post("/:owner/:repository/wiki/_edit", editForm)(collaboratorsOnly { (form, repository) => defining(context.loginAccount.get){ loginAccount => - saveWikiPage(repository.owner, repository.name, form.currentPageName, form.pageName, - form.content, loginAccount, form.message.getOrElse(""), Some(form.id)).map { commitId => + saveWikiPage( + 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) recordEditWikiPageActivity(repository.owner, repository.name, loginAccount.userName, form.pageName, commitId) } diff --git a/src/main/scala/gitbucket/core/service/WikiService.scala b/src/main/scala/gitbucket/core/service/WikiService.scala index f317c5187..4a8d1eb13 100644 --- a/src/main/scala/gitbucket/core/service/WikiService.scala +++ b/src/main/scala/gitbucket/core/service/WikiService.scala @@ -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, content: String, committer: Account, message: String, currentId: Option[String]): Option[String] = { diff --git a/src/main/scala/gitbucket/core/util/StringUtil.scala b/src/main/scala/gitbucket/core/util/StringUtil.scala index 4bb1cb071..5633598b2 100644 --- a/src/main/scala/gitbucket/core/util/StringUtil.scala +++ b/src/main/scala/gitbucket/core/util/StringUtil.scala @@ -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. *