|
|
@ -5,6 +5,8 @@ |
|
|
|
package repo |
|
|
|
package repo |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
import ( |
|
|
|
|
|
|
|
"fmt" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/gogits/gogs/models" |
|
|
|
"github.com/gogits/gogs/models" |
|
|
|
"github.com/gogits/gogs/modules/auth" |
|
|
|
"github.com/gogits/gogs/modules/auth" |
|
|
|
"github.com/gogits/gogs/modules/base" |
|
|
|
"github.com/gogits/gogs/modules/base" |
|
|
@ -18,6 +20,29 @@ const ( |
|
|
|
RELEASE_NEW base.TplName = "repo/release/new" |
|
|
|
RELEASE_NEW base.TplName = "repo/release/new" |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// calReleaseNumCommitsBehind calculates given release has how many commits behind default branch.
|
|
|
|
|
|
|
|
func calReleaseNumCommitsBehind(repoCtx *middleware.RepoContext, release *models.Release, countCache map[string]int64) error { |
|
|
|
|
|
|
|
// Fast return if release target is same as default branch.
|
|
|
|
|
|
|
|
if repoCtx.BranchName == release.Target { |
|
|
|
|
|
|
|
release.NumCommitsBehind = repoCtx.CommitsCount - release.NumCommits |
|
|
|
|
|
|
|
return nil |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Get count if not exists
|
|
|
|
|
|
|
|
if _, ok := countCache[release.Target]; !ok { |
|
|
|
|
|
|
|
commit, err := repoCtx.GitRepo.GetBranchCommit(repoCtx.BranchName) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
return fmt.Errorf("GetBranchCommit: %v", err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
countCache[repoCtx.BranchName], err = commit.CommitsCount() |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
return fmt.Errorf("CommitsCount: %v", err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
release.NumCommitsBehind = countCache[repoCtx.BranchName] - release.NumCommits |
|
|
|
|
|
|
|
return nil |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func Releases(ctx *middleware.Context) { |
|
|
|
func Releases(ctx *middleware.Context) { |
|
|
|
ctx.Data["Title"] = ctx.Tr("repo.release.releases") |
|
|
|
ctx.Data["Title"] = ctx.Tr("repo.release.releases") |
|
|
|
ctx.Data["PageIsReleaseList"] = true |
|
|
|
ctx.Data["PageIsReleaseList"] = true |
|
|
@ -28,7 +53,7 @@ func Releases(ctx *middleware.Context) { |
|
|
|
return |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
rels, err := models.GetReleasesByRepoID(ctx.Repo.Repository.ID) |
|
|
|
releases, err := models.GetReleasesByRepoID(ctx.Repo.Repository.ID) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
ctx.Handle(500, "GetReleasesByRepoID", err) |
|
|
|
ctx.Handle(500, "GetReleasesByRepoID", err) |
|
|
|
return |
|
|
|
return |
|
|
@ -39,44 +64,29 @@ func Releases(ctx *middleware.Context) { |
|
|
|
|
|
|
|
|
|
|
|
tags := make([]*models.Release, len(rawTags)) |
|
|
|
tags := make([]*models.Release, len(rawTags)) |
|
|
|
for i, rawTag := range rawTags { |
|
|
|
for i, rawTag := range rawTags { |
|
|
|
for j, rel := range rels { |
|
|
|
for j, r := range releases { |
|
|
|
if rel == nil || (rel.IsDraft && !ctx.Repo.IsOwner()) { |
|
|
|
if r == nil || (r.IsDraft && !ctx.Repo.IsOwner()) { |
|
|
|
continue |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
if rel.TagName == rawTag { |
|
|
|
if r.TagName == rawTag { |
|
|
|
rel.Publisher, err = models.GetUserByID(rel.PublisherID) |
|
|
|
r.Publisher, err = models.GetUserByID(r.PublisherID) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
if models.IsErrUserNotExist(err) { |
|
|
|
if models.IsErrUserNotExist(err) { |
|
|
|
rel.Publisher = models.NewFakeUser() |
|
|
|
r.Publisher = models.NewFakeUser() |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
ctx.Handle(500, "GetUserByID", err) |
|
|
|
ctx.Handle(500, "GetUserByID", err) |
|
|
|
return |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// FIXME: duplicated code.
|
|
|
|
|
|
|
|
// Get corresponding target if it's not the current branch.
|
|
|
|
if err := calReleaseNumCommitsBehind(ctx.Repo, r, countCache); err != nil { |
|
|
|
if ctx.Repo.BranchName != rel.Target { |
|
|
|
ctx.Handle(500, "calReleaseNumCommitsBehind", err) |
|
|
|
// Get count if not exists.
|
|
|
|
return |
|
|
|
if _, ok := countCache[rel.Target]; !ok { |
|
|
|
|
|
|
|
commit, err := ctx.Repo.GitRepo.GetBranchCommit(ctx.Repo.BranchName) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
ctx.Handle(500, "GetBranchCommit", err) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
countCache[ctx.Repo.BranchName], err = commit.CommitsCount() |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
ctx.Handle(500, "CommitsCount", err) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
rel.NumCommitsBehind = countCache[ctx.Repo.BranchName] - rel.NumCommits |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
rel.NumCommitsBehind = ctx.Repo.CommitsCount - rel.NumCommits |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
rel.Note = markdown.RenderString(rel.Note, ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas()) |
|
|
|
r.Note = markdown.RenderString(r.Note, ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas()) |
|
|
|
tags[i] = rel |
|
|
|
tags[i] = r |
|
|
|
rels[j] = nil // Mark as used.
|
|
|
|
releases[j] = nil // Mark as used.
|
|
|
|
break |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -103,43 +113,28 @@ func Releases(ctx *middleware.Context) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for _, rel := range rels { |
|
|
|
for _, r := range releases { |
|
|
|
if rel == nil { |
|
|
|
if r == nil { |
|
|
|
continue |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
rel.Publisher, err = models.GetUserByID(rel.PublisherID) |
|
|
|
r.Publisher, err = models.GetUserByID(r.PublisherID) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
if models.IsErrUserNotExist(err) { |
|
|
|
if models.IsErrUserNotExist(err) { |
|
|
|
rel.Publisher = models.NewFakeUser() |
|
|
|
r.Publisher = models.NewFakeUser() |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
ctx.Handle(500, "GetUserByID", err) |
|
|
|
ctx.Handle(500, "GetUserByID", err) |
|
|
|
return |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// FIXME: duplicated code.
|
|
|
|
|
|
|
|
// Get corresponding target if it's not the current branch.
|
|
|
|
if err := calReleaseNumCommitsBehind(ctx.Repo, r, countCache); err != nil { |
|
|
|
if ctx.Repo.BranchName != rel.Target { |
|
|
|
ctx.Handle(500, "calReleaseNumCommitsBehind", err) |
|
|
|
// Get count if not exists.
|
|
|
|
return |
|
|
|
if _, ok := countCache[rel.Target]; !ok { |
|
|
|
|
|
|
|
commit, err := ctx.Repo.GitRepo.GetBranchCommit(ctx.Repo.BranchName) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
ctx.Handle(500, "GetBranchCommit", err) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
countCache[ctx.Repo.BranchName], err = commit.CommitsCount() |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
ctx.Handle(500, "CommitsCount", err) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
rel.NumCommitsBehind = countCache[ctx.Repo.BranchName] - rel.NumCommits |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
rel.NumCommitsBehind = ctx.Repo.CommitsCount - rel.NumCommits |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
rel.Note = markdown.RenderString(rel.Note, ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas()) |
|
|
|
r.Note = markdown.RenderString(r.Note, ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas()) |
|
|
|
tags = append(tags, rel) |
|
|
|
tags = append(tags, r) |
|
|
|
} |
|
|
|
} |
|
|
|
models.SortReleases(tags) |
|
|
|
models.SortReleases(tags) |
|
|
|
ctx.Data["Releases"] = tags |
|
|
|
ctx.Data["Releases"] = tags |
|
|
|