From d60af095dd7ed9b1f0ec2724dfb2300700c9f756 Mon Sep 17 00:00:00 2001 From: forgejo-backport-action Date: Wed, 1 Apr 2026 17:35:43 +0200 Subject: [PATCH] [v15.0/forgejo] fix: allow repository deletion when referenced by a repo-specific access token (#11933) **Backport:** https://codeberg.org/forgejo/forgejo/pulls/11927 Fixes #11919. Co-authored-by: Mathieu Fenniak Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11933 Reviewed-by: Mathieu Fenniak Co-authored-by: forgejo-backport-action Co-committed-by: forgejo-backport-action --- services/repository/delete.go | 2 ++ services/repository/repository_test.go | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/services/repository/delete.go b/services/repository/delete.go index 3ea7e51a9b..8766204f34 100644 --- a/services/repository/delete.go +++ b/services/repository/delete.go @@ -13,6 +13,7 @@ import ( activities_model "forgejo.org/models/activities" admin_model "forgejo.org/models/admin" asymkey_model "forgejo.org/models/asymkey" + auth_model "forgejo.org/models/auth" "forgejo.org/models/db" git_model "forgejo.org/models/git" issues_model "forgejo.org/models/issues" @@ -189,6 +190,7 @@ func DeleteRepositoryDirectly(ctx context.Context, doer *user_model.User, repoID &actions_model.ActionUser{RepoID: repoID}, &repo_model.RepoArchiveDownloadCount{RepoID: repoID}, &actions_model.ActionRunnerToken{RepoID: optional.Some(repoID)}, + &auth_model.AccessTokenResourceRepo{RepoID: repoID}, ); err != nil { return fmt.Errorf("deleteBeans: %w", err) } diff --git a/services/repository/repository_test.go b/services/repository/repository_test.go index 5f63e4d9cb..e5ae3ecb32 100644 --- a/services/repository/repository_test.go +++ b/services/repository/repository_test.go @@ -6,6 +6,7 @@ package repository import ( "testing" + auth_model "forgejo.org/models/auth" "forgejo.org/models/db" repo_model "forgejo.org/models/repo" "forgejo.org/models/unit" @@ -62,3 +63,19 @@ func TestDeleteRepository(t *testing.T) { doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}) require.NoError(t, DeleteRepository(t.Context(), doer, repo, false)) } + +func TestDeleteRepositoryWithReferences(t *testing.T) { + require.NoError(t, unittest.PrepareTestDatabase()) + + repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) + + token1 := unittest.AssertExistsAndLoadBean(t, &auth_model.AccessToken{ID: 1}) + err := db.Insert(t.Context(), &auth_model.AccessTokenResourceRepo{ + TokenID: token1.ID, + RepoID: repo.ID, + }) + require.NoError(t, err) + + doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}) + require.NoError(t, DeleteRepository(t.Context(), doer, repo, false)) +}