mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-08 14:35:52 +01:00
(refs #445)Keep line separator in online file editing
This commit is contained in:
@@ -15,7 +15,7 @@ import org.eclipse.jgit.treewalk._
|
|||||||
import java.util.zip.{ZipEntry, ZipOutputStream}
|
import java.util.zip.{ZipEntry, ZipOutputStream}
|
||||||
import jp.sf.amateras.scalatra.forms._
|
import jp.sf.amateras.scalatra.forms._
|
||||||
import org.eclipse.jgit.dircache.DirCache
|
import org.eclipse.jgit.dircache.DirCache
|
||||||
import org.eclipse.jgit.revwalk.{RevCommit, RevWalk}
|
import org.eclipse.jgit.revwalk.RevCommit
|
||||||
import service.WebHookService.WebHookPayload
|
import service.WebHookService.WebHookPayload
|
||||||
|
|
||||||
class RepositoryViewerController extends RepositoryViewerControllerBase
|
class RepositoryViewerController extends RepositoryViewerControllerBase
|
||||||
@@ -35,6 +35,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
|
|||||||
content: String,
|
content: String,
|
||||||
message: Option[String],
|
message: Option[String],
|
||||||
charset: String,
|
charset: String,
|
||||||
|
lineSeparator: String,
|
||||||
newFileName: String,
|
newFileName: String,
|
||||||
oldFileName: Option[String]
|
oldFileName: Option[String]
|
||||||
)
|
)
|
||||||
@@ -47,13 +48,14 @@ trait RepositoryViewerControllerBase extends ControllerBase {
|
|||||||
)
|
)
|
||||||
|
|
||||||
val editorForm = mapping(
|
val editorForm = mapping(
|
||||||
"branch" -> trim(label("Branch", text(required))),
|
"branch" -> trim(label("Branch", text(required))),
|
||||||
"path" -> trim(label("Path", text())),
|
"path" -> trim(label("Path", text())),
|
||||||
"content" -> trim(label("Content", text(required))),
|
"content" -> trim(label("Content", text(required))),
|
||||||
"message" -> trim(label("Message", optional(text()))),
|
"message" -> trim(label("Message", optional(text()))),
|
||||||
"charset" -> trim(label("Charset", text(required))),
|
"charset" -> trim(label("Charset", text(required))),
|
||||||
"newFileName" -> trim(label("Filename", text(required))),
|
"lineSeparator" -> trim(label("Line Separator", text(required))),
|
||||||
"oldFileName" -> trim(label("Old filename", optional(text())))
|
"newFileName" -> trim(label("Filename", text(required))),
|
||||||
|
"oldFileName" -> trim(label("Old filename", optional(text())))
|
||||||
)(EditorForm.apply)
|
)(EditorForm.apply)
|
||||||
|
|
||||||
val deleteForm = mapping(
|
val deleteForm = mapping(
|
||||||
@@ -145,7 +147,8 @@ 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, 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}"))
|
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}/${
|
||||||
@@ -154,7 +157,8 @@ 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, 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)){
|
if(form.oldFileName.exists(_ == form.newFileName)){
|
||||||
form.message.getOrElse(s"Update ${form.newFileName}")
|
form.message.getOrElse(s"Update ${form.newFileName}")
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -98,7 +98,12 @@ object JGitUtil {
|
|||||||
* @param content the string content
|
* @param content the string content
|
||||||
* @param charset the character encoding
|
* @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.
|
* The tag data.
|
||||||
|
|||||||
@@ -46,6 +46,22 @@ object StringUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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.
|
* Extract issue id like ```#issueId``` from the given message.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -60,6 +60,7 @@
|
|||||||
}
|
}
|
||||||
<input type="submit" id="commit" class="btn btn-success" value="Commit changes" disabled="true"/>
|
<input type="submit" id="commit" class="btn btn-success" value="Commit changes" disabled="true"/>
|
||||||
<input type="hidden" id="charset" name="charset" value="@content.charset"/>
|
<input type="hidden" id="charset" name="charset" value="@content.charset"/>
|
||||||
|
<input type="hidden" id="lineSeparator" name="lineSeparator" value="@content.lineSeparator"/>
|
||||||
<input type="hidden" id="content" name="content" value=""/>
|
<input type="hidden" id="content" name="content" value=""/>
|
||||||
<input type="hidden" id="initial" value="@content.content"/>
|
<input type="hidden" id="initial" value="@content.content"/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user