aboutsummaryrefslogtreecommitdiffstats
path: root/services/repository/delete.go
diff options
context:
space:
mode:
authorJakobDev <jakobdev@gmx.de>2023-10-19 15:16:11 +0200
committerGitHub <noreply@github.com>2023-10-19 13:16:11 +0000
commit3dc0c962bf3a74188bed02c01b4d34636112805a (patch)
tree588d9e7d8fbc3a4a862f466cada768558a09cc93 /services/repository/delete.go
parent398eccb322f64dded83a119467af2cb38f6dbd46 (diff)
downloadgitea-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.go27
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
+}