diff --git a/src/main/scala/app/RepositoryViewerController.scala b/src/main/scala/app/RepositoryViewerController.scala index 71e39e7..b7cb490 100644 --- a/src/main/scala/app/RepositoryViewerController.scala +++ b/src/main/scala/app/RepositoryViewerController.scala @@ -3,7 +3,7 @@ import util.Directory._ import util.Implicits._ import util.ControlUtil._ -import _root_.util.{ReferrerAuthenticator, JGitUtil, FileUtil, StringUtil} +import _root_.util._ import service._ import org.scalatra._ import java.io.File @@ -12,15 +12,16 @@ import org.apache.commons.io.FileUtils import org.eclipse.jgit.treewalk._ import java.util.zip.{ZipEntry, ZipOutputStream} +import scala.Some class RepositoryViewerController extends RepositoryViewerControllerBase - with RepositoryService with AccountService with ReferrerAuthenticator + with RepositoryService with AccountService with ReferrerAuthenticator with CollaboratorsAuthenticator /** * The repository viewer. */ trait RepositoryViewerControllerBase extends ControllerBase { - self: RepositoryService with AccountService with ReferrerAuthenticator => + self: RepositoryService with AccountService with ReferrerAuthenticator with CollaboratorsAuthenticator => /** * Returns converted HTML from Markdown for preview. @@ -150,11 +151,24 @@ val revCommit = git.log.add(git.getRepository.resolve(branchName)).setMaxCount(1).call.iterator.next (branchName, revCommit.getCommitterIdent.getWhen) } - repo.html.branches(branchInfo, repository) + repo.html.branches(branchInfo, hasWritePermission(repository.owner, repository.name, context.loginAccount), repository) } }) /** + * Deletes branch. + */ + get("/:owner/:repository/delete/:branchName")(collaboratorsOnly { repository => + val branchName = params("branchName") + if(repository.repository.defaultBranch != branchName){ + using(Git.open(getRepositoryDir(repository.owner, repository.name))){ git => + git.branchDelete().setBranchNames(branchName).call() + } + } + redirect(s"/${repository.owner}/${repository.name}/branches") + }) + + /** * Displays tags. */ get("/:owner/:repository/tags")(referrersOnly { diff --git a/src/main/twirl/repo/branches.scala.html b/src/main/twirl/repo/branches.scala.html index 5a2cfb0..219c7c1 100644 --- a/src/main/twirl/repo/branches.scala.html +++ b/src/main/twirl/repo/branches.scala.html @@ -1,4 +1,5 @@ @(branchInfo: List[(String, java.util.Date)], + hasWritePermission: Boolean, repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context) @import context._ @import view.helpers._ @@ -17,9 +18,9 @@ @branchName - @* - Delete branch - *@ + @if(hasWritePermission && repository.repository.defaultBranch != branchName){ + Delete branch + } @datetime(latestUpdateDate) @@ -35,4 +36,12 @@ } -} \ No newline at end of file +} + \ No newline at end of file