mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Tag list should include draft releases with existing tags (#21263)
Before, a tag for a draft release disappeared in the tag list, fix #21262. Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		@@ -200,6 +200,7 @@ type FindReleasesOptions struct {
 | 
				
			|||||||
	IsPreRelease  util.OptionalBool
 | 
						IsPreRelease  util.OptionalBool
 | 
				
			||||||
	IsDraft       util.OptionalBool
 | 
						IsDraft       util.OptionalBool
 | 
				
			||||||
	TagNames      []string
 | 
						TagNames      []string
 | 
				
			||||||
 | 
						HasSha1       util.OptionalBool // useful to find draft releases which are created with existing tags
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (opts *FindReleasesOptions) toConds(repoID int64) builder.Cond {
 | 
					func (opts *FindReleasesOptions) toConds(repoID int64) builder.Cond {
 | 
				
			||||||
@@ -221,6 +222,13 @@ func (opts *FindReleasesOptions) toConds(repoID int64) builder.Cond {
 | 
				
			|||||||
	if !opts.IsDraft.IsNone() {
 | 
						if !opts.IsDraft.IsNone() {
 | 
				
			||||||
		cond = cond.And(builder.Eq{"is_draft": opts.IsDraft.IsTrue()})
 | 
							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
 | 
						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{
 | 
						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 {
 | 
						if err != nil {
 | 
				
			||||||
		ctx.ServerError("GetReleaseCountByRepoID", err)
 | 
							ctx.ServerError("GetReleaseCountByRepoID", err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -117,9 +117,17 @@ func releasesOrTags(ctx *context.Context, isTagList bool) {
 | 
				
			|||||||
	ctx.Data["CanCreateRelease"] = writeAccess && !ctx.Repo.Repository.IsArchived
 | 
						ctx.Data["CanCreateRelease"] = writeAccess && !ctx.Repo.Repository.IsArchived
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	opts := repo_model.FindReleasesOptions{
 | 
						opts := repo_model.FindReleasesOptions{
 | 
				
			||||||
		ListOptions:   listOptions,
 | 
							ListOptions: listOptions,
 | 
				
			||||||
		IncludeDrafts: writeAccess && !isTagList,
 | 
						}
 | 
				
			||||||
		IncludeTags:   isTagList,
 | 
						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)
 | 
						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>
 | 
													<span class="ui green label">{{$.locale.Tr "repo.release.stable"}}</span>
 | 
				
			||||||
							{{end}}
 | 
												{{end}}
 | 
				
			||||||
							<span class="tag text blue">
 | 
												<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>
 | 
												</span>
 | 
				
			||||||
							{{if not .IsDraft}}
 | 
												{{if .Sha1}}
 | 
				
			||||||
								<span class="commit">
 | 
													<span class="commit">
 | 
				
			||||||
									<a class="mono" href="{{$.RepoLink}}/src/commit/{{.Sha1}}" rel="nofollow">{{svg "octicon-git-commit" 16 "mr-2"}}{{ShortSha .Sha1}}</a>
 | 
														<a class="mono" href="{{$.RepoLink}}/src/commit/{{.Sha1}}" rel="nofollow">{{svg "octicon-git-commit" 16 "mr-2"}}{{ShortSha .Sha1}}</a>
 | 
				
			||||||
								</span>
 | 
													</span>
 | 
				
			||||||
							{{end}}
 | 
					 | 
				
			||||||
							{{if .Sha1}}
 | 
					 | 
				
			||||||
								{{template "repo/branch_dropdown" dict "root" $ "release" .}}
 | 
													{{template "repo/branch_dropdown" dict "root" $ "release" .}}
 | 
				
			||||||
							{{end}}
 | 
												{{end}}
 | 
				
			||||||
						{{end}}
 | 
											{{end}}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user