mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-27 13:39:19 -05:00
Fix bug on action list deleted branch (#32848)
Fix https://github.com/go-gitea/gitea/issues/32761#issuecomment-2540946064 --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> (cherry picked from commit 42090844ed2de5e615abc6ece351c152d3344295) Conflicts: models/fixtures/action_run.yml models/fixtures/branch.yml routers/web/repo/actions/actions_test.go trivial context conflict
This commit is contained in:
parent
1e7b922e44
commit
967e04534e
5 changed files with 83 additions and 4 deletions
|
@ -432,6 +432,25 @@
|
||||||
updated: 1683636626
|
updated: 1683636626
|
||||||
need_approval: 0
|
need_approval: 0
|
||||||
approved_by: 0
|
approved_by: 0
|
||||||
|
-
|
||||||
|
id: 794
|
||||||
|
title: "job output"
|
||||||
|
repo_id: 4
|
||||||
|
owner_id: 1
|
||||||
|
workflow_id: "test.yaml"
|
||||||
|
index: 190
|
||||||
|
trigger_user_id: 1
|
||||||
|
ref: "refs/heads/test"
|
||||||
|
commit_sha: "c2d72f548424103f01ee1dc02889c1e2bff816b0"
|
||||||
|
event: "push"
|
||||||
|
is_fork_pull_request: 0
|
||||||
|
status: 1
|
||||||
|
started: 1683636528
|
||||||
|
stopped: 1683636626
|
||||||
|
created: 1683636108
|
||||||
|
updated: 1683636626
|
||||||
|
need_approval: 0
|
||||||
|
approved_by: 0
|
||||||
-
|
-
|
||||||
id: 891
|
id: 891
|
||||||
title: "update actions"
|
title: "update actions"
|
||||||
|
|
|
@ -45,3 +45,15 @@
|
||||||
is_deleted: false
|
is_deleted: false
|
||||||
deleted_by_id: 0
|
deleted_by_id: 0
|
||||||
deleted_unix: 0
|
deleted_unix: 0
|
||||||
|
|
||||||
|
-
|
||||||
|
id: 15
|
||||||
|
repo_id: 4
|
||||||
|
name: 'master'
|
||||||
|
commit_id: 'c7cd3cd144e6d23c9d6f3d07e52b2c1a956e0338'
|
||||||
|
commit_message: 'add Readme'
|
||||||
|
commit_time: 1588147171
|
||||||
|
pusher_id: 13
|
||||||
|
is_deleted: false
|
||||||
|
deleted_by_id: 0
|
||||||
|
deleted_unix: 0
|
||||||
|
|
|
@ -5,6 +5,7 @@ package actions
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
stdCtx "context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"slices"
|
"slices"
|
||||||
|
@ -224,7 +225,7 @@ func List(ctx *context.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := loadIsRefDeleted(ctx, runs); err != nil {
|
if err := loadIsRefDeleted(ctx, ctx.Repo.Repository.ID, runs); err != nil {
|
||||||
log.Error("LoadIsRefDeleted", err)
|
log.Error("LoadIsRefDeleted", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,7 +255,7 @@ func List(ctx *context.Context) {
|
||||||
|
|
||||||
// loadIsRefDeleted loads the IsRefDeleted field for each run in the list.
|
// loadIsRefDeleted loads the IsRefDeleted field for each run in the list.
|
||||||
// TODO: move this function to models/actions/run_list.go but now it will result in a circular import.
|
// TODO: move this function to models/actions/run_list.go but now it will result in a circular import.
|
||||||
func loadIsRefDeleted(ctx *context.Context, runs actions_model.RunList) error {
|
func loadIsRefDeleted(ctx stdCtx.Context, repoID int64, runs actions_model.RunList) error {
|
||||||
branches := make(container.Set[string], len(runs))
|
branches := make(container.Set[string], len(runs))
|
||||||
for _, run := range runs {
|
for _, run := range runs {
|
||||||
refName := git.RefName(run.Ref)
|
refName := git.RefName(run.Ref)
|
||||||
|
@ -266,14 +267,14 @@ func loadIsRefDeleted(ctx *context.Context, runs actions_model.RunList) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
branchInfos, err := git_model.GetBranches(ctx, ctx.Repo.Repository.ID, branches.Values(), false)
|
branchInfos, err := git_model.GetBranches(ctx, repoID, branches.Values(), false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
branchSet := git_model.BranchesToNamesSet(branchInfos)
|
branchSet := git_model.BranchesToNamesSet(branchInfos)
|
||||||
for _, run := range runs {
|
for _, run := range runs {
|
||||||
refName := git.RefName(run.Ref)
|
refName := git.RefName(run.Ref)
|
||||||
if refName.IsBranch() && !branchSet.Contains(run.Ref) {
|
if refName.IsBranch() && !branchSet.Contains(refName.ShortName()) {
|
||||||
run.IsRefDeleted = true
|
run.IsRefDeleted = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
33
routers/web/repo/actions/actions_test.go
Normal file
33
routers/web/repo/actions/actions_test.go
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
// Copyright 2022 The Gitea Authors. All rights reserved.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
package actions
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
actions_model "code.gitea.io/gitea/models/actions"
|
||||||
|
"code.gitea.io/gitea/models/db"
|
||||||
|
unittest "code.gitea.io/gitea/models/unittest"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test_loadIsRefDeleted(t *testing.T) {
|
||||||
|
unittest.PrepareTestEnv(t)
|
||||||
|
|
||||||
|
runs, total, err := db.FindAndCount[actions_model.ActionRun](db.DefaultContext,
|
||||||
|
actions_model.FindRunOptions{RepoID: 4, Ref: "refs/heads/test"})
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Len(t, runs, 1)
|
||||||
|
assert.EqualValues(t, 1, total)
|
||||||
|
for _, run := range runs {
|
||||||
|
assert.False(t, run.IsRefDeleted)
|
||||||
|
}
|
||||||
|
|
||||||
|
require.NoError(t, loadIsRefDeleted(db.DefaultContext, 4, runs))
|
||||||
|
for _, run := range runs {
|
||||||
|
assert.True(t, run.IsRefDeleted)
|
||||||
|
}
|
||||||
|
}
|
14
routers/web/repo/actions/main_test.go
Normal file
14
routers/web/repo/actions/main_test.go
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
package actions
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/models/unittest"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMain(m *testing.M) {
|
||||||
|
unittest.MainTest(m)
|
||||||
|
}
|
Loading…
Reference in a new issue