diff options
Diffstat (limited to 'routers/repo/branch.go')
-rw-r--r-- | routers/repo/branch.go | 49 |
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) +} |