(refs #1898) Display commit message of tags in the release page

This commit is contained in:
Naoki Takezoe
2018-03-09 21:25:36 +09:00
parent 8a13721c90
commit ae26e8ec6a
4 changed files with 51 additions and 40 deletions

View File

@@ -52,79 +52,86 @@ trait ReleaseControllerBase extends ControllerBase {
})
get("/:owner/:repository/releases/:tag")(referrersOnly { repository =>
val tag = params("tag")
getRelease(repository.owner, repository.name, tag).map { release =>
html.release(release, getReleaseAssets(repository.owner, repository.name, tag), hasDeveloperRole(repository.owner, repository.name, context.loginAccount), repository)
val tagName = params("tag")
getRelease(repository.owner, repository.name, tagName).map { release =>
html.release(release, getReleaseAssets(repository.owner, repository.name, tagName),
hasDeveloperRole(repository.owner, repository.name, context.loginAccount), repository)
}.getOrElse(NotFound())
})
get("/:owner/:repository/releases/:tag/assets/:fileId")(referrersOnly {repository =>
val tag = params("tag")
val tagName = params("tag")
val fileId = params("fileId")
(for {
_ <- repository.tags.find(_.name == tag)
_ <- getRelease(repository.owner, repository.name, tag)
asset <- getReleaseAsset(repository.owner, repository.name, tag, fileId)
_ <- repository.tags.find(_.name == tagName)
_ <- getRelease(repository.owner, repository.name, tagName)
asset <- getReleaseAsset(repository.owner, repository.name, tagName, fileId)
} yield {
response.setHeader("Content-Disposition", s"attachment; filename=${asset.label}")
RawData(
FileUtil.getMimeType(asset.label),
new File(getReleaseFilesDir(repository.owner, repository.name), tag + "/" + fileId)
new File(getReleaseFilesDir(repository.owner, repository.name), tagName + "/" + fileId)
)
}).getOrElse(NotFound())
})
get("/:owner/:repository/releases/:tag/create")(writableUsersOnly {repository =>
html.form(repository, params("tag"), None)
val tagName = params("tag")
repository.tags.find(_.name == tagName).map { tag =>
html.form(repository, tag, None)
}.getOrElse(NotFound())
})
post("/:owner/:repository/releases/:tag/create", releaseForm)(writableUsersOnly { (form, repository) =>
val tag = params("tag")
val tagName = params("tag")
val loginAccount = context.loginAccount.get
// Insert into RELEASE
createRelease(repository.owner, repository.name, form.name, form.content, tag, loginAccount)
createRelease(repository.owner, repository.name, form.name, form.content, tagName, loginAccount)
// Insert into RELEASE_ASSET
request.getParameterNames.asScala.filter(_.startsWith("file:")).foreach { paramName =>
val Array(_, fileId) = paramName.split(":")
val fileName = params(paramName)
val size = new java.io.File(getReleaseFilesDir(repository.owner, repository.name), tag + "/" + fileId).length
val size = new java.io.File(getReleaseFilesDir(repository.owner, repository.name), tagName + "/" + fileId).length
createReleaseAsset(repository.owner, repository.name, tag, fileId, fileName, size, loginAccount)
createReleaseAsset(repository.owner, repository.name, tagName, fileId, fileName, size, loginAccount)
}
recordReleaseActivity(repository.owner, repository.name, loginAccount.userName, form.name)
redirect(s"/${repository.owner}/${repository.name}/releases/${tag}")
redirect(s"/${repository.owner}/${repository.name}/releases/${tagName}")
})
get("/:owner/:repository/releases/:tag/edit")(writableUsersOnly {repository =>
val tag = params("tag")
val tagName = params("tag")
getRelease(repository.owner, repository.name, tag).map { release =>
html.form(repository, release.tag, Some(release, getReleaseAssets(repository.owner, repository.name, tag)))
}.getOrElse(NotFound())
(for {
release <- getRelease(repository.owner, repository.name, tagName)
tag <- repository.tags.find(_.name == tagName)
} yield {
html.form(repository, tag, Some(release, getReleaseAssets(repository.owner, repository.name, tagName)))
}).getOrElse(NotFound())
})
post("/:owner/:repository/releases/:tag/edit", releaseForm)(writableUsersOnly { (form, repository) =>
val tag = params("tag")
val tagName = params("tag")
val loginAccount = context.loginAccount.get
getRelease(repository.owner, repository.name, tag).map { release =>
getRelease(repository.owner, repository.name, tagName).map { release =>
// Update RELEASE
updateRelease(repository.owner, repository.name, tag, form.name, form.content)
updateRelease(repository.owner, repository.name, tagName, form.name, form.content)
// Delete and Insert RELEASE_ASSET
val assets = getReleaseAssets(repository.owner, repository.name, tag)
deleteReleaseAssets(repository.owner, repository.name, tag)
val assets = getReleaseAssets(repository.owner, repository.name, tagName)
deleteReleaseAssets(repository.owner, repository.name, tagName)
val fileIds = request.getParameterNames.asScala.filter(_.startsWith("file:")).map { paramName =>
val Array(_, fileId) = paramName.split(":")
val fileName = params(paramName)
val size = new java.io.File(getReleaseFilesDir(repository.owner, repository.name), release.tag + "/" + fileId).length
createReleaseAsset(repository.owner, repository.name, tag, fileId, fileName, size, loginAccount)
createReleaseAsset(repository.owner, repository.name, tagName, fileId, fileName, size, loginAccount)
fileId
}
@@ -135,16 +142,16 @@ trait ReleaseControllerBase extends ControllerBase {
}
}
redirect(s"/${release.userName}/${release.repositoryName}/releases/${tag}")
redirect(s"/${release.userName}/${release.repositoryName}/releases/${tagName}")
}.getOrElse(NotFound())
})
post("/:owner/:repository/releases/:tag/delete")(writableUsersOnly { repository =>
val tag = params("tag")
getRelease(repository.owner, repository.name, tag).foreach { release =>
val tagName = params("tag")
getRelease(repository.owner, repository.name, tagName).foreach { release =>
FileUtils.deleteDirectory(new File(getReleaseFilesDir(repository.owner, repository.name), release.tag))
}
deleteRelease(repository.owner, repository.name, tag)
deleteRelease(repository.owner, repository.name, tagName)
redirect(s"/${repository.owner}/${repository.name}/releases")
})

View File

@@ -143,8 +143,9 @@ object JGitUtil {
* @param name the tag name
* @param time the tagged date
* @param id the commit id
* @param message the message of the tagged commit
*/
case class TagInfo(name: String, time: Date, id: String)
case class TagInfo(name: String, time: Date, id: String, message: String)
/**
* The submodule data
@@ -233,7 +234,7 @@ object JGitUtil {
git.tagList.call.asScala.flatMap { ref =>
try {
val revCommit = getRevCommitFromId(git, ref.getObjectId)
Some(TagInfo(ref.getName.stripPrefix("refs/tags/"), revCommit.getCommitterIdent.getWhen, revCommit.getName))
Some(TagInfo(ref.getName.stripPrefix("refs/tags/"), revCommit.getCommitterIdent.getWhen, revCommit.getName, revCommit.getShortMessage))
} catch {
case _: IncorrectObjectTypeException =>
None

View File

@@ -1,5 +1,5 @@
@(repository: gitbucket.core.service.RepositoryService.RepositoryInfo,
tag: String,
tag: gitbucket.core.util.JGitUtil.TagInfo,
release: Option[(gitbucket.core.model.Release, Seq[gitbucket.core.model.ReleaseAsset])])(implicit context: gitbucket.core.controller.Context)
@import gitbucket.core.view.helpers
@gitbucket.core.html.main(s"New Release - ${repository.owner}/${repository.name}", Some(repository)){
@@ -8,15 +8,15 @@
<div class="row-fluid">
<div class="co`l-md-12">
@if(release.isEmpty){
<h3>New release for @tag</h3>
<h3>New release for @tag.name</h3>
} else {
<h3>Update release for @tag</h3>
<h3>Update release for @tag.name</h3>
}
<span id="error-name" class="error"></span>
<input type="text" id="release-name" name="name" class="form-control" value="@release.map { case (release, _) => @release.name }.getOrElse(tag)" placeholder="Title" style="margin-bottom: 6px;" autofocus/>
<input type="text" id="release-name" name="name" class="form-control" value="@release.map { case (release, _) => @release.name }.getOrElse(tag.name)" placeholder="Title" style="margin-bottom: 6px;" autofocus/>
@gitbucket.core.helper.html.preview(
repository = repository,
content = release.flatMap { case (release, _) => release.content }.getOrElse(""),
content = release.flatMap { case (release, _) => release.content }.getOrElse(tag.message),
enableWikiLink = false,
enableRefsLink = true,
enableLineBreaks = true,
@@ -31,7 +31,7 @@
@release.map { case (release, assets) =>
@assets.map { asset =>
<li>
<a href="@context.baseUrl/@repository.owner/@repository.name/_release/@helpers.encodeRefName(tag)/@asset.fileName"><i class="octicon octicon-file"></i>@asset.label</a>
<a href="@context.baseUrl/@repository.owner/@repository.name/_release/@helpers.encodeRefName(tag.name)/@asset.fileName"><i class="octicon octicon-file"></i>@asset.label</a>
<a href="#" class="remove pull-right" style="padding-top: 0px;">(remove)</a>
<input type="hidden" name="file:@asset.fileName" value="@asset.label"/>
</li>
@@ -43,9 +43,9 @@
</div>
<div class="align-right" style="margin-top: 12px;">
@if(release.isEmpty){
<input type="submit" class="btn btn-success" value="Submit new release" formaction="@helpers.url(repository)/releases/@helpers.encodeRefName(tag)/create"/>
<input type="submit" class="btn btn-success" value="Submit new release" formaction="@helpers.url(repository)/releases/@helpers.encodeRefName(tag.name)/create"/>
} else {
<input type="submit" class="btn btn-success" value="Update release" formaction="@helpers.url(repository)/releases/@helpers.encodeRefName(tag)/edit"/>
<input type="submit" class="btn btn-success" value="Update release" formaction="@helpers.url(repository)/releases/@helpers.encodeRefName(tag.name)/edit"/>
}
</div>
</div>
@@ -61,11 +61,11 @@ $(function(){
$("#drop").dropzone({
maxFilesize: @{gitbucket.core.util.FileUtil.MaxFileSize / 1024 / 1024},
url: '@context.path/upload/release/@repository.owner/@repository.name/@helpers.encodeRefName(tag)',
url: '@context.path/upload/release/@repository.owner/@repository.name/@helpers.encodeRefName(tag.name)',
previewTemplate: "<div class=\"dz-preview\">\n <div class=\"dz-progress\"><span class=\"dz-upload\" data-dz-uploadprogress>Uploading your files...</span></div>\n <div class=\"dz-error-message\"><span data-dz-errormessage></span></div>\n</div>",
success: function(file, id) {
var attach =
'<li><a href="@context.baseUrl/@repository.owner/@repository.name/_release/@helpers.encodeRefName(tag)/' + id + '">' +
'<li><a href="@context.baseUrl/@repository.owner/@repository.name/_release/@helpers.encodeRefName(tag.name)/' + id + '">' +
'<i class="octicon octicon-file"></i>' + escapeHtml(file.name) + '</a>' +
'<a href="#" class="remove pull-right" style="padding-top: 0px;">(remove)</a>' +
'<input type="hidden" name="file:' + id + '" value="' + escapeHtml(file.name) + '"/>'

View File

@@ -39,8 +39,11 @@
<a class="btn btn-success" href="@helpers.url(repository)/releases/@{helpers.encodeRefName(tag.name)}/create" id="edit">Create release</a>
</div>
}
<div>@tag.message<br><br></div>
}
@*
<h4>Downloads</h4>
*@
<ul style="list-style: none; padding-left: 8px;">
@release.map { case (release, assets) =>
@assets.map { asset =>