diff options
author | Unknwon <u@gogs.io> | 2017-03-11 01:43:45 -0500 |
---|---|---|
committer | Unknwon <u@gogs.io> | 2017-03-11 01:43:45 -0500 |
commit | 5c7cb1594b6904657bc63c50abc8b72056a85e4b (patch) | |
tree | f97e06b947ec12d039cd6fa0e3966a029ca6d44a /routers/repo | |
parent | 3eb57370a658a648ba504776b962d1d23cc57693 (diff) |
repo/branches: overview and all (#2310)
Diffstat (limited to 'routers/repo')
-rw-r--r-- | routers/repo/branch.go | 91 |
1 files changed, 81 insertions, 10 deletions
diff --git a/routers/repo/branch.go b/routers/repo/branch.go index d25898bb..08b1b068 100644 --- a/routers/repo/branch.go +++ b/routers/repo/branch.go @@ -5,33 +5,104 @@ package repo import ( + "time" + log "gopkg.in/clog.v1" "github.com/gogits/git-module" + "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/context" ) const ( - BRANCH base.TplName = "repo/branch" + BRANCHES_OVERVIEW base.TplName = "repo/branches/overview" + BRANCHES_ALL base.TplName = "repo/branches/all" ) -func Branches(ctx *context.Context) { - ctx.Data["Title"] = "Branches" - ctx.Data["IsRepoToolbarBranches"] = true +type Branch struct { + Name string + Commit *git.Commit + IsProtected bool +} - brs, err := ctx.Repo.GitRepo.GetBranches() +func loadBranches(ctx *context.Context) []*Branch { + rawBranches, err := ctx.Repo.Repository.GetBranches() if err != nil { - ctx.Handle(500, "repo.Branches(GetBranches)", err) + ctx.Handle(500, "GetBranches", err) + return nil + } + + protectBranches, err := models.GetProtectBranchesByRepoID(ctx.Repo.Repository.ID) + if err != nil { + ctx.Handle(500, "GetProtectBranchesByRepoID", err) + return nil + } + + branches := make([]*Branch, len(rawBranches)) + for i := range rawBranches { + commit, err := rawBranches[i].GetCommit() + if err != nil { + ctx.Handle(500, "GetCommit", err) + return nil + } + + branches[i] = &Branch{ + Name: rawBranches[i].Name, + Commit: commit, + } + + for j := range protectBranches { + if branches[i].Name == protectBranches[j].Name { + branches[i].IsProtected = true + break + } + } + } + + return branches +} + +func Branches(ctx *context.Context) { + ctx.Data["Title"] = ctx.Tr("repo.git_branches") + ctx.Data["PageIsBranchesOverview"] = true + + branches := loadBranches(ctx) + if ctx.Written() { return - } else if len(brs) == 0 { - ctx.Handle(404, "repo.Branches(GetBranches)", nil) + } + + now := time.Now() + activeBranches := make([]*Branch, 0, 3) + staleBranches := make([]*Branch, 0, 3) + for i := range branches { + switch { + case branches[i].Name == ctx.Repo.BranchName: + ctx.Data["DefaultBranch"] = branches[i] + case branches[i].Commit.Committer.When.Add(30 * 24 * time.Hour).After(now): // 30 days + activeBranches = append(activeBranches, branches[i]) + case branches[i].Commit.Committer.When.Add(3 * 30 * 24 * time.Hour).Before(now): // 90 days + staleBranches = append(staleBranches, branches[i]) + } + } + + ctx.Data["ActiveBranches"] = activeBranches + ctx.Data["StaleBranches"] = staleBranches + ctx.HTML(200, BRANCHES_OVERVIEW) +} + +func AllBranches(ctx *context.Context) { + ctx.Data["Title"] = ctx.Tr("repo.git_branches") + ctx.Data["PageIsBranchesAll"] = true + + branches := loadBranches(ctx) + if ctx.Written() { return } + ctx.Data["Branches"] = branches - ctx.Data["Branches"] = brs - ctx.HTML(200, BRANCH) + ctx.HTML(200, BRANCHES_ALL) } func DeleteBranchPost(ctx *context.Context) { |