diff --git a/src/main/scala/app/RepositoryViewerController.scala b/src/main/scala/app/RepositoryViewerController.scala index 878214a..ab2cf05 100644 --- a/src/main/scala/app/RepositoryViewerController.scala +++ b/src/main/scala/app/RepositoryViewerController.scala @@ -15,7 +15,7 @@ import java.util.zip.{ZipEntry, ZipOutputStream} import jp.sf.amateras.scalatra.forms._ import org.eclipse.jgit.dircache.DirCache -import org.eclipse.jgit.revwalk.{RevCommit, RevWalk} +import org.eclipse.jgit.revwalk.RevCommit import service.WebHookService.WebHookPayload class RepositoryViewerController extends RepositoryViewerControllerBase @@ -35,6 +35,7 @@ content: String, message: Option[String], charset: String, + lineSeparator: String, newFileName: String, oldFileName: Option[String] ) @@ -47,13 +48,14 @@ ) val editorForm = mapping( - "branch" -> trim(label("Branch", text(required))), - "path" -> trim(label("Path", text())), - "content" -> trim(label("Content", text(required))), - "message" -> trim(label("Message", optional(text()))), - "charset" -> trim(label("Charset", text(required))), - "newFileName" -> trim(label("Filename", text(required))), - "oldFileName" -> trim(label("Old filename", optional(text()))) + "branch" -> trim(label("Branch", text(required))), + "path" -> trim(label("Path", text())), + "content" -> trim(label("Content", text(required))), + "message" -> trim(label("Message", optional(text()))), + "charset" -> trim(label("Charset", text(required))), + "lineSeparator" -> trim(label("Line Separator", text(required))), + "newFileName" -> trim(label("Filename", text(required))), + "oldFileName" -> trim(label("Old filename", optional(text()))) )(EditorForm.apply) val deleteForm = mapping( @@ -145,7 +147,8 @@ }) post("/:owner/:repository/create", editorForm)(collaboratorsOnly { (form, repository) => - commitFile(repository, form.branch, form.path, Some(form.newFileName), None, form.content, form.charset, + 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}")) redirect(s"/${repository.owner}/${repository.name}/blob/${form.branch}/${ @@ -154,7 +157,8 @@ }) post("/:owner/:repository/update", editorForm)(collaboratorsOnly { (form, repository) => - commitFile(repository, form.branch, form.path, Some(form.newFileName), form.oldFileName, form.content, form.charset, + 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)){ form.message.getOrElse(s"Update ${form.newFileName}") } else { diff --git a/src/main/scala/util/JGitUtil.scala b/src/main/scala/util/JGitUtil.scala index c68bdbf..0dfebe5 100644 --- a/src/main/scala/util/JGitUtil.scala +++ b/src/main/scala/util/JGitUtil.scala @@ -98,7 +98,12 @@ * @param content the string content * @param charset the character encoding */ - case class ContentInfo(viewType: String, content: Option[String], charset: Option[String]) + case class ContentInfo(viewType: String, content: Option[String], charset: Option[String]){ + /** + * the line separator of this content ("LF" or "CRLF") + */ + val lineSeparator: String = if(content.exists(_.indexOf("¥r¥n") >= 0)) "CRLF" else "LF" + } /** * The tag data. diff --git a/src/main/scala/util/StringUtil.scala b/src/main/scala/util/StringUtil.scala index 54da029..9413813 100644 --- a/src/main/scala/util/StringUtil.scala +++ b/src/main/scala/util/StringUtil.scala @@ -47,6 +47,22 @@ } /** + * Converts line separator in the given content. + * + * @param content the content + * @param lineSeparator "LF" or "CRLF" + * @return the converted content + */ + def convertLineSeparator(content: String, lineSeparator: String): String = { + val lf = content.replaceAll("¥r¥n", "¥n").replaceAll("¥r", "¥n") + if(lineSeparator == "CRLF"){ + lf.replaceAll("¥n", "¥r¥n") + } else { + lf + } + } + + /** * Extract issue id like ```#issueId``` from the given message. * *@param message the message which may contains issue id diff --git a/src/main/twirl/repo/editor.scala.html b/src/main/twirl/repo/editor.scala.html index 94184a1..9d8ce9a 100644 --- a/src/main/twirl/repo/editor.scala.html +++ b/src/main/twirl/repo/editor.scala.html @@ -60,6 +60,7 @@ } +