diff --git a/models/repo/release.go b/models/repo/release.go index abf91bc4bb..f7b24044b9 100644 --- a/models/repo/release.go +++ b/models/repo/release.go @@ -253,6 +253,28 @@ func GetReleasesByRepoID(ctx context.Context, repoID int64, opts FindReleasesOpt return rels, sess.Find(&rels) } +// GetTagNamesByRepoID returns a list of release tag names of repository. +func GetTagNamesByRepoID(ctx context.Context, repoID int64) ([]string, error) { + listOptions := db.ListOptions{ + ListAll: true, + } + opts := FindReleasesOptions{ + ListOptions: listOptions, + IncludeDrafts: true, + IncludeTags: true, + HasSha1: util.OptionalBoolTrue, + } + + tags := make([]string, 0) + sess := db.GetEngine(ctx). + Table("release"). + Desc("created_unix", "id"). + Where(opts.toConds(repoID)). + Cols("tag_name") + + return tags, sess.Find(&tags) +} + // CountReleasesByRepoID returns a number of releases matching FindReleaseOptions and RepoID. func CountReleasesByRepoID(repoID int64, opts FindReleasesOptions) (int64, error) { return db.GetEngine(db.DefaultContext).Where(opts.toConds(repoID)).Count(new(Release)) diff --git a/modules/context/repo.go b/modules/context/repo.go index e4ac65e961..b83caf4e4b 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -660,20 +660,9 @@ func RepoAssignment(ctx *Context) (cancel context.CancelFunc) { return } - tags, err := ctx.Repo.GitRepo.GetTags(0, 0) + tags, err := repo_model.GetTagNamesByRepoID(ctx, ctx.Repo.Repository.ID) if err != nil { - if strings.Contains(err.Error(), "fatal: not a git repository ") { - log.Error("Repository %-v has a broken repository on the file system: %s Error: %v", ctx.Repo.Repository, ctx.Repo.Repository.RepoPath(), err) - ctx.Repo.Repository.Status = repo_model.RepositoryBroken - ctx.Repo.Repository.IsEmpty = true - ctx.Data["BranchName"] = ctx.Repo.Repository.DefaultBranch - // Only allow access to base of repo or settings - if !isHomeOrSettings { - ctx.Redirect(ctx.Repo.RepoLink) - } - return - } - ctx.ServerError("GetTags", err) + ctx.ServerError("GetTagNamesByRepoID", err) return } ctx.Data["Tags"] = tags diff --git a/routers/web/repo/compare.go b/routers/web/repo/compare.go index f21611c634..d7e7bac7b7 100644 --- a/routers/web/repo/compare.go +++ b/routers/web/repo/compare.go @@ -717,10 +717,9 @@ func CompareDiff(ctx *context.Context) { return } - baseGitRepo := ctx.Repo.GitRepo - baseTags, err := baseGitRepo.GetTags(0, 0) + baseTags, err := repo_model.GetTagNamesByRepoID(ctx, ctx.Repo.Repository.ID) if err != nil { - ctx.ServerError("GetTags", err) + ctx.ServerError("GetTagNamesByRepoID", err) return } ctx.Data["Tags"] = baseTags @@ -738,9 +737,9 @@ func CompareDiff(ctx *context.Context) { } ctx.Data["HeadBranches"] = headBranches - headTags, err := ci.HeadGitRepo.GetTags(0, 0) + headTags, err := repo_model.GetTagNamesByRepoID(ctx, ci.HeadRepo.ID) if err != nil { - ctx.ServerError("GetTags", err) + ctx.ServerError("GetTagNamesByRepoID", err) return } ctx.Data["HeadTags"] = headTags