summaryrefslogtreecommitdiffstats
path: root/services/repository
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2023-10-22 02:21:41 +0200
committerGitHub <noreply@github.com>2023-10-22 02:21:41 +0200
commitaabcf2d7ad247fb0bf8131ebdf8400fcf5292828 (patch)
tree552feecf1ac5d470b2a9072869d221bf2a099453 /services/repository
parent6919a02ab7acfa7939edc33cb5eb5fdb49d8721a (diff)
downloadgitea-aabcf2d7ad247fb0bf8131ebdf8400fcf5292828.tar.gz
gitea-aabcf2d7ad247fb0bf8131ebdf8400fcf5292828.zip
Add doctor dbconsistency fix to delete repos with no owner (#27290) (#27693)
Backport #27290
Diffstat (limited to 'services/repository')
-rw-r--r--services/repository/delete.go15
1 files changed, 9 insertions, 6 deletions
diff --git a/services/repository/delete.go b/services/repository/delete.go
index f3bf91af4f..a06d8a803f 100644
--- a/services/repository/delete.go
+++ b/services/repository/delete.go
@@ -33,7 +33,7 @@ import (
// DeleteRepository deletes a repository for a user or organization.
// make sure if you call this func to close open sessions (sqlite will otherwise get a deadlock)
-func DeleteRepositoryDirectly(ctx context.Context, doer *user_model.User, uid, repoID int64) error {
+func DeleteRepositoryDirectly(ctx context.Context, doer *user_model.User, uid, repoID int64, ignoreOrgTeams ...bool) error {
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
@@ -53,10 +53,13 @@ func DeleteRepositoryDirectly(ctx context.Context, doer *user_model.User, uid, r
return fmt.Errorf("list actions artifacts of repo %v: %w", repoID, err)
}
- // In case is a organization.
- org, err := user_model.GetUserByID(ctx, uid)
- if err != nil {
- return err
+ // In case owner is a organization, we have to change repo specific teams
+ // if ignoreOrgTeams is not true
+ var org *user_model.User
+ if len(ignoreOrgTeams) == 0 || !ignoreOrgTeams[0] {
+ if org, err = user_model.GetUserByID(ctx, uid); err != nil {
+ return err
+ }
}
repo := &repo_model.Repository{OwnerID: uid}
@@ -95,7 +98,7 @@ func DeleteRepositoryDirectly(ctx context.Context, doer *user_model.User, uid, r
}
}
- if org.IsOrganization() {
+ if org != nil && org.IsOrganization() {
teams, err := organization.FindOrgTeams(ctx, org.ID)
if err != nil {
return err