mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-05-25 11:22:16 +00:00
fix: release page for empty or non-existing target (#24470)
Fixes #24145 To solve the bug, I added a "computed" `TargetBehind` field to the `Release` model, which indicates the target branch of a release. This is particularly useful if the target branch was deleted in the meantime (or is empty). I also did a micro-optimization in `calReleaseNumCommitsBehind`. Instead of checking that a branch exists and then call `GetBranchCommit`, I immediately call `GetBranchCommit` and handle the `git.ErrNotExist` error. This optimization is covered by the added unit test.
This commit is contained in:
parent
5930ab5fdf
commit
8030614386
6 changed files with 107 additions and 17 deletions
|
@ -11,6 +11,8 @@ import (
|
|||
"code.gitea.io/gitea/modules/test"
|
||||
"code.gitea.io/gitea/modules/web"
|
||||
"code.gitea.io/gitea/services/forms"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestNewReleasePost(t *testing.T) {
|
||||
|
@ -62,3 +64,48 @@ func TestNewReleasePost(t *testing.T) {
|
|||
ctx.Repo.GitRepo.Close()
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewReleasesList(t *testing.T) {
|
||||
unittest.PrepareTestEnv(t)
|
||||
ctx := test.MockContext(t, "user2/repo-release/releases")
|
||||
test.LoadUser(t, ctx, 2)
|
||||
test.LoadRepo(t, ctx, 57)
|
||||
test.LoadGitRepo(t, ctx)
|
||||
t.Cleanup(func() { ctx.Repo.GitRepo.Close() })
|
||||
|
||||
Releases(ctx)
|
||||
releases := ctx.Data["Releases"].([]*repo_model.Release)
|
||||
type computedFields struct {
|
||||
NumCommitsBehind int64
|
||||
TargetBehind string
|
||||
}
|
||||
expectedComputation := map[string]computedFields{
|
||||
"v1.0": {
|
||||
NumCommitsBehind: 3,
|
||||
TargetBehind: "main",
|
||||
},
|
||||
"v1.1": {
|
||||
NumCommitsBehind: 1,
|
||||
TargetBehind: "main",
|
||||
},
|
||||
"v2.0": {
|
||||
NumCommitsBehind: 0,
|
||||
TargetBehind: "main",
|
||||
},
|
||||
"non-existing-target-branch": {
|
||||
NumCommitsBehind: 1,
|
||||
TargetBehind: "main",
|
||||
},
|
||||
"empty-target-branch": {
|
||||
NumCommitsBehind: 1,
|
||||
TargetBehind: "main",
|
||||
},
|
||||
}
|
||||
for _, r := range releases {
|
||||
actual := computedFields{
|
||||
NumCommitsBehind: r.NumCommitsBehind,
|
||||
TargetBehind: r.TargetBehind,
|
||||
}
|
||||
assert.Equal(t, expectedComputation[r.TagName], actual, "wrong computed fields for %s: %#v", r.TagName, r)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue