Merge ~cjwatson/launchpad:delete-related-access-tokens into launchpad:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: 10aa5d470fb634cc02d14d69141ac2dccc3bda8b
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad:delete-related-access-tokens
Merge into: launchpad:master
Diff against target: 36 lines (+14/-0)
2 files modified
lib/lp/code/model/gitrepository.py (+1/-0)
lib/lp/code/model/tests/test_gitrepository.py (+13/-0)
Reviewer Review Type Date Requested Status
Jürgen Gmach Approve
Review via email: mp+416820@code.launchpad.net

Commit message

Delete related access tokens when deleting a Git repository

To post a comment you must log in.
Revision history for this message
Jürgen Gmach (jugmac00) :
review: Approve
Revision history for this message
Colin Watson (cjwatson) :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/lib/lp/code/model/gitrepository.py b/lib/lp/code/model/gitrepository.py
2index 0dd205b..c52fd5e 100644
3--- a/lib/lp/code/model/gitrepository.py
4+++ b/lib/lp/code/model/gitrepository.py
5@@ -1821,6 +1821,7 @@ class GitRepository(StormBase, WebhookTargetMixin, AccessTokenTargetMixin,
6 # activity logs for removed repositories anyway.
7 self.grants.remove()
8 self.rules.remove()
9+ removeSecurityProxy(self.getAccessTokens()).remove()
10 getUtility(IRevisionStatusReportSet).deleteForRepository(self)
11 getUtility(ICIBuildSet).deleteByGitRepository(self)
12
13diff --git a/lib/lp/code/model/tests/test_gitrepository.py b/lib/lp/code/model/tests/test_gitrepository.py
14index fd1f9eb..10742af 100644
15--- a/lib/lp/code/model/tests/test_gitrepository.py
16+++ b/lib/lp/code/model/tests/test_gitrepository.py
17@@ -1184,6 +1184,19 @@ class TestGitRepositoryDeletion(TestCaseWithFactory):
18 GitActivity, GitActivity.repository_id == repository_id)
19 self.assertEqual([], list(activities))
20
21+ def test_related_access_tokens_deleted(self):
22+ _, token = self.factory.makeAccessToken(target=self.repository)
23+ other_repository = self.factory.makeGitRepository()
24+ _, other_token = self.factory.makeAccessToken(target=other_repository)
25+ self.repository.destroySelf()
26+ transaction.commit()
27+ # The deleted repository's access tokens are gone.
28+ self.assertRaises(
29+ LostObjectError, getattr, removeSecurityProxy(token), 'target')
30+ # An unrelated repository's access tokens are still present.
31+ self.assertEqual(
32+ other_repository, removeSecurityProxy(other_token).target)
33+
34 def test_related_ci_builds_deleted(self):
35 # A repository that has a CI build can be deleted.
36 build = self.factory.makeCIBuild(git_repository=self.repository)

Subscribers

People subscribed via source and target branches

to status/vote changes: