diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2024-03-02 22:03:39 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-02 14:03:39 +0000 |
commit | cc27b50bdf9d1e2b02c91d7c4d338e01408e8522 (patch) | |
tree | 5cc97201cdd4ec0f267fc5035fb020c41bdaeb40 | |
parent | 423372d84ab3d885e47d4a00cd69d6040b61cc4c (diff) | |
download | gitea-cc27b50bdf9d1e2b02c91d7c4d338e01408e8522.tar.gz gitea-cc27b50bdf9d1e2b02c91d7c4d338e01408e8522.zip |
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.
-rw-r--r-- | routers/web/repo/release.go | 9 | ||||
-rw-r--r-- | templates/repo/release/list.tmpl | 6 | ||||
-rw-r--r-- | templates/repo/release_tag_header.tmpl | 6 | ||||
-rw-r--r-- | tests/integration/links_test.go | 1 | ||||
-rw-r--r-- | web_src/js/features/repo-release.js | 9 |
5 files changed, 23 insertions, 8 deletions
diff --git a/routers/web/repo/release.go b/routers/web/repo/release.go index c6d8c45af1..dbc190928f 100644 --- a/routers/web/repo/release.go +++ b/routers/web/repo/release.go @@ -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 { diff --git a/templates/repo/release/list.tmpl b/templates/repo/release/list.tmpl index 7f38fa3ff0..873cccab79 100644 --- a/templates/repo/release/list.tmpl +++ b/templates/repo/release/list.tmpl @@ -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> diff --git a/templates/repo/release_tag_header.tmpl b/templates/repo/release_tag_header.tmpl index 31c151da08..8e6088790d 100644 --- a/templates/repo/release_tag_header.tmpl +++ b/templates/repo/release_tag_header.tmpl @@ -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}} diff --git a/tests/integration/links_test.go b/tests/integration/links_test.go index a3937dd697..d103e2b0a9 100644 --- a/tests/integration/links_test.go +++ b/tests/integration/links_test.go @@ -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", diff --git a/web_src/js/features/repo-release.js b/web_src/js/features/repo-release.js index 2db8079009..f3cfa74418 100644 --- a/web_src/js/features/repo-release.js +++ b/web_src/js/features/repo-release.js @@ -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); }); } |