Merge lp:~stevenk/launchpad/dsd-lose-diffs into lp:launchpad

Proposed by Steve Kowalik
Status: Merged
Approved by: Steve Kowalik
Approved revision: no longer in the source branch.
Merged at revision: 12677
Proposed branch: lp:~stevenk/launchpad/dsd-lose-diffs
Merge into: lp:launchpad
Diff against target: 56 lines (+35/-0)
2 files modified
lib/lp/registry/model/distroseriesdifference.py (+5/-0)
lib/lp/soyuz/tests/test_distroseriesdifferencejob.py (+30/-0)
To merge this branch: bzr merge lp:~stevenk/launchpad/dsd-lose-diffs
Reviewer Review Type Date Requested Status
Henning Eggers (community) code Approve
Review via email: mp+55059@code.launchpad.net

Commit message

[r=henninge][bug=744074] Invalidate diffs when updating a DSD.

Description of the change

When a DSD is updated, the current package diffs should be invalidated, since they now contain out-of-date data. It is not in scope to request them again, since we already have UI underway to request diffs for a DSD.

To post a comment you must log in.
Revision history for this message
Henning Eggers (henninge) wrote :

Looks good, thanks for doing this.

I think it makes sense to test both package_diff and parent_package for None. Also, please use "assertIs" and "assertIsNot" to test for None (thanks wgrant).

Already done, thanks! ;-)

review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/registry/model/distroseriesdifference.py'
2--- lib/lp/registry/model/distroseriesdifference.py 2011-03-23 16:28:51 +0000
3+++ lib/lp/registry/model/distroseriesdifference.py 2011-03-28 07:36:27 +0000
4@@ -248,6 +248,11 @@
5 clear_property_cache(self)
6 self._updateType()
7 updated = self._updateVersionsAndStatus()
8+ # If the DSD has changed, we want to invalidate the diffs. The GC
9+ # process for the Librarian will clean up after us.
10+ if updated is True:
11+ self.package_diff = None
12+ self.parent_package_diff = None
13 return updated
14
15 def _updateType(self):
16
17=== modified file 'lib/lp/soyuz/tests/test_distroseriesdifferencejob.py'
18--- lib/lp/soyuz/tests/test_distroseriesdifferencejob.py 2011-03-24 07:43:03 +0000
19+++ lib/lp/soyuz/tests/test_distroseriesdifferencejob.py 2011-03-28 07:36:27 +0000
20@@ -441,6 +441,36 @@
21 jobs = find_waiting_jobs(derived_series, source_package_name)
22 self.assertEqual(0, jobs.count())
23
24+ def test_update_deletes_diffs(self):
25+ # When a DSD is updated, the diffs are invalidated.
26+ derived_series = self.makeDerivedDistroSeries()
27+ source_package_name = self.factory.makeSourcePackageName()
28+ self.createPublication(
29+ source_package_name, ['1.0-1derived1', '1.0-1'], derived_series)
30+ self.createPublication(
31+ source_package_name, ['1.0-2', '1.0-1'],
32+ derived_series.parent_series)
33+ spr = self.factory.makeSourcePackageRelease(
34+ sourcepackagename=source_package_name, version='1.0-1')
35+ self.factory.makeSourcePackagePublishingHistory(
36+ sourcepackagerelease=spr,
37+ archive=derived_series.parent_series.main_archive,
38+ distroseries=derived_series.parent_series,
39+ status=PackagePublishingStatus.SUPERSEDED)
40+ jobs = find_waiting_jobs(derived_series, source_package_name)
41+ self.runJob(jobs[0])
42+ ds_diff = self.findDSD(derived_series, source_package_name)
43+ ds_diff[0].requestPackageDiffs(self.factory.makePerson())
44+ self.assertIsNot(None, ds_diff[0].package_diff)
45+ self.assertIsNot(None, ds_diff[0].parent_package_diff)
46+ self.createPublication(
47+ source_package_name, ['1.0-3', '1.0-2', '1.0-1'],
48+ derived_series.parent_series)
49+ jobs = find_waiting_jobs(derived_series, source_package_name)
50+ self.runJob(jobs[0])
51+ self.assertIs(None, ds_diff[0].package_diff)
52+ self.assertIs(None, ds_diff[0].parent_package_diff)
53+
54
55 class TestDistroSeriesDifferenceJobPermissions(TestCaseWithFactory):
56 """Database permissions test for `DistroSeriesDifferenceJob`."""