diff options
Diffstat (limited to 'routers/repo/branch.go')
-rw-r--r-- | routers/repo/branch.go | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/routers/repo/branch.go b/routers/repo/branch.go index 00f30b0f13..453df3745e 100644 --- a/routers/repo/branch.go +++ b/routers/repo/branch.go @@ -5,8 +5,13 @@ package repo import ( + "github.com/gogits/gogs/models" + "github.com/gogits/gogs/modules/auth" "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/context" + "github.com/gogits/gogs/modules/log" + "net/url" + "strings" ) const ( @@ -29,3 +34,53 @@ func Branches(ctx *context.Context) { ctx.Data["Branches"] = brs ctx.HTML(200, BRANCH) } + +func NewBranchPost(ctx *context.Context, form auth.NewBranchForm) { + oldBranchName := form.OldBranchName + branchName := form.BranchName + + if ctx.HasError() || !ctx.Repo.IsWriter() || branchName == oldBranchName { + ctx.Redirect(EscapeUrl(ctx.Repo.RepoLink + "/src/" + oldBranchName)) + return + } + + branchName = url.QueryEscape(strings.Replace(strings.Trim(branchName, " "), " ", "-", -1)) + + if _, err := ctx.Repo.Repository.GetBranch(branchName); err == nil { + ctx.Redirect(EscapeUrl(ctx.Repo.RepoLink + "/src/" + branchName)) + return + } + + if err := ctx.Repo.Repository.CreateNewBranch(ctx.User, oldBranchName, branchName); err != nil { + ctx.Handle(404, "repo.Branches(CreateNewBranch)", err) + log.Error(4, "%s: %v", "EditFile", err) + return + } + + // Was successful, so now need to call models.CommitRepoAction() with the new commitID for webhooks and watchers + if branch, err := ctx.Repo.Repository.GetBranch(branchName); err != nil { + log.Error(4, "repo.Repository.GetBranch(%s): %v", branchName, err) + } else if commit, err := branch.GetCommit(); err != nil { + log.Error(4, "branch.GetCommit(): %v", err) + } else { + pc := &models.PushCommits{ + Len: 1, + Commits: []*models.PushCommit{&models.PushCommit{ + commit.ID.String(), + commit.Message(), + commit.Author.Email, + commit.Author.Name, + }}, + } + oldCommitID := "0000000000000000000000000000000000000000" // New Branch so we use all 0s + newCommitID := commit.ID.String() + if err := models.CommitRepoAction(ctx.User.ID, ctx.Repo.Owner.ID, ctx.User.LowerName, ctx.Repo.Owner.Email, + ctx.Repo.Repository.ID, ctx.Repo.Owner.LowerName, ctx.Repo.Repository.Name, "refs/heads/"+branchName, pc, + oldCommitID, newCommitID); err != nil { + log.Error(4, "models.CommitRepoAction(branch = %s): %v", branchName, err) + } + models.HookQueue.Add(ctx.Repo.Repository.ID) + } + + ctx.Redirect(EscapeUrl(ctx.Repo.RepoLink + "/src/" + branchName)) +} |