mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00:00 
			
		
		
		
	Included tag search capabilities (#32045)
Resolves #31998 The first screenshot shows the tag page without any filter being applied:  The second one, shows the page when the given filter returns no tag:  The last one shows a single tag being filtered:  Signed-off-by: Bruno Sofiato <bruno.sofiato@gmail.com>
This commit is contained in:
		@@ -234,6 +234,7 @@ type FindReleasesOptions struct {
 | 
				
			|||||||
	IsDraft       optional.Option[bool]
 | 
						IsDraft       optional.Option[bool]
 | 
				
			||||||
	TagNames      []string
 | 
						TagNames      []string
 | 
				
			||||||
	HasSha1       optional.Option[bool] // useful to find draft releases which are created with existing tags
 | 
						HasSha1       optional.Option[bool] // useful to find draft releases which are created with existing tags
 | 
				
			||||||
 | 
						NamePattern   optional.Option[string]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (opts FindReleasesOptions) ToConds() builder.Cond {
 | 
					func (opts FindReleasesOptions) ToConds() builder.Cond {
 | 
				
			||||||
@@ -261,6 +262,11 @@ func (opts FindReleasesOptions) ToConds() builder.Cond {
 | 
				
			|||||||
			cond = cond.And(builder.Eq{"sha1": ""})
 | 
								cond = cond.And(builder.Eq{"sha1": ""})
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if opts.NamePattern.Has() && opts.NamePattern.Value() != "" {
 | 
				
			||||||
 | 
							cond = cond.And(builder.Like{"lower_tag_name", strings.ToLower(opts.NamePattern.Value())})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return cond
 | 
						return cond
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -178,6 +178,8 @@ code_search_by_git_grep = Current code search results are provided by "git grep"
 | 
				
			|||||||
package_kind = Search packages...
 | 
					package_kind = Search packages...
 | 
				
			||||||
project_kind = Search projects...
 | 
					project_kind = Search projects...
 | 
				
			||||||
branch_kind = Search branches...
 | 
					branch_kind = Search branches...
 | 
				
			||||||
 | 
					tag_kind = Search tags...
 | 
				
			||||||
 | 
					tag_tooltip = Search for matching tags. Use '%' to match any sequence of numbers.
 | 
				
			||||||
commit_kind = Search commits...
 | 
					commit_kind = Search commits...
 | 
				
			||||||
runner_kind = Search runners...
 | 
					runner_kind = Search runners...
 | 
				
			||||||
no_results = No matching results found.
 | 
					no_results = No matching results found.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -214,6 +214,8 @@ func TagsList(ctx *context.Context) {
 | 
				
			|||||||
	ctx.Data["HideBranchesInDropdown"] = true
 | 
						ctx.Data["HideBranchesInDropdown"] = true
 | 
				
			||||||
	ctx.Data["CanCreateRelease"] = ctx.Repo.CanWrite(unit.TypeReleases) && !ctx.Repo.Repository.IsArchived
 | 
						ctx.Data["CanCreateRelease"] = ctx.Repo.CanWrite(unit.TypeReleases) && !ctx.Repo.Repository.IsArchived
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						namePattern := ctx.FormTrim("q")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	listOptions := db.ListOptions{
 | 
						listOptions := db.ListOptions{
 | 
				
			||||||
		Page:     ctx.FormInt("page"),
 | 
							Page:     ctx.FormInt("page"),
 | 
				
			||||||
		PageSize: ctx.FormInt("limit"),
 | 
							PageSize: ctx.FormInt("limit"),
 | 
				
			||||||
@@ -233,6 +235,7 @@ func TagsList(ctx *context.Context) {
 | 
				
			|||||||
		IncludeTags:   true,
 | 
							IncludeTags:   true,
 | 
				
			||||||
		HasSha1:       optional.Some(true),
 | 
							HasSha1:       optional.Some(true),
 | 
				
			||||||
		RepoID:        ctx.Repo.Repository.ID,
 | 
							RepoID:        ctx.Repo.Repository.ID,
 | 
				
			||||||
 | 
							NamePattern:   optional.Some(namePattern),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	releases, err := db.Find[repo_model.Release](ctx, opts)
 | 
						releases, err := db.Find[repo_model.Release](ctx, opts)
 | 
				
			||||||
@@ -241,14 +244,21 @@ func TagsList(ctx *context.Context) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["Releases"] = releases
 | 
						count, err := db.Count[repo_model.Release](ctx, opts)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							ctx.ServerError("GetReleasesByRepoID", err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	numTags := ctx.Data["NumTags"].(int64)
 | 
						ctx.Data["Keyword"] = namePattern
 | 
				
			||||||
	pager := context.NewPagination(int(numTags), opts.PageSize, opts.Page, 5)
 | 
						ctx.Data["Releases"] = releases
 | 
				
			||||||
 | 
						ctx.Data["TagCount"] = count
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5)
 | 
				
			||||||
	pager.SetDefaultParams(ctx)
 | 
						pager.SetDefaultParams(ctx)
 | 
				
			||||||
	ctx.Data["Page"] = pager
 | 
						ctx.Data["Page"] = pager
 | 
				
			||||||
 | 
					 | 
				
			||||||
	ctx.Data["PageIsViewCode"] = !ctx.Repo.Repository.UnitEnabled(ctx, unit.TypeReleases)
 | 
						ctx.Data["PageIsViewCode"] = !ctx.Repo.Repository.UnitEnabled(ctx, unit.TypeReleases)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.HTML(http.StatusOK, tplTagsList)
 | 
						ctx.HTML(http.StatusOK, tplTagsList)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,14 +4,19 @@
 | 
				
			|||||||
	<div class="ui container">
 | 
						<div class="ui container">
 | 
				
			||||||
		{{template "base/alert" .}}
 | 
							{{template "base/alert" .}}
 | 
				
			||||||
		{{template "repo/release_tag_header" .}}
 | 
							{{template "repo/release_tag_header" .}}
 | 
				
			||||||
		{{if .Releases}}
 | 
					 | 
				
			||||||
		<h4 class="ui top attached header">
 | 
							<h4 class="ui top attached header">
 | 
				
			||||||
			<div class="five wide column tw-flex tw-items-center">
 | 
								<div class="five wide column tw-flex tw-items-center">
 | 
				
			||||||
				{{svg "octicon-tag" 16 "tw-mr-1"}}{{ctx.Locale.Tr "repo.release.tags"}}
 | 
									{{.TagCount}} {{ctx.Locale.Tr "repo.release.tags"}}
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
		</h4>
 | 
							</h4>
 | 
				
			||||||
		{{$canReadReleases := $.Permission.CanRead ctx.Consts.RepoUnitTypeReleases}}
 | 
							{{$canReadReleases := $.Permission.CanRead ctx.Consts.RepoUnitTypeReleases}}
 | 
				
			||||||
 | 
							<div class="ui attached segment">
 | 
				
			||||||
 | 
								<form class="ignore-dirty" method="get">
 | 
				
			||||||
 | 
									{{template "shared/search/combo" dict "Value" .Keyword "Placeholder" (ctx.Locale.Tr "search.tag_kind") "Tooltip" (ctx.Locale.Tr "search.tag_tooltip")}}
 | 
				
			||||||
 | 
								</form>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
		<div class="ui attached table segment">
 | 
							<div class="ui attached table segment">
 | 
				
			||||||
 | 
								{{if .Releases}}
 | 
				
			||||||
			<table class="ui very basic striped fixed table single line" id="tags-table">
 | 
								<table class="ui very basic striped fixed table single line" id="tags-table">
 | 
				
			||||||
				<tbody class="tag-list">
 | 
									<tbody class="tag-list">
 | 
				
			||||||
					{{range $idx, $release := .Releases}}
 | 
										{{range $idx, $release := .Releases}}
 | 
				
			||||||
@@ -57,9 +62,12 @@
 | 
				
			|||||||
					{{end}}
 | 
										{{end}}
 | 
				
			||||||
				</tbody>
 | 
									</tbody>
 | 
				
			||||||
			</table>
 | 
								</table>
 | 
				
			||||||
		</div>
 | 
								{{else}}
 | 
				
			||||||
 | 
									{{if .NumTags}}
 | 
				
			||||||
 | 
										<p class="tw-p-4">{{ctx.Locale.Tr "no_results_found"}}</p>
 | 
				
			||||||
				{{end}}
 | 
									{{end}}
 | 
				
			||||||
 | 
								{{end}}
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
		{{template "base/paginate" .}}
 | 
							{{template "base/paginate" .}}
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user