diff options
author | JakobDev <jakobdev@gmx.de> | 2023-10-19 15:16:11 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-19 13:16:11 +0000 |
commit | 3dc0c962bf3a74188bed02c01b4d34636112805a (patch) | |
tree | 588d9e7d8fbc3a4a862f466cada768558a09cc93 /services/repository/delete.go | |
parent | 398eccb322f64dded83a119467af2cb38f6dbd46 (diff) | |
download | gitea-3dc0c962bf3a74188bed02c01b4d34636112805a.tar.gz gitea-3dc0c962bf3a74188bed02c01b4d34636112805a.zip |
Delete repos of org when purge delete user (#27273)
Fixes https://codeberg.org/forgejo/forgejo/issues/1514
I had to remove `RenameOrganization` to avoid circular import.
We should really add some foreign keys to the database.
Diffstat (limited to 'services/repository/delete.go')
-rw-r--r-- | services/repository/delete.go | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/services/repository/delete.go b/services/repository/delete.go index b7fe4282b3..9b0a988ea3 100644 --- a/services/repository/delete.go +++ b/services/repository/delete.go @@ -420,3 +420,30 @@ func RemoveRepositoryFromTeam(ctx context.Context, t *organization.Team, repoID return committer.Commit() } + +// DeleteOwnerRepositoriesDirectly calls DeleteRepositoryDirectly for all repos of the given owner +func DeleteOwnerRepositoriesDirectly(ctx context.Context, owner *user_model.User) error { + for { + repos, _, err := repo_model.GetUserRepositories(ctx, &repo_model.SearchRepoOptions{ + ListOptions: db.ListOptions{ + PageSize: repo_model.RepositoryListDefaultPageSize, + Page: 1, + }, + Private: true, + OwnerID: owner.ID, + Actor: owner, + }) + if err != nil { + return fmt.Errorf("GetUserRepositories: %w", err) + } + if len(repos) == 0 { + break + } + for _, repo := range repos { + if err := DeleteRepositoryDirectly(ctx, owner, repo.ID); err != nil { + return fmt.Errorf("unable to delete repository %s for %s[%d]. Error: %w", repo.Name, owner.Name, owner.ID, err) + } + } + } + return nil +} |