diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/doctor/repository.go | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/modules/doctor/repository.go b/modules/doctor/repository.go index aa3f064ddd..d69ba2048b 100644 --- a/modules/doctor/repository.go +++ b/modules/doctor/repository.go @@ -37,24 +37,29 @@ func deleteOrphanedRepos(ctx context.Context) (int64, error) { adminUser := &user_model.User{IsAdmin: true} for { - var ids []int64 - if err := e.Table("`repository`"). - Join("LEFT", "`user`", "repository.owner_id=user.id"). - Where(builder.IsNull{"`user`.id"}). - Select("`repository`.id").Limit(batchSize).Find(&ids); err != nil { - return deleted, err - } + select { + case <-ctx.Done(): + return deleted, ctx.Err() + default: + var ids []int64 + if err := e.Table("`repository`"). + Join("LEFT", "`user`", "repository.owner_id=user.id"). + Where(builder.IsNull{"`user`.id"}). + Select("`repository`.id").Limit(batchSize).Find(&ids); err != nil { + return deleted, err + } - // if we don't get ids we have deleted them all - if len(ids) == 0 { - return deleted, nil - } + // if we don't get ids we have deleted them all + if len(ids) == 0 { + return deleted, nil + } - for _, id := range ids { - if err := repo_service.DeleteRepositoryDirectly(ctx, adminUser, id, true); err != nil { - return deleted, err + for _, id := range ids { + if err := repo_service.DeleteRepositoryDirectly(ctx, adminUser, id, true); err != nil { + return deleted, err + } + deleted++ } - deleted++ } } } |