aboutsummaryrefslogtreecommitdiffstats
path: root/routers/repo/branch.go
diff options
context:
space:
mode:
Diffstat (limited to 'routers/repo/branch.go')
-rw-r--r--routers/repo/branch.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/routers/repo/branch.go b/routers/repo/branch.go
index fcb6efd010..5d67f9eb03 100644
--- a/routers/repo/branch.go
+++ b/routers/repo/branch.go
@@ -5,6 +5,8 @@
package repo
import (
+ "code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/modules/auth"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
)
@@ -30,3 +32,50 @@ func Branches(ctx *context.Context) {
ctx.Data["Branches"] = brs
ctx.HTML(200, tplBranch)
}
+
+// CreateBranch creates new branch in repository
+func CreateBranch(ctx *context.Context, form auth.NewBranchForm) {
+ if !ctx.Repo.CanCreateBranch() {
+ ctx.Handle(404, "CreateBranch", nil)
+ return
+ }
+
+ if ctx.HasError() {
+ ctx.Flash.Error(ctx.GetErrMsg())
+ ctx.Redirect(ctx.Repo.RepoLink + "/src/" + ctx.Repo.BranchName)
+ return
+ }
+
+ var err error
+ if ctx.Repo.IsViewBranch {
+ err = ctx.Repo.Repository.CreateNewBranch(ctx.User, ctx.Repo.BranchName, form.NewBranchName)
+ } else {
+ err = ctx.Repo.Repository.CreateNewBranchFromCommit(ctx.User, ctx.Repo.BranchName, form.NewBranchName)
+ }
+ if err != nil {
+ if models.IsErrTagAlreadyExists(err) {
+ e := err.(models.ErrTagAlreadyExists)
+ ctx.Flash.Error(ctx.Tr("repo.branch.tag_collision", e.TagName))
+ ctx.Redirect(ctx.Repo.RepoLink + "/src/" + ctx.Repo.BranchName)
+ return
+ }
+ if models.IsErrBranchAlreadyExists(err) {
+ e := err.(models.ErrBranchAlreadyExists)
+ ctx.Flash.Error(ctx.Tr("repo.branch.branch_already_exists", e.BranchName))
+ ctx.Redirect(ctx.Repo.RepoLink + "/src/" + ctx.Repo.BranchName)
+ return
+ }
+ if models.IsErrBranchNameConflict(err) {
+ e := err.(models.ErrBranchNameConflict)
+ ctx.Flash.Error(ctx.Tr("repo.branch.branch_name_conflict", form.NewBranchName, e.BranchName))
+ ctx.Redirect(ctx.Repo.RepoLink + "/src/" + ctx.Repo.BranchName)
+ return
+ }
+
+ ctx.Handle(500, "CreateNewBranch", err)
+ return
+ }
+
+ ctx.Flash.Success(ctx.Tr("repo.branch.create_success", form.NewBranchName))
+ ctx.Redirect(ctx.Repo.RepoLink + "/src/" + form.NewBranchName)
+}