Merge lp:~abentley/launchpad/upload-failure-email-log into lp:launchpad

Proposed by Aaron Bentley
Status: Merged
Approved by: Paul Hummer
Approved revision: no longer in the source branch.
Merged at revision: 11610
Proposed branch: lp:~abentley/launchpad/upload-failure-email-log
Merge into: lp:launchpad
Diff against target: 100 lines (+22/-6)
3 files modified
lib/canonical/launchpad/emailtemplates/build-request.txt (+1/-0)
lib/lp/code/mail/sourcepackagerecipebuild.py (+3/-0)
lib/lp/code/mail/tests/test_sourcepackagerecipebuild.py (+18/-6)
To merge this branch: bzr merge lp:~abentley/launchpad/upload-failure-email-log
Reviewer Review Type Date Requested Status
Paul Hummer (community) Approve
Review via email: mp+36205@code.launchpad.net

Commit message

Fix bug #613958: upload failure emails should include the upload log

Description of the change

= Summary =
This branch fixes bug bug #613958: upload failure emails should include the
upload log.

== Proposed fix ==
Include the upload log in the email

== Pre-implementation notes ==
None

== Implementation details ==
None

== Tests ==
bin/test -t test_generateEmail_upload_failure

== Demo and Q/A ==
Request a build with a debversion that has already been built.
The failure email should include the upload log.

= Launchpad lint =

Checking for conflicts and issues in changed files.

Linting changed files:
  lib/lp/code/mail/sourcepackagerecipebuild.py
  lib/canonical/launchpad/emailtemplates/build-request.txt
  lib/lp/code/mail/tests/test_sourcepackagerecipebuild.py

./lib/lp/code/mail/sourcepackagerecipebuild.py
       5: E303 too many blank lines (3)
./lib/lp/code/mail/tests/test_sourcepackagerecipebuild.py
       5: E303 too many blank lines (3)
      30: W291 trailing whitespace
      39: W291 trailing whitespace
      40: W291 trailing whitespace
      41: W291 trailing whitespace
      42: W291 trailing whitespace
      45: E302 expected 2 blank lines, found 1
      30: Line has trailing whitespace.
      39: Line has trailing whitespace.
      40: Line has trailing whitespace.
      41: Line has trailing whitespace.
      42: Line has trailing whitespace.

To post a comment you must log in.
Revision history for this message
Paul Hummer (rockstar) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/canonical/launchpad/emailtemplates/build-request.txt'
2--- lib/canonical/launchpad/emailtemplates/build-request.txt 2010-07-30 16:24:59 +0000
3+++ lib/canonical/launchpad/emailtemplates/build-request.txt 2010-09-21 20:08:05 +0000
4@@ -4,4 +4,5 @@
5 * Distroseries: %(distroseries)s
6 * Duration: %(duration)s
7 * Build Log: %(log_url)s
8+ * Upload Log: %(upload_log_url)s
9 * Builder: %(builder_url)s
10
11=== modified file 'lib/lp/code/mail/sourcepackagerecipebuild.py'
12--- lib/lp/code/mail/sourcepackagerecipebuild.py 2010-08-20 20:31:18 +0000
13+++ lib/lp/code/mail/sourcepackagerecipebuild.py 2010-09-21 20:08:05 +0000
14@@ -67,6 +67,7 @@
15 'duration': '',
16 'builder_url': '',
17 'build_url': canonical_url(self.build),
18+ 'upload_log_url': '',
19 })
20 if self.build.builder is not None:
21 params['builder_url'] = canonical_url(self.build.builder)
22@@ -75,6 +76,8 @@
23 params['duration'] = duration_formatter.approximateduration()
24 if self.build.log is not None:
25 params['log_url'] = self.build.log.getURL()
26+ if self.build.upload_log is not None:
27+ params['upload_log_url'] = self.build.upload_log_url
28 return params
29
30 def _getFooter(self, params):
31
32=== modified file 'lib/lp/code/mail/tests/test_sourcepackagerecipebuild.py'
33--- lib/lp/code/mail/tests/test_sourcepackagerecipebuild.py 2010-08-27 11:19:54 +0000
34+++ lib/lp/code/mail/tests/test_sourcepackagerecipebuild.py 2010-09-21 20:08:05 +0000
35@@ -27,6 +27,7 @@
36 * Distroseries: distroseries
37 * Duration: five minutes
38 * Build Log: %s
39+ * Upload Log:
40 * Builder: http://launchpad.dev/builders/bob
41 """
42
43@@ -37,6 +38,7 @@
44 * Distroseries: distroseries
45 * Duration:
46 * Build Log:
47+ * Upload Log:
48 * Builder:
49 """
50
51@@ -44,6 +46,11 @@
52
53 layer = LaunchpadFunctionalLayer
54
55+ def makeStatusEmail(self, build):
56+ mailer = SourcePackageRecipeBuildMailer.forStatus(build)
57+ email = build.requester.preferredemail.email
58+ return mailer.generateEmail(email, build.requester)
59+
60 def test_generateEmail(self):
61 """GenerateEmail produces the right headers and body."""
62 person = self.factory.makePerson(name='person')
63@@ -59,9 +66,7 @@
64 naked_build.builder = self.factory.makeBuilder(name='bob')
65 naked_build.log = self.factory.makeLibraryFileAlias()
66 Store.of(build).flush()
67- mailer = SourcePackageRecipeBuildMailer.forStatus(build)
68- email = build.requester.preferredemail.email
69- ctrl = mailer.generateEmail(email, build.requester)
70+ ctrl = self.makeStatusEmail(build)
71 self.assertEqual(
72 u'[recipe build #%d] of ~person recipe in distroseries: '
73 'Successfully built' % (build.id), ctrl.subject)
74@@ -93,9 +98,7 @@
75 recipe=cake, distroseries=secret, archive=pantry,
76 status=BuildStatus.SUPERSEDED)
77 Store.of(build).flush()
78- mailer = SourcePackageRecipeBuildMailer.forStatus(build)
79- email = build.requester.preferredemail.email
80- ctrl = mailer.generateEmail(email, build.requester)
81+ ctrl = self.makeStatusEmail(build)
82 self.assertEqual(
83 u'[recipe build #%d] of ~person recipe in distroseries: '
84 'Build for superseded Source' % (build.id), ctrl.subject)
85@@ -114,6 +117,15 @@
86 self.assertEqual(
87 'SUPERSEDED', ctrl.headers['X-Launchpad-Build-State'])
88
89+ def test_generateEmail_upload_failure(self):
90+ """GenerateEmail works when many fields are NULL."""
91+ build = self.factory.makeSourcePackageRecipeBuild()
92+ removeSecurityProxy(build).upload_log = (
93+ self.factory.makeLibraryFileAlias())
94+ upload_log_fragment = 'Upload Log: %s' % build.upload_log_url
95+ ctrl = self.makeStatusEmail(build)
96+ self.assertTrue(upload_log_fragment in ctrl.body)
97+
98
99 def test_suite():
100 return TestLoader().loadTestsFromName(__name__)