Merge lp:~cjwatson/launchpad/snap-delete-with-builds into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 18245
Proposed branch: lp:~cjwatson/launchpad/snap-delete-with-builds
Merge into: lp:launchpad
Diff against target: 65 lines (+13/-1)
2 files modified
lib/lp/snappy/model/snap.py (+7/-0)
lib/lp/snappy/tests/test_snap.py (+6/-1)
To merge this branch: bzr merge lp:~cjwatson/launchpad/snap-delete-with-builds
Reviewer Review Type Date Requested Status
Maximiliano Bertacchini (community) Approve
Launchpad code reviewers Pending
Review via email: mp+308767@code.launchpad.net

Commit message

Delete associated build jobs when deleting a snap.

To post a comment you must log in.
Revision history for this message
Maximiliano Bertacchini (maxiberta) wrote :

Looks good to me.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/snappy/model/snap.py'
2--- lib/lp/snappy/model/snap.py 2016-07-19 16:32:46 +0000
3+++ lib/lp/snappy/model/snap.py 2016-10-18 21:54:25 +0000
4@@ -480,6 +480,13 @@
5 SnapFile.snapbuild = SnapBuild.id AND
6 SnapBuild.snap = ?
7 """, (self.id,))
8+ store.execute("""
9+ DELETE FROM SnapBuildJob
10+ USING SnapBuild
11+ WHERE
12+ SnapBuildJob.snapbuild = SnapBuild.id AND
13+ SnapBuild.snap = ?
14+ """, (self.id,))
15 store.find(SnapBuild, SnapBuild.snap == self).remove()
16 getUtility(IWebhookSet).delete(self.webhooks)
17 store.remove(self)
18
19=== modified file 'lib/lp/snappy/tests/test_snap.py'
20--- lib/lp/snappy/tests/test_snap.py 2016-08-12 12:56:41 +0000
21+++ lib/lp/snappy/tests/test_snap.py 2016-10-18 21:54:25 +0000
22@@ -62,8 +62,10 @@
23 ISnapBuild,
24 ISnapBuildSet,
25 )
26+from lp.snappy.interfaces.snapbuildjob import ISnapStoreUploadJobSource
27 from lp.snappy.model.snap import SnapSet
28 from lp.snappy.model.snapbuild import SnapFile
29+from lp.snappy.model.snapbuildjob import SnapBuildJob
30 from lp.testing import (
31 admin_logged_in,
32 ANONYMOUS,
33@@ -443,7 +445,7 @@
34
35 def test_delete_with_builds(self):
36 # A snap package with builds can be deleted. Doing so deletes all
37- # its builds and their files too.
38+ # its builds, their files, and any associated build jobs too.
39 owner = self.factory.makePerson()
40 distroseries = self.factory.makeDistroSeries()
41 snap = self.factory.makeSnap(
42@@ -452,6 +454,7 @@
43 build = self.factory.makeSnapBuild(snap=snap)
44 build_queue = build.queueBuild()
45 snapfile = self.factory.makeSnapFile(snapbuild=build)
46+ snap_build_job = getUtility(ISnapStoreUploadJobSource).create(build)
47 self.assertTrue(getUtility(ISnapSet).exists(owner, u"condemned"))
48 other_build = self.factory.makeSnapBuild()
49 other_build.queueBuild()
50@@ -460,6 +463,7 @@
51 build_id = build.id
52 build_queue_id = build_queue.id
53 build_farm_job_id = removeSecurityProxy(build).build_farm_job_id
54+ snap_build_job_id = snap_build_job.job.job_id
55 snapfile_id = removeSecurityProxy(snapfile).id
56 with person_logged_in(snap.owner):
57 snap.destroySelf()
58@@ -470,6 +474,7 @@
59 self.assertIsNone(store.get(BuildQueue, build_queue_id))
60 self.assertIsNone(store.get(BuildFarmJob, build_farm_job_id))
61 self.assertIsNone(store.get(SnapFile, snapfile_id))
62+ self.assertIsNone(store.get(SnapBuildJob, snap_build_job_id))
63 # Unrelated builds are still present.
64 clear_property_cache(other_build)
65 self.assertEqual(