Skip to content

Commit cc27b50

Browse files
authored
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.
1 parent 423372d commit cc27b50

File tree

5 files changed

+23
-8
lines changed

5 files changed

+23
-8
lines changed

routers/web/repo/release.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,11 @@ func Releases(ctx *context.Context) {
185185
ctx.ServerError("getReleaseInfos", err)
186186
return
187187
}
188+
for _, rel := range releases {
189+
if rel.Release.IsTag && rel.Release.Title == "" {
190+
rel.Release.Title = rel.Release.TagName
191+
}
192+
}
188193

189194
ctx.Data["Releases"] = releases
190195

@@ -283,6 +288,7 @@ func SingleRelease(ctx *context.Context) {
283288
TagNames: []string{ctx.Params("*")},
284289
// only show draft releases for users who can write, read-only users shouldn't see draft releases.
285290
IncludeDrafts: writeAccess,
291+
IncludeTags: true,
286292
})
287293
if err != nil {
288294
ctx.ServerError("getReleaseInfos", err)
@@ -294,6 +300,9 @@ func SingleRelease(ctx *context.Context) {
294300
}
295301

296302
release := releases[0].Release
303+
if release.IsTag && release.Title == "" {
304+
release.Title = release.TagName
305+
}
297306

298307
ctx.Data["PageIsSingleTag"] = release.IsTag
299308
if release.IsTag {

templates/repo/release/list.tmpl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,18 @@
1818
<div class="ui twelve wide column detail">
1919
<div class="gt-df gt-ac gt-sb gt-fw gt-mb-3">
2020
<h4 class="release-list-title gt-word-break">
21-
<a href="{{$.RepoLink}}/releases/tag/{{$release.TagName | PathEscapeSegments}}">{{$release.Title}}</a>
21+
{{if $.PageIsSingleTag}}{{$release.Title}}{{else}}<a href="{{$.RepoLink}}/releases/tag/{{$release.TagName | PathEscapeSegments}}">{{$release.Title}}</a>{{end}}
2222
{{template "repo/commit_statuses" dict "Status" $info.CommitStatus "Statuses" $info.CommitStatuses "AdditionalClasses" "gt-df"}}
2323
{{if $release.IsDraft}}
2424
<span class="ui yellow label">{{ctx.Locale.Tr "repo.release.draft"}}</span>
2525
{{else if $release.IsPrerelease}}
2626
<span class="ui orange label">{{ctx.Locale.Tr "repo.release.prerelease"}}</span>
27-
{{else}}
27+
{{else if (not $release.IsTag)}}
2828
<span class="ui green label">{{ctx.Locale.Tr "repo.release.stable"}}</span>
2929
{{end}}
3030
</h4>
3131
<div>
32-
{{if $.CanCreateRelease}}
32+
{{if and $.CanCreateRelease (not $.PageIsSingleTag)}}
3333
<a class="muted" data-tooltip-content="{{ctx.Locale.Tr "repo.release.edit"}}" href="{{$.RepoLink}}/releases/edit/{{$release.TagName | PathEscapeSegments}}" rel="nofollow">
3434
{{svg "octicon-pencil"}}
3535
</a>

templates/repo/release_tag_header.tmpl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
<div class="gt-df">
66
<div class="gt-f1 gt-df gt-ac">
77
<h2 class="ui compact small menu header small-menu-items">
8-
<a class="{{if .PageIsReleaseList}}active {{end}}item" href="{{.RepoLink}}/releases">{{ctx.Locale.PrettyNumber .NumReleases}} {{ctx.Locale.TrN .NumReleases "repo.release" "repo.releases"}}</a>
8+
<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>
99
{{if $canReadCode}}
10-
<a class="{{if .PageIsTagList}}active {{end}}item" href="{{.RepoLink}}/tags">{{ctx.Locale.PrettyNumber .NumTags}} {{ctx.Locale.TrN .NumTags "repo.tag" "repo.tags"}}</a>
10+
<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>
1111
{{end}}
1212
</h2>
1313
</div>
@@ -17,7 +17,7 @@
1717
</a>
1818
{{end}}
1919
{{if and (not .PageIsTagList) .CanCreateRelease}}
20-
<a class="ui small primary button" href="{{$.RepoLink}}/releases/new">
20+
<a class="ui small primary button" href="{{$.RepoLink}}/releases/new{{if .PageIsSingleTag}}?tag={{.TagName}}{{end}}">
2121
{{ctx.Locale.Tr "repo.release.new_release"}}
2222
</a>
2323
{{end}}

tests/integration/links_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ func TestLinksNoLogin(t *testing.T) {
3636
"/user2/repo1/",
3737
"/user2/repo1/projects",
3838
"/user2/repo1/projects/1",
39+
"/user2/repo1/releases/tag/delete-tag", // It's the only one existing record on release.yml which has is_tag: true
3940
"/assets/img/404.png",
4041
"/assets/img/500.png",
4142
"/.well-known/security.txt",

web_src/js/features/repo-release.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ function initTagNameEditor() {
3030
const newTagHelperText = el.getAttribute('data-tag-helper-new');
3131
const existingTagHelperText = el.getAttribute('data-tag-helper-existing');
3232

33-
document.getElementById('tag-name').addEventListener('keyup', (e) => {
34-
const value = e.target.value;
33+
const tagNameInput = document.getElementById('tag-name');
34+
const hideTargetInput = function(tagNameInput) {
35+
const value = tagNameInput.value;
3536
const tagHelper = document.getElementById('tag-helper');
3637
if (existingTags.includes(value)) {
3738
// If the tag already exists, hide the target branch selector.
@@ -41,6 +42,10 @@ function initTagNameEditor() {
4142
showElem('#tag-target-selector');
4243
tagHelper.textContent = value ? newTagHelperText : defaultTagHelperText;
4344
}
45+
};
46+
hideTargetInput(tagNameInput); // update on page load because the input may have a value
47+
tagNameInput.addEventListener('input', (e) => {
48+
hideTargetInput(e.target);
4449
});
4550
}
4651

0 commit comments

Comments
 (0)