2014-03-24 14:25:15 +04:00
// Copyright 2014 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package repo
import (
2016-12-25 18:27:25 +03:00
"code.gitea.io/git"
2017-02-11 07:00:29 +03:00
"code.gitea.io/gitea/models"
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
2016-12-25 19:19:25 +03:00
"code.gitea.io/gitea/modules/log"
2014-03-24 14:25:15 +04:00
)
2014-06-23 07:11:12 +04:00
const (
2016-11-22 11:32:00 +03:00
tplBranch base . TplName = "repo/branch"
2014-06-23 07:11:12 +04:00
)
2016-11-22 11:32:00 +03:00
// Branches render repository branch page
2016-03-11 19:56:52 +03:00
func Branches ( ctx * context . Context ) {
2014-05-26 04:11:25 +04:00
ctx . Data [ "Title" ] = "Branches"
ctx . Data [ "IsRepoToolbarBranches" ] = true
2014-04-13 05:35:36 +04:00
brs , err := ctx . Repo . GitRepo . GetBranches ( )
2014-03-24 14:25:15 +04:00
if err != nil {
2014-06-23 07:11:12 +04:00
ctx . Handle ( 500 , "repo.Branches(GetBranches)" , err )
2014-03-24 14:25:15 +04:00
return
} else if len ( brs ) == 0 {
2014-06-23 07:11:12 +04:00
ctx . Handle ( 404 , "repo.Branches(GetBranches)" , nil )
2014-03-24 14:25:15 +04:00
return
}
ctx . Data [ "Branches" ] = brs
2016-11-22 11:32:00 +03:00
ctx . HTML ( 200 , tplBranch )
2014-03-24 14:25:15 +04:00
}
2016-12-25 18:27:25 +03:00
// DeleteBranchPost responses for delete merged branch
func DeleteBranchPost ( ctx * context . Context ) {
branchName := ctx . Params ( ":name" )
2016-12-25 19:19:25 +03:00
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
}
}
2016-12-25 18:27:25 +03:00
if err := ctx . Repo . GitRepo . DeleteBranch ( branchName , git . DeleteBranchOptions {
2017-02-11 07:00:29 +03:00
Force : true ,
2016-12-25 18:27:25 +03:00
} ) ; err != nil {
2016-12-25 19:19:25 +03:00
log . Error ( 4 , "DeleteBranch: %v" , err )
ctx . Flash . Error ( ctx . Tr ( "repo.branch.deletion_failed" , fullBranchName ) )
2016-12-25 18:27:25 +03:00
return
}
2017-02-11 07:00:29 +03:00
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
}
}
2016-12-25 19:19:25 +03:00
ctx . Flash . Success ( ctx . Tr ( "repo.branch.deletion_success" , fullBranchName ) )
2016-12-25 18:27:25 +03:00
}