Merge lp:~wgrant/launchpad/bug-1160461 into lp:launchpad

Proposed by William Grant
Status: Merged
Approved by: Steve Kowalik
Approved revision: no longer in the source branch.
Merged at revision: 16544
Proposed branch: lp:~wgrant/launchpad/bug-1160461
Merge into: lp:launchpad
Diff against target: 60 lines (+16/-3)
2 files modified
lib/lp/soyuz/browser/build.py (+2/-3)
lib/lp/soyuz/browser/tests/test_build_views.py (+14/-0)
To merge this branch: bzr merge lp:~wgrant/launchpad/bug-1160461
Reviewer Review Type Date Requested Status
Steve Kowalik (community) code Approve
Review via email: mp+155651@code.launchpad.net

Commit message

Fix BuildView.eta to handle suspended jobs, fixing a crash on SourcePackageRecipe:+index when there's a pending binary build in a disabled archive.

Description of the change

BuildView.eta doesn't handle the case where the job is suspended, causing SourcePackageRecipe:+index to crash when there's a pending binary build in a disabled PPA. Fix it to return None instead.

To post a comment you must log in.
Revision history for this message
Steve Kowalik (stevenk) :
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/soyuz/browser/build.py'
2--- lib/lp/soyuz/browser/build.py 2013-02-05 23:43:54 +0000
3+++ lib/lp/soyuz/browser/build.py 2013-03-27 03:40:29 +0000
4@@ -50,7 +50,6 @@
5 InconsistentBuildFarmJobError,
6 ISpecificBuildFarmJobSource,
7 )
8-from lp.buildmaster.interfaces.packagebuild import IPackageBuild
9 from lp.buildmaster.model.buildfarmjob import BuildFarmJob
10 from lp.code.interfaces.sourcepackagerecipebuild import (
11 ISourcePackageRecipeBuildSource,
12@@ -336,10 +335,10 @@
13 queue_record = self.context.buildqueue_record
14 if queue_record.job.status == JobStatus.WAITING:
15 start_time = queue_record.getEstimatedJobStartTime()
16- if start_time is None:
17- return None
18 else:
19 start_time = queue_record.job.date_started
20+ if start_time is None:
21+ return None
22 duration = queue_record.estimated_duration
23 return start_time + duration
24
25
26=== modified file 'lib/lp/soyuz/browser/tests/test_build_views.py'
27--- lib/lp/soyuz/browser/tests/test_build_views.py 2013-01-24 05:50:23 +0000
28+++ lib/lp/soyuz/browser/tests/test_build_views.py 2013-03-27 03:40:29 +0000
29@@ -19,6 +19,7 @@
30 from lp.registry.interfaces.person import IPersonSet
31 from lp.registry.interfaces.pocket import PackagePublishingPocket
32 from lp.registry.interfaces.series import SeriesStatus
33+from lp.services.database.sqlbase import flush_database_caches
34 from lp.services.job.interfaces.job import JobStatus
35 from lp.services.webapp import canonical_url
36 from lp.services.webapp.interfaces import StormRangeFactoryError
37@@ -29,6 +30,7 @@
38 from lp.soyuz.interfaces.packageset import IPackagesetSet
39 from lp.soyuz.model.queue import PackageUploadBuild
40 from lp.testing import (
41+ admin_logged_in,
42 person_logged_in,
43 TestCaseWithFactory,
44 )
45@@ -426,3 +428,15 @@
46 'start': 75,
47 'memo': '["2012-01-01T01:01:01", 0]'})
48 view.setupBuildList()
49+
50+ def test_eta(self):
51+ # BuildView.eta returns a non-None value when it should, or None
52+ # when there's no start time.
53+ build = self.factory.makeBinaryPackageBuild()
54+ build.queueBuild()
55+ self.factory.makeBuilder(processor=build.processor, virtualized=True)
56+ self.assertIsNot(None, create_initialized_view(build, '+index').eta)
57+ with admin_logged_in():
58+ build.archive.disable()
59+ flush_database_caches()
60+ self.assertIs(None, create_initialized_view(build, '+index').eta)