aboutsummaryrefslogtreecommitdiffstats
path: root/routers/repo
diff options
context:
space:
mode:
authorLauris BH <lauris@nix.lv>2017-10-15 22:59:24 +0300
committerGitHub <noreply@github.com>2017-10-15 22:59:24 +0300
commitf3833b7ce4dc78095194808c6e07d8ae133e7ab5 (patch)
treecdcb53731d4523f068a6e532bf5da9e2759f8cb2 /routers/repo
parentc25303b11c323045718a5af373c11f5807f77fb7 (diff)
downloadgitea-f3833b7ce4dc78095194808c6e07d8ae133e7ab5.tar.gz
gitea-f3833b7ce4dc78095194808c6e07d8ae133e7ab5.zip
Create new branch from branch selection dropdown (#2130)
* Create new branch from branch selection dropdown and rewrite it to VueJS * Make updateLocalCopyToCommit as not exported * Move branch name validation to model * Fix possible race condition
Diffstat (limited to 'routers/repo')
-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)
+}