This commit is contained in:
Naoki Takezoe
2015-10-14 02:24:43 +09:00
5 changed files with 30 additions and 7 deletions

View File

@@ -293,8 +293,12 @@ trait RepositoryViewerControllerBase extends ControllerBase {
getPathObjectId(git, path, revCommit).map { objectId => getPathObjectId(git, path, revCommit).map { objectId =>
if(raw){ if(raw){
// Download // Download
JGitUtil.getContentFromId(git, objectId, true).map { bytes => JGitUtil.getObjectLoaderFromId(git, objectId){ loader =>
RawData("application/octet-stream", bytes) //RawData("application/octet-stream", bytes)
contentType = "application/octet-stream"
response.setContentLength(loader.getSize.toInt)
loader.copyTo(response.getOutputStream)
()
} getOrElse NotFound } getOrElse NotFound
} else { } else {
html.blob(id, repository, path.split("/").toList, html.blob(id, repository, path.split("/").toList,

View File

@@ -14,7 +14,7 @@ object SshServer {
private def configure(port: Int, baseUrl: String) = { private def configure(port: Int, baseUrl: String) = {
server.setPort(port) server.setPort(port)
server.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(s"${Directory.GitBucketHome}/gitbucket.ser")) server.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(s"${Directory.GitBucketHome}/gitbucket.ser", "RSA"))
server.setPublickeyAuthenticator(new PublicKeyAuthenticator) server.setPublickeyAuthenticator(new PublicKeyAuthenticator)
server.setCommandFactory(new GitCommandFactory(baseUrl)) server.setCommandFactory(new GitCommandFactory(baseUrl))
server.setShellFactory(new NoShell) server.setShellFactory(new NoShell)

View File

@@ -779,7 +779,7 @@ object JGitUtil {
def getContentFromId(git: Git, id: ObjectId, fetchLargeFile: Boolean): Option[Array[Byte]] = try { def getContentFromId(git: Git, id: ObjectId, fetchLargeFile: Boolean): Option[Array[Byte]] = try {
using(git.getRepository.getObjectDatabase){ db => using(git.getRepository.getObjectDatabase){ db =>
val loader = db.open(id) val loader = db.open(id)
if(fetchLargeFile == false && FileUtil.isLarge(loader.getSize)){ if(loader.isLarge || (fetchLargeFile == false && FileUtil.isLarge(loader.getSize))){
None None
} else { } else {
Some(loader.getBytes) Some(loader.getBytes)
@@ -789,6 +789,22 @@ object JGitUtil {
case e: MissingObjectException => None case e: MissingObjectException => None
} }
/**
* Get objectLoader of the given object id from the Git repository.
*
* @param git the Git object
* @param id the object id
* @param f the function process ObjectLoader
* @return None if object does not exist
*/
def getObjectLoaderFromId[A](git: Git, id: ObjectId)(f: ObjectLoader => A):Option[A] = try {
using(git.getRepository.getObjectDatabase){ db =>
Some(f(db.open(id)))
}
} catch {
case e: MissingObjectException => None
}
/** /**
* Returns all commit id in the specified repository. * Returns all commit id in the specified repository.
*/ */

View File

@@ -8,6 +8,7 @@
styleClass: String = "", styleClass: String = "",
placeholder: String = "Leave a comment", placeholder: String = "Leave a comment",
elastic: Boolean = false, elastic: Boolean = false,
tabIndex: Int = -2,
uid: Long = new java.util.Date().getTime())(implicit context: gitbucket.core.controller.Context) uid: Long = new java.util.Date().getTime())(implicit context: gitbucket.core.controller.Context)
@import context._ @import context._
@import gitbucket.core._ @import gitbucket.core._
@@ -22,6 +23,7 @@
<span id="error-content" class="error"></span> <span id="error-content" class="error"></span>
@textarea = { @textarea = {
<textarea id="content@uid" name="content" placeholder="@placeholder" <textarea id="content@uid" name="content" placeholder="@placeholder"
@if(tabIndex > -2){ tabindex="@tabIndex"}
@if(style.nonEmpty){ style="@style"} @if(style.nonEmpty){ style="@style"}
@if(styleClass.nonEmpty){ class="@styleClass" }>@content</textarea> @if(styleClass.nonEmpty){ class="@styleClass" }>@content</textarea>
} }

View File

@@ -18,14 +18,15 @@
enableTaskList = true, enableTaskList = true,
hasWritePermission = hasWritePermission, hasWritePermission = hasWritePermission,
style = "", style = "",
elastic = true elastic = true,
tabIndex = 1
) )
<div style="text-align: right;"> <div style="text-align: right;">
<input type="hidden" name="issueId" value="@issue.issueId"/> <input type="hidden" name="issueId" value="@issue.issueId"/>
<input type="submit" class="btn btn-success" formaction="@url(repository)/issue_comments/new" value="Comment"/>
@if((reopenable || !issue.closed) && (hasWritePermission || issue.openedUserName == loginAccount.get.userName)){ @if((reopenable || !issue.closed) && (hasWritePermission || issue.openedUserName == loginAccount.get.userName)){
<input type="submit" class="btn" formaction="@url(repository)/issue_comments/state" value="@{if(issue.closed) "Reopen" else "Close"}" id="action"/> <input type="submit" class="btn" tabindex="3" formaction="@url(repository)/issue_comments/state" value="@{if(issue.closed) "Reopen" else "Close"}" id="action"/>
} }
<input type="submit" class="btn btn-success" tabindex="2" formaction="@url(repository)/issue_comments/new" value="Comment"/>
</div> </div>
</div> </div>
</div> </div>