mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2026-09-05 20:07:25 +00:00
Fix orphaned pipelines after repo delete (#6971)
This commit is contained in:
@@ -103,7 +103,6 @@ func (s storage) DeleteRepo(repo *model.Repo) error {
|
||||
}
|
||||
|
||||
func (s storage) deleteRepo(sess *xorm.Session, repo *model.Repo) error {
|
||||
const batchSize = perPage
|
||||
if _, err := sess.Where("repo_id = ?", repo.ID).Delete(new(model.Config)); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -121,9 +120,9 @@ func (s storage) deleteRepo(sess *xorm.Session, repo *model.Repo) error {
|
||||
}
|
||||
|
||||
// delete related pipelines
|
||||
for startPipelines := 0; ; startPipelines += batchSize {
|
||||
pipelineIDs := make([]int64, 0, batchSize)
|
||||
if err := sess.Limit(batchSize, startPipelines).Table("pipelines").Cols("id").Where("repo_id = ?", repo.ID).Find(&pipelineIDs); err != nil {
|
||||
for {
|
||||
pipelineIDs := make([]int64, 0, perPage)
|
||||
if err := sess.Limit(perPage).Table("pipelines").Cols("id").Where("repo_id = ?", repo.ID).Find(&pipelineIDs); err != nil {
|
||||
return err
|
||||
}
|
||||
if len(pipelineIDs) == 0 {
|
||||
|
||||
@@ -349,6 +349,52 @@ func TestRepoCrud(t *testing.T) {
|
||||
assert.EqualValues(t, 1, pipelineCount)
|
||||
}
|
||||
|
||||
func TestRepoDelete(t *testing.T) {
|
||||
store, closer := newTestStore(t,
|
||||
new(model.Repo),
|
||||
new(model.User),
|
||||
new(model.Perm),
|
||||
new(model.Pipeline),
|
||||
new(model.PipelineConfig),
|
||||
new(model.LogEntry),
|
||||
new(model.Step),
|
||||
new(model.Secret),
|
||||
new(model.Registry),
|
||||
new(model.Config),
|
||||
new(model.Redirection),
|
||||
new(model.Workflow))
|
||||
defer closer()
|
||||
|
||||
repo := model.Repo{
|
||||
ForgeID: 1,
|
||||
ForgeRemoteID: "bradrydzewskitest",
|
||||
UserID: 1,
|
||||
FullName: "bradrydzewski/test",
|
||||
Owner: "bradrydzewski",
|
||||
Name: "test",
|
||||
}
|
||||
assert.NoError(t, store.CreateRepo(&repo))
|
||||
|
||||
// create 60 new pipelines to test more than one page is deleted
|
||||
for range 60 {
|
||||
pipeline := model.Pipeline{
|
||||
RepoID: repo.ID,
|
||||
}
|
||||
step := model.Step{
|
||||
Name: "a step",
|
||||
}
|
||||
assert.NoError(t, store.CreatePipeline(&pipeline, &step))
|
||||
}
|
||||
assert.NoError(t, store.DeleteRepo(&repo))
|
||||
|
||||
stepCount, err := store.engine.Count(new(model.Step))
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 0, stepCount)
|
||||
pipelineCount, err := store.engine.Count(new(model.Pipeline))
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 0, pipelineCount)
|
||||
}
|
||||
|
||||
func TestRepoRedirection(t *testing.T) {
|
||||
store, closer := newTestStore(t,
|
||||
new(model.Repo),
|
||||
|
||||
Reference in New Issue
Block a user