mirror of
https://github.com/gitbucket/gitbucket.git
synced 2026-07-04 16:09:23 +02:00
Delete asset entry and files.
This commit is contained in:
@@ -1,13 +1,16 @@
|
||||
package gitbucket.core.controller
|
||||
|
||||
import gitbucket.core.service.{RepositoryService, AccountService, ReleaseService, ActivityService}
|
||||
import gitbucket.core.util.{ReferrerAuthenticator, ReadableUsersAuthenticator, WritableUsersAuthenticator, FileUtil, Notifier}
|
||||
import java.io.File
|
||||
|
||||
import gitbucket.core.service.{AccountService, ActivityService, ReleaseService, RepositoryService}
|
||||
import gitbucket.core.util.{FileUtil, Notifier, ReadableUsersAuthenticator, ReferrerAuthenticator, WritableUsersAuthenticator}
|
||||
import gitbucket.core.util.Directory._
|
||||
import gitbucket.core.util.Implicits._
|
||||
import gitbucket.core.util.SyntaxSugars._
|
||||
import gitbucket.core.view.Markdown
|
||||
import io.github.gitbucket.scalatra.forms._
|
||||
import gitbucket.core.releases.html
|
||||
import org.apache.commons.io.FileUtils
|
||||
|
||||
class ReleaseController extends ReleaseControllerBase
|
||||
with RepositoryService
|
||||
@@ -68,11 +71,25 @@ trait ReleaseControllerBase extends ControllerBase {
|
||||
getRelease(repository.owner, repository.name, releaseId).flatMap{ release =>
|
||||
getReleaseAsset(repository.owner, repository.name, releaseId, fileId).flatMap{ asset =>
|
||||
response.setHeader("Content-Disposition", s"attachment; filename=${asset.label}")
|
||||
Some(RawData(FileUtil.getMimeType(asset.label), new java.io.File(getReleaseFilesDir(repository.owner, repository.name) + s"/${release.releaseId}", fileId)))
|
||||
Some(RawData(FileUtil.getMimeType(asset.label), new File(getReleaseFilesDir(repository.owner, repository.name) + s"/${release.releaseId}", fileId)))
|
||||
}
|
||||
}.getOrElse(NotFound())
|
||||
})
|
||||
|
||||
ajaxPost("/:owner/:repository/releases/:id/assets/delete/:fileId")(writableUsersOnly { repository =>
|
||||
val releaseId = params("id")
|
||||
val fileId = params("fileId")
|
||||
for(
|
||||
release <- getRelease(repository.owner, repository.name, releaseId.toInt);
|
||||
asset <- getReleaseAsset(repository.owner, repository.name, releaseId, fileId)
|
||||
){
|
||||
FileUtils.forceDelete(new File(getReleaseFilesDir(repository.owner, repository.name) + s"/${release.releaseId}", fileId))
|
||||
}
|
||||
deleteReleaseAsset(repository.owner, repository.name, params("id").toInt, params("fileId"))
|
||||
org.json4s.jackson.Serialization.write(Map("message" -> "ok"))
|
||||
})
|
||||
|
||||
|
||||
get("/:owner/:repository/releases/:tag/create")(writableUsersOnly {repository =>
|
||||
val tag = params("tag")
|
||||
defining(repository.owner, repository.name){ case (owner, name) =>
|
||||
@@ -89,6 +106,11 @@ trait ReleaseControllerBase extends ControllerBase {
|
||||
})
|
||||
|
||||
ajaxPost("/:owner/:repository/releases/delete/:id")(writableUsersOnly { repository =>
|
||||
for(
|
||||
release <- getRelease(repository.owner, repository.name, params("id"))
|
||||
){
|
||||
FileUtils.deleteDirectory(new File(getReleaseFilesDir(repository.owner, repository.name) + s"/${release.releaseId}"))
|
||||
}
|
||||
deleteRelease(repository.owner, repository.name, params("id"))
|
||||
org.json4s.jackson.Serialization.write(Map("message" -> "ok"))
|
||||
})
|
||||
|
||||
@@ -49,10 +49,14 @@ trait ReleaseService {
|
||||
else None
|
||||
}
|
||||
|
||||
def deleteReleaseAssets(owner: String, repository: String, releaseId: Int)(implicit s: Session): Unit = {
|
||||
def deleteReleaseAssets(owner: String, repository: String, releaseId: Int)(implicit s:Session): Unit = {
|
||||
ReleaseAssets.filter(x => x.byRelease(owner, repository, releaseId)) delete
|
||||
}
|
||||
|
||||
def deleteReleaseAsset(owner: String, repository: String, releaseId: Int, fileId: String)(implicit s: Session): Unit = {
|
||||
ReleaseAssets.filter(x => x.byPrimaryKey(owner, repository, releaseId, fileId)) delete
|
||||
}
|
||||
|
||||
def createRelease(repository: RepositoryInfo, name: String, content:Option[String], tag: String,
|
||||
isDraft: Boolean, isPrerelease: Boolean, loginAccount: Account)(implicit context: Context, s: Session): Release = {
|
||||
Releases insert Release(
|
||||
|
||||
@@ -13,21 +13,21 @@ hasWritePermission: Boolean)(implicit context: gitbucket.core.controller.Context
|
||||
@repository.tags.reverse.map{ tag =>
|
||||
<tr>
|
||||
<td>
|
||||
@tagReleaseMap.get(tag.name).map{rel =>
|
||||
@tagReleaseMap.get(tag.name).map{release =>
|
||||
<div class="col-md-1"><a href="@helpers.url(repository)/tree/@tag.name"><i class="octicon octicon-tag"></i>@tag.name</a></div>
|
||||
<div class="col-md-11" style="border-left: 1px solid #eee">
|
||||
<h3><a href="@helpers.url(repository)/releases/@rel.releaseId">@rel.name</a></h3>
|
||||
<h3><a href="@helpers.url(repository)/releases/@release.releaseId">@release.name</a></h3>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<span class="muted">
|
||||
@helpers.avatar(rel.author, 20)
|
||||
@helpers.user(rel.author, styleClass="username strong")
|
||||
released this @gitbucket.core.helper.html.datetimeago(rel.registeredDate)
|
||||
@helpers.avatar(release.author, 20)
|
||||
@helpers.user(release.author, styleClass="username strong")
|
||||
released this @gitbucket.core.helper.html.datetimeago(release.registeredDate)
|
||||
</span>
|
||||
</div>
|
||||
<div class="panel-body release-note markdown-body">
|
||||
@helpers.markdown(
|
||||
markdown = rel.content getOrElse "No description provided.",
|
||||
markdown = release.content getOrElse "No description provided.",
|
||||
repository = repository,
|
||||
enableWikiLink = false,
|
||||
enableRefsLink = true,
|
||||
@@ -38,13 +38,17 @@ hasWritePermission: Boolean)(implicit context: gitbucket.core.controller.Context
|
||||
</div>
|
||||
<h2>Downloads</h2>
|
||||
<ul style="list-style: none">
|
||||
@releaseAssetsMap(rel).map{ asset =>
|
||||
<li><i class="octicon octicon-file"></i><a href="@helpers.url(repository)/releases/@rel.releaseId/assets/@asset.fileName">@asset.label</a></li>
|
||||
@releaseAssetsMap(release).map{ asset =>
|
||||
<li>
|
||||
<i class="octicon octicon-file"></i>
|
||||
<a href="@helpers.url(repository)/releases/@release.releaseId/assets/@asset.fileName">@asset.label</a>
|
||||
<span class="label label-default">@helpers.readableSize(Some(asset.size))</span>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
<ul style="list-style: none;">
|
||||
<li><a href="@helpers.url(repository)/archive/@{helpers.encodeRefName(rel.tag)}.zip"><i class="octicon octicon-file-zip"></i>ZIP</a></li>
|
||||
<li><a href="@helpers.url(repository)/archive/@{helpers.encodeRefName(rel.tag)}.tar.gz"><i class="octicon octicon-file-zip"></i>TAR.GZ</a></li>
|
||||
<li><a href="@helpers.url(repository)/archive/@{helpers.encodeRefName(release.tag)}.zip"><i class="octicon octicon-file-zip"></i>ZIP</a></li>
|
||||
<li><a href="@helpers.url(repository)/archive/@{helpers.encodeRefName(release.tag)}.tar.gz"><i class="octicon octicon-file-zip"></i>TAR.GZ</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -66,6 +66,9 @@ repository: gitbucket.core.service.RepositoryService.RepositoryInfo)(implicit co
|
||||
<i class="octicon octicon-file"></i>
|
||||
<a href="@helpers.url(repository)/releases/@release.releaseId/assets/@asset.fileName">@asset.label</a>
|
||||
<span class="label label-default">@helpers.readableSize(Some(asset.size))</span>
|
||||
@if(hasWritePermission){
|
||||
<a href="#" data-asset-file-name="@asset.fileName" class="label label-danger delete-asset">Delete</a>
|
||||
}
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
@@ -79,6 +82,16 @@ repository: gitbucket.core.service.RepositoryService.RepositoryInfo)(implicit co
|
||||
</div>
|
||||
<script>
|
||||
$(function(){
|
||||
$('.delete-asset').click(function(){
|
||||
var name = $(this).data('asset-file-name');
|
||||
var url = '@helpers.url(repository)/releases/@release.releaseId/assets/delete/' + name;
|
||||
var li = $(this).closest('li');
|
||||
$.post(url,
|
||||
function(data){
|
||||
li.remove();
|
||||
});
|
||||
return false;
|
||||
});
|
||||
$('#edit').click(function(){
|
||||
$('.edit-title').show();
|
||||
$('.show-title').hide();
|
||||
|
||||
Reference in New Issue
Block a user