diff --git a/server/store/datastore/repo.go b/server/store/datastore/repo.go index 3ed2f2ed5..31f9fa26b 100644 --- a/server/store/datastore/repo.go +++ b/server/store/datastore/repo.go @@ -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 { diff --git a/server/store/datastore/repo_test.go b/server/store/datastore/repo_test.go index 8ff01e5cb..8cdcb6cec 100644 --- a/server/store/datastore/repo_test.go +++ b/server/store/datastore/repo_test.go @@ -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),