mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 03:18:24 +00:00 
			
		
		
		
	Fix a bug returning 404 when display a single tag with no release (#29466)
Partially caused by #29149 When use ```go releases, err := getReleaseInfos(ctx, &repo_model.FindReleasesOptions{ ListOptions: db.ListOptions{Page: 1, PageSize: 1}, RepoID: ctx.Repo.Repository.ID, TagNames: []string{ctx.Params("*")}, // only show draft releases for users who can write, read-only users shouldn't see draft releases. IncludeDrafts: writeAccess, }) ``` replace ```go release, err := repo_model.GetRelease(ctx, ctx.Repo.Repository.ID, ctx.Params("*")) ``` It missed `IncludeTags: true,`. That means this bug will be occupied only when the release is a tag. This PR will fix - Get the right tag record when it's not a release - Display correct tag tab but not release tag when it's a tag. - The button will bring the tag name to the new page when it's a single tag page - the new page will automatically hide the release target inputbox when the tag name is pre filled. This should be backport to v1.21.
This commit is contained in:
		| @@ -185,6 +185,11 @@ func Releases(ctx *context.Context) { | ||||
| 		ctx.ServerError("getReleaseInfos", err) | ||||
| 		return | ||||
| 	} | ||||
| 	for _, rel := range releases { | ||||
| 		if rel.Release.IsTag && rel.Release.Title == "" { | ||||
| 			rel.Release.Title = rel.Release.TagName | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	ctx.Data["Releases"] = releases | ||||
|  | ||||
| @@ -283,6 +288,7 @@ func SingleRelease(ctx *context.Context) { | ||||
| 		TagNames:    []string{ctx.Params("*")}, | ||||
| 		// only show draft releases for users who can write, read-only users shouldn't see draft releases. | ||||
| 		IncludeDrafts: writeAccess, | ||||
| 		IncludeTags:   true, | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		ctx.ServerError("getReleaseInfos", err) | ||||
| @@ -294,6 +300,9 @@ func SingleRelease(ctx *context.Context) { | ||||
| 	} | ||||
|  | ||||
| 	release := releases[0].Release | ||||
| 	if release.IsTag && release.Title == "" { | ||||
| 		release.Title = release.TagName | ||||
| 	} | ||||
|  | ||||
| 	ctx.Data["PageIsSingleTag"] = release.IsTag | ||||
| 	if release.IsTag { | ||||
|   | ||||
| @@ -18,18 +18,18 @@ | ||||
| 					<div class="ui twelve wide column detail"> | ||||
| 						<div class="gt-df gt-ac gt-sb gt-fw gt-mb-3"> | ||||
| 							<h4 class="release-list-title gt-word-break"> | ||||
| 								<a href="{{$.RepoLink}}/releases/tag/{{$release.TagName | PathEscapeSegments}}">{{$release.Title}}</a> | ||||
| 								{{if $.PageIsSingleTag}}{{$release.Title}}{{else}}<a href="{{$.RepoLink}}/releases/tag/{{$release.TagName | PathEscapeSegments}}">{{$release.Title}}</a>{{end}} | ||||
| 								{{template "repo/commit_statuses" dict "Status" $info.CommitStatus "Statuses" $info.CommitStatuses "AdditionalClasses" "gt-df"}} | ||||
| 								{{if $release.IsDraft}} | ||||
| 									<span class="ui yellow label">{{ctx.Locale.Tr "repo.release.draft"}}</span> | ||||
| 								{{else if $release.IsPrerelease}} | ||||
| 									<span class="ui orange label">{{ctx.Locale.Tr "repo.release.prerelease"}}</span> | ||||
| 								{{else}} | ||||
| 								{{else if (not $release.IsTag)}} | ||||
| 									<span class="ui green label">{{ctx.Locale.Tr "repo.release.stable"}}</span> | ||||
| 								{{end}} | ||||
| 							</h4> | ||||
| 							<div> | ||||
| 								{{if $.CanCreateRelease}} | ||||
| 								{{if and $.CanCreateRelease (not $.PageIsSingleTag)}} | ||||
| 									<a class="muted" data-tooltip-content="{{ctx.Locale.Tr "repo.release.edit"}}" href="{{$.RepoLink}}/releases/edit/{{$release.TagName | PathEscapeSegments}}" rel="nofollow"> | ||||
| 										{{svg "octicon-pencil"}} | ||||
| 									</a> | ||||
|   | ||||
| @@ -5,9 +5,9 @@ | ||||
| 	<div class="gt-df"> | ||||
| 		<div class="gt-f1 gt-df gt-ac"> | ||||
| 			<h2 class="ui compact small menu header small-menu-items"> | ||||
| 				<a class="{{if .PageIsReleaseList}}active {{end}}item" href="{{.RepoLink}}/releases">{{ctx.Locale.PrettyNumber .NumReleases}} {{ctx.Locale.TrN .NumReleases "repo.release" "repo.releases"}}</a> | ||||
| 				<a class="{{if and .PageIsReleaseList (not .PageIsSingleTag)}}active {{end}}item" href="{{.RepoLink}}/releases">{{ctx.Locale.PrettyNumber .NumReleases}} {{ctx.Locale.TrN .NumReleases "repo.release" "repo.releases"}}</a> | ||||
| 				{{if $canReadCode}} | ||||
| 					<a class="{{if .PageIsTagList}}active {{end}}item" href="{{.RepoLink}}/tags">{{ctx.Locale.PrettyNumber .NumTags}} {{ctx.Locale.TrN .NumTags "repo.tag" "repo.tags"}}</a> | ||||
| 					<a class="{{if or .PageIsTagList .PageIsSingleTag}}active {{end}}item" href="{{.RepoLink}}/tags">{{ctx.Locale.PrettyNumber .NumTags}} {{ctx.Locale.TrN .NumTags "repo.tag" "repo.tags"}}</a> | ||||
| 				{{end}} | ||||
| 			</h2> | ||||
| 		</div> | ||||
| @@ -17,7 +17,7 @@ | ||||
| 			</a> | ||||
| 		{{end}} | ||||
| 		{{if and (not .PageIsTagList) .CanCreateRelease}} | ||||
| 			<a class="ui small primary button" href="{{$.RepoLink}}/releases/new"> | ||||
| 			<a class="ui small primary button" href="{{$.RepoLink}}/releases/new{{if .PageIsSingleTag}}?tag={{.TagName}}{{end}}"> | ||||
| 				{{ctx.Locale.Tr "repo.release.new_release"}} | ||||
| 			</a> | ||||
| 		{{end}} | ||||
|   | ||||
| @@ -36,6 +36,7 @@ func TestLinksNoLogin(t *testing.T) { | ||||
| 		"/user2/repo1/", | ||||
| 		"/user2/repo1/projects", | ||||
| 		"/user2/repo1/projects/1", | ||||
| 		"/user2/repo1/releases/tag/delete-tag", // It's the only one existing record on release.yml which has is_tag: true | ||||
| 		"/assets/img/404.png", | ||||
| 		"/assets/img/500.png", | ||||
| 		"/.well-known/security.txt", | ||||
|   | ||||
| @@ -30,8 +30,9 @@ function initTagNameEditor() { | ||||
|   const newTagHelperText = el.getAttribute('data-tag-helper-new'); | ||||
|   const existingTagHelperText = el.getAttribute('data-tag-helper-existing'); | ||||
|  | ||||
|   document.getElementById('tag-name').addEventListener('keyup', (e) => { | ||||
|     const value = e.target.value; | ||||
|   const tagNameInput = document.getElementById('tag-name'); | ||||
|   const hideTargetInput = function(tagNameInput) { | ||||
|     const value = tagNameInput.value; | ||||
|     const tagHelper = document.getElementById('tag-helper'); | ||||
|     if (existingTags.includes(value)) { | ||||
|       // If the tag already exists, hide the target branch selector. | ||||
| @@ -41,6 +42,10 @@ function initTagNameEditor() { | ||||
|       showElem('#tag-target-selector'); | ||||
|       tagHelper.textContent = value ? newTagHelperText : defaultTagHelperText; | ||||
|     } | ||||
|   }; | ||||
|   hideTargetInput(tagNameInput); // update on page load because the input may have a value | ||||
|   tagNameInput.addEventListener('input', (e) => { | ||||
|     hideTargetInput(e.target); | ||||
|   }); | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user