Make branch deletion URL more like GitHub's, fixes #1397 (#1994)

* Make branch deletion URL more like GitHub's, fixes #1397

* Add PR branch deletion integration test

* Do not allow deleting protected branch

* Change http error code to 403 if user has no write rights to repository

* Add check to not panic if forked repository has alrady been deleted
This commit is contained in:
Lauris BH 2017-06-21 04:00:03 +03:00 committed by Lunny Xiao
parent 6db387a21e
commit 0a5dc640a1
7 changed files with 241 additions and 70 deletions

View file

@ -5,11 +5,8 @@
package repo
import (
"code.gitea.io/git"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
)
const (
@ -33,59 +30,3 @@ func Branches(ctx *context.Context) {
ctx.Data["Branches"] = brs
ctx.HTML(200, tplBranch)
}
// DeleteBranchPost responses for delete merged branch
func DeleteBranchPost(ctx *context.Context) {
branchName := ctx.Params(":name")
commitID := ctx.Query("commit")
defer func() {
redirectTo := ctx.Query("redirect_to")
if len(redirectTo) == 0 {
redirectTo = ctx.Repo.RepoLink
}
ctx.JSON(200, map[string]interface{}{
"redirect": redirectTo,
})
}()
fullBranchName := ctx.Repo.Owner.Name + "/" + branchName
if !ctx.Repo.GitRepo.IsBranchExist(branchName) || branchName == "master" {
ctx.Flash.Error(ctx.Tr("repo.branch.deletion_failed", fullBranchName))
return
}
if len(commitID) > 0 {
branchCommitID, err := ctx.Repo.GitRepo.GetBranchCommitID(branchName)
if err != nil {
log.Error(4, "GetBranchCommitID: %v", err)
return
}
if branchCommitID != commitID {
ctx.Flash.Error(ctx.Tr("repo.branch.delete_branch_has_new_commits", fullBranchName))
return
}
}
if err := ctx.Repo.GitRepo.DeleteBranch(branchName, git.DeleteBranchOptions{
Force: true,
}); err != nil {
log.Error(4, "DeleteBranch: %v", err)
ctx.Flash.Error(ctx.Tr("repo.branch.deletion_failed", fullBranchName))
return
}
issueID := ctx.QueryInt64("issue_id")
if issueID > 0 {
if err := models.AddDeletePRBranchComment(ctx.User, ctx.Repo.Repository, issueID, branchName); err != nil {
log.Error(4, "DeleteBranch: %v", err)
ctx.Flash.Error(ctx.Tr("repo.branch.deletion_failed", fullBranchName))
return
}
}
ctx.Flash.Success(ctx.Tr("repo.branch.deletion_success", fullBranchName))
}