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 @@
}
+