Before, a tag for a draft release disappeared in the tag list, fix #21262. Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>tags/v1.18.0-rc0
@@ -200,6 +200,7 @@ type FindReleasesOptions struct { | |||
IsPreRelease util.OptionalBool | |||
IsDraft util.OptionalBool | |||
TagNames []string | |||
HasSha1 util.OptionalBool // useful to find draft releases which are created with existing tags | |||
} | |||
func (opts *FindReleasesOptions) toConds(repoID int64) builder.Cond { | |||
@@ -221,6 +222,13 @@ func (opts *FindReleasesOptions) toConds(repoID int64) builder.Cond { | |||
if !opts.IsDraft.IsNone() { | |||
cond = cond.And(builder.Eq{"is_draft": opts.IsDraft.IsTrue()}) | |||
} | |||
if !opts.HasSha1.IsNone() { | |||
if opts.HasSha1.IsTrue() { | |||
cond = cond.And(builder.Neq{"sha1": ""}) | |||
} else { | |||
cond = cond.And(builder.Eq{"sha1": ""}) | |||
} | |||
} | |||
return cond | |||
} | |||
@@ -524,7 +524,9 @@ func RepoAssignment(ctx *Context) (cancel context.CancelFunc) { | |||
} | |||
ctx.Data["NumTags"], err = repo_model.GetReleaseCountByRepoID(ctx.Repo.Repository.ID, repo_model.FindReleasesOptions{ | |||
IncludeTags: true, | |||
IncludeDrafts: true, | |||
IncludeTags: true, | |||
HasSha1: util.OptionalBoolTrue, // only draft releases which are created with existing tags | |||
}) | |||
if err != nil { | |||
ctx.ServerError("GetReleaseCountByRepoID", err) |
@@ -117,9 +117,17 @@ func releasesOrTags(ctx *context.Context, isTagList bool) { | |||
ctx.Data["CanCreateRelease"] = writeAccess && !ctx.Repo.Repository.IsArchived | |||
opts := repo_model.FindReleasesOptions{ | |||
ListOptions: listOptions, | |||
IncludeDrafts: writeAccess && !isTagList, | |||
IncludeTags: isTagList, | |||
ListOptions: listOptions, | |||
} | |||
if isTagList { | |||
// for the tags list page, show all releases with real tags (having real commit-id), | |||
// the drafts should also be included because a real tag might be used as a draft. | |||
opts.IncludeDrafts = true | |||
opts.IncludeTags = true | |||
opts.HasSha1 = util.OptionalBoolTrue | |||
} else { | |||
// only show draft releases for users who can write, read-only users shouldn't see draft releases. | |||
opts.IncludeDrafts = writeAccess | |||
} | |||
releases, err := repo_model.GetReleasesByRepoID(ctx.Repo.Repository.ID, opts) |
@@ -77,14 +77,12 @@ | |||
<span class="ui green label">{{$.locale.Tr "repo.release.stable"}}</span> | |||
{{end}} | |||
<span class="tag text blue"> | |||
<a class="df ac je" href="{{if .IsDraft}}#{{else}}{{$.RepoLink}}/src/tag/{{.TagName | PathEscapeSegments}}{{end}}" rel="nofollow">{{svg "octicon-tag" 16 "mr-2"}}{{.TagName}}</a> | |||
<a class="df ac je" href="{{if not .Sha1}}#{{else}}{{$.RepoLink}}/src/tag/{{.TagName | PathEscapeSegments}}{{end}}" rel="nofollow">{{svg "octicon-tag" 16 "mr-2"}}{{.TagName}}</a> | |||
</span> | |||
{{if not .IsDraft}} | |||
{{if .Sha1}} | |||
<span class="commit"> | |||
<a class="mono" href="{{$.RepoLink}}/src/commit/{{.Sha1}}" rel="nofollow">{{svg "octicon-git-commit" 16 "mr-2"}}{{ShortSha .Sha1}}</a> | |||
</span> | |||
{{end}} | |||
{{if .Sha1}} | |||
{{template "repo/branch_dropdown" dict "root" $ "release" .}} | |||
{{end}} | |||
{{end}} |