Merge lp:~intellectronica/launchpad/no-patches-message into lp:launchpad

Proposed by Karl Fogel on 2010-02-02
Status: Merged
Approved by: Michael Hudson-Doyle on 2010-02-02
Approved revision: no longer in the source branch.
Merged at revision: not available
Proposed branch: lp:~intellectronica/launchpad/no-patches-message
Merge into: lp:launchpad
Diff against target: 1526 lines (+1204/-11)
10 files modified
database/sampledata/current-dev.sql (+640/-2)
lib/canonical/launchpad/icing/style.css (+1/-1)
lib/lp/bugs/browser/bugtarget.py (+64/-2)
lib/lp/bugs/browser/configure.zcml (+8/-1)
lib/lp/bugs/interfaces/bugtarget.py (+1/-1)
lib/lp/bugs/interfaces/bugtask.py (+4/-0)
lib/lp/bugs/model/bugtarget.py (+1/-1)
lib/lp/bugs/stories/patches-view/patches-view.txt (+325/-0)
lib/lp/bugs/templates/bugtarget-patches.pt (+136/-0)
lib/lp/testing/factory.py (+24/-3)
To merge this branch: bzr merge lp:~intellectronica/launchpad/no-patches-message
Reviewer Review Type Date Requested Status
Martin Albisetti (community) ui 2010-02-02 Approve on 2010-02-03
Michael Hudson-Doyle 2010-02-02 Approve on 2010-02-02
Review via email: mp+18428@code.launchpad.net
To post a comment you must log in.
Karl Fogel (kfogel) wrote :

(See bug #506018 for more on what the "+patches" view does.)

To test this branch, apply this diff to database/sample/current-dev.sql:

  http://people.canonical.com/~kfogel/patches-view/patches-view-current-dev-sql.diff.gz

Then do 'make schema' and 'make run', and visit:

  https://bugs.launchpad.dev/ubuntu/warty/+patches

You should see an infobox message saying:

  "There are no patches associated with Warty at this time."

But if you visit other URLs, like these...

  https://bugs.launchpad.dev/ubuntu/hoary/+patches
  https://bugs.launchpad.dev/patches-view-test/+patches

...you will see patches listed.

Michael Hudson-Doyle (mwhudson) wrote :
Download full text (32.1 KiB)

Hi there,

This branch is pretty cool to see, I'm sure it will be very useful!

I have quite a few comments below though, so I'm going to have to vote "Needs Fixing".

Cheers,
mwh

> === modified file 'lib/lp/bugs/browser/bugtarget.py'
> --- lib/lp/bugs/browser/bugtarget.py 2010-01-29 19:00:47 +0000
> +++ lib/lp/bugs/browser/bugtarget.py 2010-02-02 02:15:24 +0000
> @@ -1,4 +1,4 @@
> -# Copyright 2009 Canonical Ltd. This software is licensed under the
> +# Copyright 2010 Canonical Ltd. This software is licensed under the
> # GNU Affero General Public License version 3 (see the file LICENSE).
>
> """IBugTarget-related browser views."""
> @@ -7,6 +7,7 @@
>
> __all__ = [
> "BugsVHostBreadcrumb",
> + "BugsPatchesView",
> "BugTargetBugListingView",
> "BugTargetBugTagsView",
> "BugTargetBugsView",
> @@ -19,8 +20,10 @@
>
> import cgi
> from cStringIO import StringIO
> +from datetime import datetime
> from email import message_from_string
> from operator import itemgetter
> +from pytz import timezone
> from simplejson import dumps
> import tempfile
> import urllib
> @@ -40,6 +43,7 @@
> from canonical.config import config
> from lp.bugs.browser.bugtask import BugTaskSearchListingView
> from lp.bugs.interfaces.bug import IBug
> +from lp.bugs.interfaces.bugattachment import BugAttachmentType
> from canonical.launchpad.browser.feeds import (
> BugFeedLink, BugTargetLatestBugsFeedLink, FeedsMixin,
> PersonLatestBugsFeedLink)
> @@ -48,7 +52,8 @@
> IBugTarget, IOfficialBugTagTargetPublic, IOfficialBugTagTargetRestricted)
> from lp.bugs.interfaces.bug import IBugSet
> from lp.bugs.interfaces.bugtask import (
> - BugTaskStatus, IBugTaskSet, UNRESOLVED_BUGTASK_STATUSES)
> + BugTaskStatus, IBugTaskSet, UNRESOLVED_BUGTASK_STATUSES,
> + UNRESOLVED_PLUS_FIXRELEASED_BUGTASK_STATUSES)
> from canonical.launchpad.interfaces.launchpad import (
> IHasExternalBugTracker, ILaunchpadUsage)
> from canonical.launchpad.interfaces.hwdb import IHWSubmissionSet
> @@ -73,6 +78,7 @@
> LaunchpadEditFormView, LaunchpadFormView, LaunchpadView, action,
> canonical_url, custom_widget, safe_action)
> from canonical.launchpad.webapp.authorization import check_permission
> +from canonical.launchpad.webapp.batching import BatchNavigator
> from canonical.launchpad.webapp.tales import BugTrackerFormatterAPI
> from canonical.launchpad.validators.name import valid_name_pattern
> from canonical.launchpad.webapp.menu import structured
> @@ -1384,3 +1390,59 @@
> class BugsVHostBreadcrumb(Breadcrumb):
> rootsite = 'bugs'
> text = 'Bugs'
> +
> +
> +class BugsPatchesView(LaunchpadView):
> + """View list of patch attachments associated with bugs."""
> +
> + @property
> + def label(self):
> + """The display label for the view."""
> + return 'Patch attachments in %s' % self.context.displayname
> +
> + def batchedPatchTasks(self):
> + """Return a BatchNavigator for bug tasks with patch attachments."""
> + # XXX: Karl Fogel 2010-02-01 bug=515584: we should be using a
> + # Zope form instead of validating the values by hand in the
> + # code. Doing it the Z...

review: Needs Fixing
Karl Fogel (kfogel) wrote :

Michael, thanks. It turns out all your comments were on changes from my https://code.edge.launchpad.net/~kfogel/launchpad/506018-patch-report branch, which Tom merged into his branch to have the right context in which to make his changes. Abel had already reviewed my branch once, and I'd updated it in response, so you effectively did the second review.

Anyway: Tom's changes are fine, presumably :-).

As for mine, I've addressed most of your concerns. See these revisions:

 * http://bazaar.launchpad.net/~kfogel/launchpad/506018-patch-report/revision/10190
 * http://bazaar.launchpad.net/~kfogel/launchpad/506018-patch-report/revision/10191
 * http://bazaar.launchpad.net/~kfogel/launchpad/506018-patch-report/revision/10192
 * http://bazaar.launchpad.net/~kfogel/launchpad/506018-patch-report/revision/10193
 * http://bazaar.launchpad.net/~kfogel/launchpad/506018-patch-report/revision/10194

Regarding things not addressed in the above commits:

Regarding "XXX: Karl Fogel 2010-02-01 bug=515584", I have not done it yet, because we're under time pressure to get this branch into staging in time for Jorge to use it in a demo. Hence the XXX.

The copyright year changes follow up to other changes already landed.

We still don't have at est for patch view on a project group; I have left an "XXX" about that due to the time constraints. However, I have fixed it so the column name is "Project" (meaning Product) not "Package", when doing patches view on a project group -- thanks for the excellent suggestion.

Regarding your comment about the new factory.doAsUser() method: "Do you really need to commit here? Zope-level users and database transactions are basically orthogonal." I asked Abel, who said: "yes, I think we must commit here. A story test does not access the database directly, but via a web server, which has its own database connection. When we manipulate the database via factroy.makeSomething(), the connetcion of the web server does not 'see' any change, if we don't commit(). Also, I think we get an error message if we don't commit when the web server accesses the DB after a factory.mkeWhatever() call."

Michael Hudson-Doyle (mwhudson) wrote :

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Karl Fogel wrote:
> Michael, thanks. It turns out all your comments were on changes from my https://code.edge.launchpad.net/~kfogel/launchpad/506018-patch-report branch, which Tom merged into his branch to have the right context in which to make his changes. Abel had already reviewed my branch once, and I'd updated it in response, so you effectively did the second review.

Ah, so a prerequisite branch should have been set when proposing the
branch for merging...

> Anyway: Tom's changes are fine, presumably :-).
>
> As for mine, I've addressed most of your concerns. See these revisions:
>
> * http://bazaar.launchpad.net/~kfogel/launchpad/506018-patch-report/revision/10190
> * http://bazaar.launchpad.net/~kfogel/launchpad/506018-patch-report/revision/10191
> * http://bazaar.launchpad.net/~kfogel/launchpad/506018-patch-report/revision/10192
> * http://bazaar.launchpad.net/~kfogel/launchpad/506018-patch-report/revision/10193
> * http://bazaar.launchpad.net/~kfogel/launchpad/506018-patch-report/revision/10194
>
> Regarding things not addressed in the above commits:
>
> Regarding "XXX: Karl Fogel 2010-02-01 bug=515584", I have not done it yet, because we're under time pressure to get this branch into staging in time for Jorge to use it in a demo. Hence the XXX.

Well, OK. I think it would take much much less time than the 2 test
suite runs it takes to get stuff onto staging, but...

> The copyright year changes follow up to other changes already landed.
>
> We still don't have at est for patch view on a project group; I have left an "XXX" about that due to the time constraints. However, I have fixed it so the column name is "Project" (meaning Product) not "Package", when doing patches view on a project group -- thanks for the excellent suggestion.

Thanks!

> Regarding your comment about the new factory.doAsUser() method: "Do you really need to commit here? Zope-level users and database transactions are basically orthogonal." I asked Abel, who said: "yes, I think we must commit here. A story test does not access the database directly, but via a web server, which has its own database connection. When we manipulate the database via factroy.makeSomething(), the connetcion of the web server does not 'see' any change, if we don't commit(). Also, I think we get an error message if we don't commit when the web server accesses the DB after a factory.mkeWhatever() call."

As I think we just established on #launchpad-dev, I think Abel is wrong
in the particulars here, but I guess I don't care all that much.

 vote approve
 merge approved

Cheers,
mwh
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAktohtcACgkQeTTOPm7A7kg4WACgllYxd55yDVeYZMqUSonaJw/0
3+0AoIR/1xBaEnJlOilQ1nLIC1ISjwND
=7jeF
-----END PGP SIGNATURE-----

review: Approve
Karl Fogel (kfogel) wrote :

Michael Hudson <email address hidden> writes:
>Ah, so a prerequisite branch should have been set when proposing the
>branch for merging...

D'oh. Got it now, thanks.

>> Regarding "XXX: Karl Fogel 2010-02-01 bug=515584", I have not done it yet, because we're under time pressure to get this branch into staging in time for Jorge to use it in a demo. Hence the XXX.
>
>Well, OK. I think it would take much much less time than the 2 test
>suite runs it takes to get stuff onto staging, but...

For you, or for a more experienced me, yes. But I'm fully loaded right
now getting the other changes ready in time, and the people I would ask
for help on this are too -- hence deferring the form fix.

>> Regarding your comment about the new factory.doAsUser() method: "Do you really need to commit here? Zope-level users and database transactions are basically orthogonal." I asked Abel, who said: "yes, I think we must commit here. A story test does not access the database directly, but via a web server, which has its own database connection. When we manipulate the database via factroy.makeSomething(), the connetcion of the web server does not 'see' any change, if we don't commit(). Also, I think we get an error message if we don't commit when the web server accesses the DB after a factory.mkeWhatever() call."
>
>As I think we just established on #launchpad-dev, I think Abel is wrong
>in the particulars here, but I guess I don't care all that much.
>
> vote approve
> merge approved

Thanks.

Does that mean if I took out the transaction.commit, everything would
still work? (Would you recommend I do that?)

Michael Hudson-Doyle (mwhudson) wrote :

Karl Fogel wrote:

> Does that mean if I took out the transaction.commit, everything would
> still work? (Would you recommend I do that?)

I would recommend you try it, and if the tests still pass, do it.

Cheers,
mwh

Martin Albisetti (beuno) :
review: Approve (ui)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'database/sampledata/current-dev.sql'
2--- database/sampledata/current-dev.sql 2010-01-18 21:30:20 +0000
3+++ database/sampledata/current-dev.sql 2010-02-02 01:39:18 +0000
4@@ -1356,6 +1356,17 @@
5 INSERT INTO bug (id, datecreated, name, title, description, owner, duplicateof, fti, private, security_related, date_last_updated, date_made_private, who_made_private, date_last_message, number_of_duplicates, message_count, users_affected_count, users_unaffected_count, heat, heat_last_updated) VALUES (13, '2007-07-27 20:00:58.299796', NULL, 'Launchpad CSS and JS is not testible', 'The messages placed on this bug are for eyeball viewing of JS and CSS behaviour.', 12, NULL, NULL, false, false, '2007-07-27 20:29:46.336737', NULL, NULL, NULL, 0, 2, 0, 0, 0, NULL);
6 INSERT INTO bug (id, datecreated, name, title, description, owner, duplicateof, fti, private, security_related, date_last_updated, date_made_private, who_made_private, date_last_message, number_of_duplicates, message_count, users_affected_count, users_unaffected_count, heat, heat_last_updated) VALUES (14, '2007-08-09 11:39:16.836856', NULL, 'jokosher exposes personal details in its actions portlet', 'Jokosher discloses to any passerby the fact that I am single and unwed in its actions portlet. Please fix this blatant violacion of privacy now!!', 63, NULL, NULL, true, true, '2007-08-09 11:39:16.836856', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
7 INSERT INTO bug (id, datecreated, name, title, description, owner, duplicateof, fti, private, security_related, date_last_updated, date_made_private, who_made_private, date_last_message, number_of_duplicates, message_count, users_affected_count, users_unaffected_count, heat, heat_last_updated) VALUES (15, '2007-12-18 16:30:19.103679', NULL, 'Nonsensical bugs are useless', 'Like this one, natch.', 16, NULL, NULL, false, false, '2007-12-18 16:31:34.972893', NULL, NULL, '2007-12-18 16:31:34.790641', 0, 7, 0, 0, 0, NULL);
8+INSERT INTO bug (id, datecreated, name, title, description, owner, duplicateof, fti, private, security_related, date_last_updated, date_made_private, who_made_private, date_last_message, number_of_duplicates, message_count, users_affected_count, users_unaffected_count, heat, heat_last_updated) VALUES (16, '2010-01-12 20:45:21.127561', NULL, 'Bug A: No attachments at all.', 'Enough said.', 12, NULL, NULL, false, false, '2010-01-13 17:22:11.58624', NULL, NULL, '2010-01-12 20:45:21.127561', 0, 1, 1, 0, 0, NULL);
9+INSERT INTO bug (id, datecreated, name, title, description, owner, duplicateof, fti, private, security_related, date_last_updated, date_made_private, who_made_private, date_last_message, number_of_duplicates, message_count, users_affected_count, users_unaffected_count, heat, heat_last_updated) VALUES (17, '2010-01-12 22:22:46.153194', NULL, 'Bug B: one non-patch attachment.', 'This is the second bug.', 12, NULL, NULL, false, false, '2010-01-13 17:22:45.081926', NULL, NULL, '2010-01-12 22:28:27.800017', 0, 2, 1, 0, 0, NULL);
10+INSERT INTO bug (id, datecreated, name, title, description, owner, duplicateof, fti, private, security_related, date_last_updated, date_made_private, who_made_private, date_last_message, number_of_duplicates, message_count, users_affected_count, users_unaffected_count, heat, heat_last_updated) VALUES (18, '2010-01-13 14:16:19.911349', NULL, 'Bug C: one patch attachment.', 'This is the third bug in the project, and it has the first attachment that is a patch.', 12, NULL, NULL, false, false, '2010-01-27 22:30:14.500892', NULL, NULL, '2010-01-13 14:16:19.911349', 0, 2, 1, 0, 0, NULL);
11+INSERT INTO bug (id, datecreated, name, title, description, owner, duplicateof, fti, private, security_related, date_last_updated, date_made_private, who_made_private, date_last_message, number_of_duplicates, message_count, users_affected_count, users_unaffected_count, heat, heat_last_updated) VALUES (19, '2010-01-13 14:18:01.028701', NULL, 'Bug D: one patch attachment (really an image file).', 'Bug number four, with patch attachment.
12+
13+', 12, NULL, NULL, false, false, '2010-01-13 17:27:10.529755', NULL, NULL, '2010-01-13 14:18:01.028701', 0, 2, 1, 0, 0, NULL);
14+INSERT INTO bug (id, datecreated, name, title, description, owner, duplicateof, fti, private, security_related, date_last_updated, date_made_private, who_made_private, date_last_message, number_of_duplicates, message_count, users_affected_count, users_unaffected_count, heat, heat_last_updated) VALUES (20, '2010-01-13 14:19:01.243841', NULL, 'Bug E: no attachments.', 'Bug five has no attachment.', 12, NULL, NULL, false, false, '2010-01-13 17:23:49.957979', NULL, NULL, '2010-01-13 14:19:01.243841', 0, 1, 1, 0, 0, NULL);
15+INSERT INTO bug (id, datecreated, name, title, description, owner, duplicateof, fti, private, security_related, date_last_updated, date_made_private, who_made_private, date_last_message, number_of_duplicates, message_count, users_affected_count, users_unaffected_count, heat, heat_last_updated) VALUES (21, '2010-01-13 14:20:12.307283', NULL, 'Bug F: one non-patch attachment (same image that Bug D calls a patch).', 'Bug six has a non-patch attachment (but it''s the same as an earlier bug called a patch attachment).', 12, NULL, NULL, false, false, '2010-01-13 17:27:33.740526', NULL, NULL, '2010-01-13 14:20:12.307283', 0, 2, 1, 0, 0, NULL);
16+INSERT INTO bug (id, datecreated, name, title, description, owner, duplicateof, fti, private, security_related, date_last_updated, date_made_private, who_made_private, date_last_message, number_of_duplicates, message_count, users_affected_count, users_unaffected_count, heat, heat_last_updated) VALUES (22, '2010-01-13 14:22:45.617948', NULL, 'Bug G: one patch attachment.', 'Bug seven has a patch attachment.', 12, NULL, NULL, false, false, '2010-01-13 17:27:52.792443', NULL, NULL, '2010-01-13 14:22:45.617948', 0, 2, 1, 0, 0, NULL);
17+INSERT INTO bug (id, datecreated, name, title, description, owner, duplicateof, fti, private, security_related, date_last_updated, date_made_private, who_made_private, date_last_message, number_of_duplicates, message_count, users_affected_count, users_unaffected_count, heat, heat_last_updated) VALUES (23, '2010-01-13 18:23:45.763802', NULL, 'Bug H: two attachments, one patch, one not.', 'This is Bug H. It has two attachments. One is a patch, the other is not.', 12, NULL, NULL, false, false, '2010-01-13 18:27:05.39843', NULL, NULL, '2010-01-13 18:27:05.201874', 0, 3, 1, 0, 0, NULL);
18+INSERT INTO bug (id, datecreated, name, title, description, owner, duplicateof, fti, private, security_related, date_last_updated, date_made_private, who_made_private, date_last_message, number_of_duplicates, message_count, users_affected_count, users_unaffected_count, heat, heat_last_updated) VALUES (24, '2010-01-13 18:29:46.39858', NULL, 'Bug I: six attachments (three patches, three non-patches).', 'This is Bug I. It has six attachments, of which three are patches.', 12, NULL, NULL, false, false, '2010-01-22 16:28:30.566586', NULL, NULL, '2010-01-13 18:34:21.130592', 0, 7, 1, 0, 0, NULL);
19
20
21 ALTER TABLE bug ENABLE TRIGGER ALL;
22@@ -1399,6 +1410,68 @@
23 INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (34, 15, '2007-12-18 16:30:19.103679', 16, 'bug', NULL, NULL, 'added bug');
24 INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (35, 15, '2007-12-18 16:30:47.889614', 16, 'bug', NULL, NULL, 'assigned to thunderbird');
25 INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (36, 15, '2007-12-18 16:31:34.790641', 62, 'thunderbird: status', 'Unknown', 'New', NULL);
26+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (37, 16, '2010-01-12 20:45:21.127561', 12, 'bug', NULL, NULL, 'added bug');
27+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (38, 17, '2010-01-12 22:22:46.153194', 12, 'bug', NULL, NULL, 'added bug');
28+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (39, 17, '2010-01-12 22:28:27.800017', 12, 'attachment added', NULL, 'bigjools.png http://launchpad.dev:58080/93/bigjools.png', NULL);
29+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (40, 18, '2010-01-13 14:16:19.911349', 12, 'bug', NULL, NULL, 'added bug');
30+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (41, 18, '2010-01-13 14:16:19.911349', 12, 'attachment added', NULL, 'test patch http://launchpad.dev:58080/94/test-patch.txt', NULL);
31+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (42, 19, '2010-01-13 14:18:01.028701', 12, 'bug', NULL, NULL, 'added bug');
32+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (43, 19, '2010-01-13 14:18:01.028701', 12, 'attachment added', NULL, 'An image file. Let''s see what mime type it gets. http://launchpad.dev:58080/95/nobody.png', NULL);
33+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (44, 19, '2010-01-13 14:18:27.630313', 12, 'summary', 'The fourth bug has a non-patch attachment.', 'The fourth bug has a attachment.', NULL);
34+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (45, 19, '2010-01-13 14:18:34.066926', 12, 'description', 'Bug number four, with a non-patch attachment.', 'Bug number four, with patch attachment.
35+
36+', NULL);
37+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (46, 20, '2010-01-13 14:19:01.243841', 12, 'bug', NULL, NULL, 'added bug');
38+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (47, 21, '2010-01-13 14:20:12.307283', 12, 'bug', NULL, NULL, 'added bug');
39+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (48, 21, '2010-01-13 14:20:12.307283', 12, 'attachment added', NULL, 'An image, this time not as a patch. http://launchpad.dev:58080/96/nobody.png', NULL);
40+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (49, 22, '2010-01-13 14:22:45.617948', 12, 'bug', NULL, NULL, 'added bug');
41+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (50, 22, '2010-01-13 14:22:45.617948', 12, 'attachment added', NULL, 'Some patch. http://launchpad.dev:58080/97/ignore-this.patch', NULL);
42+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (51, 19, '2010-01-13 14:26:47.46993', 12, 'summary', 'The fourth bug has a attachment.', 'The fourth bug has a patch attachment.', NULL);
43+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (52, 16, '2010-01-13 17:21:46.537052', 12, 'summary', 'The first bug has no patch attachment.', 'No attachments at all.', NULL);
44+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (53, 16, '2010-01-13 17:22:11.382144', 12, 'summary', 'No attachments at all.', 'Bug A: No attachments at all.', NULL);
45+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (54, 17, '2010-01-13 17:22:24.925081', 12, 'summary', 'The second bug has the first attachment, but it''s not a patch.', 'Bug B: non-patch attachment.', NULL);
46+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (55, 18, '2010-01-13 17:22:37.743448', 12, 'summary', 'The third bug has the first patch attachment.', 'Bug C: one patch attachment.', NULL);
47+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (56, 17, '2010-01-13 17:22:44.88561', 12, 'summary', 'Bug B: non-patch attachment.', 'Bug B: one non-patch attachment.', NULL);
48+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (57, 20, '2010-01-13 17:23:32.153195', 12, 'summary', 'Bug number five has no attachment.', 'Bug D: no attachments.', NULL);
49+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (58, 20, '2010-01-13 17:23:49.760696', 12, 'summary', 'Bug D: no attachments.', 'Bug E: no attachments.', NULL);
50+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (59, 19, '2010-01-13 17:27:10.325536', 12, 'summary', 'The fourth bug has a patch attachment.', 'Bug D: one patch attachment (really an image file).', NULL);
51+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (60, 21, '2010-01-13 17:27:28.108308', 12, 'summary', 'Bug six has a non-patch attachment (but same as earlier was called a patch).', 'Bug F: one non-patch attachment (same image thaht Bug D calls a patch).', NULL);
52+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (61, 21, '2010-01-13 17:27:33.53256', 12, 'summary', 'Bug F: one non-patch attachment (same image thaht Bug D calls a patch).', 'Bug F: one non-patch attachment (same image that Bug D calls a patch).', NULL);
53+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (62, 22, '2010-01-13 17:27:52.536624', 12, 'summary', 'Bug seven has a patch attachment.', 'Bug G: one patch attachment.', NULL);
54+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (63, 23, '2010-01-13 18:23:45.763802', 12, 'bug', NULL, NULL, 'added bug');
55+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (64, 23, '2010-01-13 18:26:37.318632', 12, 'attachment added', NULL, 'Patch attachment to Bug H. http://launchpad.dev:58080/98/another-diff.txt', NULL);
56+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (65, 23, '2010-01-13 18:27:05.201874', 12, 'attachment added', NULL, 'Non-patch attachment to Bug H (same as patch attachment, btw). http://launchpad.dev:58080/99/another-diff.txt', NULL);
57+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (66, 24, '2010-01-13 18:29:46.39858', 12, 'bug', NULL, NULL, 'added bug');
58+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (67, 24, '2010-01-13 18:29:46.39858', 12, 'attachment added', NULL, 'first patch attachment to Bug I http://launchpad.dev:58080/100/another-diff.txt', NULL);
59+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (68, 24, '2010-01-13 18:30:30.467005', 12, 'attachment added', NULL, 'second patch attachment to bug I http://launchpad.dev:58080/101/test-patch.txt', NULL);
60+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (69, 24, '2010-01-13 18:31:54.707866', 12, 'attachment added', NULL, 'first non-patch attachment to Bug I http://launchpad.dev:58080/102/barcelona-laundry.jpg', NULL);
61+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (70, 24, '2010-01-13 18:32:47.18092', 12, 'attachment added', NULL, 'second non-patch attachment to Bug I http://launchpad.dev:58080/103/esther-helen-exley.jpg', NULL);
62+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (71, 24, '2010-01-13 18:33:38.232304', 12, 'attachment added', NULL, 'third patch attachment to Bug I http://launchpad.dev:58080/104/rf-setup-patch.txt', NULL);
63+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (72, 24, '2010-01-13 18:34:21.130592', 12, 'attachment added', NULL, 'third non-patch attachment to Bug I http://launchpad.dev:58080/105/vonage-cancellation.pdf', NULL);
64+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (73, 18, '2010-01-20 21:17:00.883889', 12, 'bug task added', NULL, 'firefox', NULL);
65+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (74, 18, '2010-01-20 21:18:49.833838', 12, 'bug task added', NULL, 'cdrkit (Ubuntu)', NULL);
66+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (75, 24, '2010-01-20 21:20:10.669476', 12, 'bug task added', NULL, 'gentoo', NULL);
67+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (76, 24, '2010-01-20 21:20:35.930261', 12, 'bug task added', NULL, 'libstdc++ (Ubuntu)', NULL);
68+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (77, 24, '2010-01-20 21:21:09.866741', 12, 'bug task added', NULL, 'firefox', NULL);
69+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (78, 24, '2010-01-20 21:21:33.597745', 12, 'bug task added', NULL, 'evolution', NULL);
70+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (79, 18, '2010-01-20 21:22:54.717976', 12, 'firefox: importance', 'Undecided', 'Wishlist', NULL);
71+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (80, 24, '2010-01-20 21:23:26.85161', 12, 'evolution: importance', 'Undecided', 'Low', NULL);
72+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (81, 24, '2010-01-20 21:23:29.895717', 12, 'firefox: importance', 'Undecided', 'Wishlist', NULL);
73+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (82, 24, '2010-01-20 21:23:39.33682', 12, 'patches-view-test: importance', 'Undecided', 'High', NULL);
74+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (83, 24, '2010-01-20 21:23:52.874688', 12, 'patches-view-test: status', 'New', 'Incomplete', NULL);
75+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (84, 24, '2010-01-20 21:23:57.506344', 12, 'evolution: status', 'New', 'Confirmed', NULL);
76+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (85, 18, '2010-01-20 21:41:58.449444', 12, 'cdrkit (Ubuntu): status', 'New', 'Confirmed', NULL);
77+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (86, 18, '2010-01-21 15:38:51.601715', 12, 'bug task added', NULL, 'alsa-utils (Ubuntu)', NULL);
78+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (87, 18, '2010-01-21 15:40:28.504905', 12, 'bug task added', NULL, 'at (Ubuntu)', NULL);
79+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (88, 24, '2010-01-22 16:28:29.7187', 16, 'libstdc++ (Ubuntu): importance', 'Undecided', 'Critical', NULL);
80+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (89, 24, '2010-01-22 17:23:55.406526', 16, 'nominated for series', NULL, 'patches-view-test/trunk', NULL);
81+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (90, 24, '2010-01-22 17:23:55.406526', 16, 'bug task added', NULL, 'patches-view-test/trunk', NULL);
82+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (91, 18, '2010-01-26 20:13:16.909946', 16, 'nominated for series', NULL, 'Ubuntu Hoary', NULL);
83+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (92, 18, '2010-01-26 20:13:16.909946', 16, 'bug task added', NULL, 'alsa-utils (Ubuntu Hoary)', NULL);
84+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (93, 18, '2010-01-26 20:13:16.909946', 16, 'bug task added', NULL, 'at (Ubuntu Hoary)', NULL);
85+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (94, 18, '2010-01-26 20:13:16.909946', 16, 'bug task added', NULL, 'cdrkit (Ubuntu Hoary)', NULL);
86+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (95, 18, '2010-01-27 22:19:05.667291', 16, 'patches-view-test: assignee', NULL, 'Foo Bar (name16)', NULL);
87+INSERT INTO bugactivity (id, bug, datechanged, person, whatchanged, oldvalue, newvalue, message) VALUES (96, 18, '2010-01-27 22:30:14.068436', 16, 'at (Ubuntu Hoary): assignee', NULL, 'Foo Bar (name16)', NULL);
88
89
90 ALTER TABLE bugactivity ENABLE TRIGGER ALL;
91@@ -1406,6 +1479,15 @@
92
93 ALTER TABLE bugaffectsperson DISABLE TRIGGER ALL;
94
95+INSERT INTO bugaffectsperson (id, bug, person, affected) VALUES (1, 16, 12, true);
96+INSERT INTO bugaffectsperson (id, bug, person, affected) VALUES (2, 17, 12, true);
97+INSERT INTO bugaffectsperson (id, bug, person, affected) VALUES (3, 18, 12, true);
98+INSERT INTO bugaffectsperson (id, bug, person, affected) VALUES (4, 19, 12, true);
99+INSERT INTO bugaffectsperson (id, bug, person, affected) VALUES (5, 20, 12, true);
100+INSERT INTO bugaffectsperson (id, bug, person, affected) VALUES (6, 21, 12, true);
101+INSERT INTO bugaffectsperson (id, bug, person, affected) VALUES (7, 22, 12, true);
102+INSERT INTO bugaffectsperson (id, bug, person, affected) VALUES (8, 23, 12, true);
103+INSERT INTO bugaffectsperson (id, bug, person, affected) VALUES (9, 24, 12, true);
104
105
106 ALTER TABLE bugaffectsperson ENABLE TRIGGER ALL;
107@@ -1413,6 +1495,19 @@
108
109 ALTER TABLE bugattachment DISABLE TRIGGER ALL;
110
111+INSERT INTO bugattachment (id, message, name, title, libraryfile, bug, type) VALUES (1, 52, NULL, 'bigjools.png', 93, 17, 2);
112+INSERT INTO bugattachment (id, message, name, title, libraryfile, bug, type) VALUES (2, 55, NULL, 'test patch', 94, 18, 1);
113+INSERT INTO bugattachment (id, message, name, title, libraryfile, bug, type) VALUES (3, 58, NULL, 'An image file. Let''s see what mime type it gets.', 95, 19, 1);
114+INSERT INTO bugattachment (id, message, name, title, libraryfile, bug, type) VALUES (4, 64, NULL, 'An image, this time not as a patch.', 96, 21, 2);
115+INSERT INTO bugattachment (id, message, name, title, libraryfile, bug, type) VALUES (5, 67, NULL, 'Some patch.', 97, 22, 1);
116+INSERT INTO bugattachment (id, message, name, title, libraryfile, bug, type) VALUES (6, 82, NULL, 'Patch attachment to Bug H.', 98, 23, 1);
117+INSERT INTO bugattachment (id, message, name, title, libraryfile, bug, type) VALUES (7, 84, NULL, 'Non-patch attachment to Bug H (same as patch attachment, btw).', 99, 23, 2);
118+INSERT INTO bugattachment (id, message, name, title, libraryfile, bug, type) VALUES (8, 87, NULL, 'first patch attachment to Bug I', 100, 24, 1);
119+INSERT INTO bugattachment (id, message, name, title, libraryfile, bug, type) VALUES (9, 89, NULL, 'second patch attachment to bug I', 101, 24, 1);
120+INSERT INTO bugattachment (id, message, name, title, libraryfile, bug, type) VALUES (10, 91, NULL, 'first non-patch attachment to Bug I', 102, 24, 2);
121+INSERT INTO bugattachment (id, message, name, title, libraryfile, bug, type) VALUES (11, 93, NULL, 'second non-patch attachment to Bug I', 103, 24, 2);
122+INSERT INTO bugattachment (id, message, name, title, libraryfile, bug, type) VALUES (12, 95, NULL, 'third patch attachment to Bug I', 104, 24, 1);
123+INSERT INTO bugattachment (id, message, name, title, libraryfile, bug, type) VALUES (13, 97, NULL, 'third non-patch attachment to Bug I', 105, 24, 2);
124
125
126 ALTER TABLE bugattachment ENABLE TRIGGER ALL;
127@@ -1475,6 +1570,28 @@
128 INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (34, 15, 47, 11, '<20050517202044.GA23231@spring.luon.net>', true);
129 INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (35, 15, 48, 11, '<20050617140011.GA15638@piware.de>', true);
130 INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (36, 15, 49, 11, '<42BD2E36.9090809@gmx.de>', true);
131+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (37, 16, 50, NULL, NULL, true);
132+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (38, 17, 51, NULL, NULL, true);
133+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (39, 17, 52, NULL, NULL, true);
134+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (40, 18, 54, NULL, NULL, true);
135+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (41, 18, 55, NULL, NULL, true);
136+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (42, 19, 57, NULL, NULL, true);
137+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (43, 19, 58, NULL, NULL, true);
138+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (44, 20, 62, NULL, NULL, true);
139+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (45, 21, 63, NULL, NULL, true);
140+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (46, 21, 64, NULL, NULL, true);
141+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (47, 22, 66, NULL, NULL, true);
142+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (48, 22, 67, NULL, NULL, true);
143+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (49, 23, 81, NULL, NULL, true);
144+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (50, 23, 82, NULL, NULL, true);
145+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (51, 23, 84, NULL, NULL, true);
146+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (52, 24, 86, NULL, NULL, true);
147+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (53, 24, 87, NULL, NULL, true);
148+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (54, 24, 89, NULL, NULL, true);
149+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (55, 24, 91, NULL, NULL, true);
150+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (56, 24, 93, NULL, NULL, true);
151+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (57, 24, 95, NULL, NULL, true);
152+INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (58, 24, 97, NULL, NULL, true);
153
154
155 ALTER TABLE bugmessage ENABLE TRIGGER ALL;
156@@ -1486,6 +1603,8 @@
157 INSERT INTO bugnomination (id, bug, distroseries, productseries, status, date_created, date_decided, owner, decider) VALUES (2, 1, 3, NULL, 10, '2006-08-21 22:21:14.60328', NULL, 52, NULL);
158 INSERT INTO bugnomination (id, bug, distroseries, productseries, status, date_created, date_decided, owner, decider) VALUES (3, 2, 3, NULL, 20, '2006-08-21 22:23:08.163936', '2006-08-21 22:23:08.332055', 1, 1);
159 INSERT INTO bugnomination (id, bug, distroseries, productseries, status, date_created, date_decided, owner, decider) VALUES (4, 5, NULL, 2, 20, '2007-01-04 15:00:50.431687', '2007-01-04 15:00:50.552021', 16, 16);
160+INSERT INTO bugnomination (id, bug, distroseries, productseries, status, date_created, date_decided, owner, decider) VALUES (5, 24, NULL, 32, 20, '2010-01-22 17:23:55.406526', '2010-01-22 17:23:55.588315', 16, 16);
161+INSERT INTO bugnomination (id, bug, distroseries, productseries, status, date_created, date_decided, owner, decider) VALUES (6, 18, 3, NULL, 20, '2010-01-26 20:13:16.909946', '2010-01-26 20:13:17.17565', 16, 16);
162
163
164 ALTER TABLE bugnomination ENABLE TRIGGER ALL;
165@@ -1493,6 +1612,77 @@
166
167 ALTER TABLE bugnotification DISABLE TRIGGER ALL;
168
169+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (1, 16, 50, true, NULL);
170+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (2, 17, 51, true, NULL);
171+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (3, 17, 52, true, NULL);
172+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (4, 17, 53, false, NULL);
173+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (5, 18, 54, true, NULL);
174+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (6, 18, 55, true, NULL);
175+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (7, 18, 56, false, NULL);
176+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (8, 19, 57, true, NULL);
177+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (9, 19, 58, true, NULL);
178+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (10, 19, 59, false, NULL);
179+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (11, 19, 60, false, NULL);
180+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (12, 19, 61, false, NULL);
181+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (13, 20, 62, true, NULL);
182+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (14, 21, 63, true, NULL);
183+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (15, 21, 64, true, NULL);
184+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (16, 21, 65, false, NULL);
185+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (17, 22, 66, true, NULL);
186+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (18, 22, 67, true, NULL);
187+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (19, 22, 68, false, NULL);
188+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (20, 19, 69, false, NULL);
189+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (21, 16, 70, false, NULL);
190+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (22, 16, 71, false, NULL);
191+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (23, 17, 72, false, NULL);
192+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (24, 18, 73, false, NULL);
193+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (25, 17, 74, false, NULL);
194+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (26, 20, 75, false, NULL);
195+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (27, 20, 76, false, NULL);
196+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (28, 19, 77, false, NULL);
197+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (29, 21, 78, false, NULL);
198+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (30, 21, 79, false, NULL);
199+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (31, 22, 80, false, NULL);
200+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (32, 23, 81, true, NULL);
201+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (33, 23, 82, true, NULL);
202+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (34, 23, 83, false, NULL);
203+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (35, 23, 84, true, NULL);
204+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (36, 23, 85, false, NULL);
205+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (37, 24, 86, true, NULL);
206+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (38, 24, 87, true, NULL);
207+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (39, 24, 88, false, NULL);
208+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (40, 24, 89, true, NULL);
209+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (41, 24, 90, false, NULL);
210+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (42, 24, 91, true, NULL);
211+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (43, 24, 92, false, NULL);
212+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (44, 24, 93, true, NULL);
213+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (45, 24, 94, false, NULL);
214+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (46, 24, 95, true, NULL);
215+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (47, 24, 96, false, NULL);
216+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (48, 24, 97, true, NULL);
217+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (49, 24, 98, false, NULL);
218+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (50, 18, 99, false, NULL);
219+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (51, 18, 100, false, NULL);
220+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (52, 24, 101, false, NULL);
221+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (53, 24, 102, false, NULL);
222+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (54, 24, 103, false, NULL);
223+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (55, 24, 104, false, NULL);
224+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (56, 18, 105, false, NULL);
225+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (57, 24, 106, false, NULL);
226+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (58, 24, 107, false, NULL);
227+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (59, 24, 108, false, NULL);
228+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (60, 24, 109, false, NULL);
229+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (61, 24, 110, false, NULL);
230+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (62, 18, 111, false, NULL);
231+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (63, 18, 112, false, NULL);
232+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (64, 18, 113, false, NULL);
233+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (65, 24, 114, false, NULL);
234+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (66, 24, 115, false, NULL);
235+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (67, 18, 116, false, NULL);
236+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (68, 18, 117, false, NULL);
237+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (69, 18, 118, false, NULL);
238+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (70, 18, 119, false, NULL);
239+INSERT INTO bugnotification (id, bug, message, is_comment, date_emailed) VALUES (71, 18, 120, false, NULL);
240
241
242 ALTER TABLE bugnotification ENABLE TRIGGER ALL;
243@@ -1514,6 +1704,110 @@
244
245 ALTER TABLE bugnotificationrecipient DISABLE TRIGGER ALL;
246
247+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (1, 1, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
248+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (2, 2, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
249+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (3, 3, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
250+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (4, 4, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
251+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (5, 5, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
252+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (6, 6, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
253+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (7, 7, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
254+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (8, 8, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
255+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (9, 9, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
256+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (10, 10, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
257+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (11, 11, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
258+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (12, 12, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
259+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (13, 13, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
260+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (14, 14, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
261+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (15, 15, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
262+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (16, 16, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
263+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (17, 17, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
264+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (18, 18, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
265+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (19, 19, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
266+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (20, 20, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
267+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (21, 21, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
268+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (22, 22, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
269+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (23, 23, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
270+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (24, 24, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
271+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (25, 25, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
272+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (26, 26, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
273+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (27, 27, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
274+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (28, 28, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
275+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (29, 29, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
276+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (30, 30, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
277+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (31, 31, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
278+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (32, 32, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
279+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (33, 33, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
280+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (34, 34, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
281+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (35, 35, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
282+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (36, 36, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
283+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (37, 37, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
284+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (38, 38, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
285+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (39, 39, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
286+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (40, 40, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
287+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (41, 41, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
288+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (42, 42, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
289+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (43, 43, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
290+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (44, 44, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
291+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (45, 45, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
292+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (46, 46, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
293+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (47, 47, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
294+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (48, 48, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
295+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (49, 49, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
296+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (50, 50, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
297+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (51, 51, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
298+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (52, 51, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
299+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (53, 52, 1, 'Registrant (Gentoo)', 'You received this bug notification because you are the registrant for Gentoo.');
300+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (54, 52, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
301+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (55, 53, 1, 'Registrant (Gentoo)', 'You received this bug notification because you are the registrant for Gentoo.');
302+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (56, 53, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
303+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (57, 53, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
304+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (58, 54, 1, 'Registrant (Gentoo)', 'You received this bug notification because you are the registrant for Gentoo.');
305+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (59, 54, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
306+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (60, 54, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
307+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (61, 55, 1, 'Registrant (Gentoo)', 'You received this bug notification because you are the registrant for Gentoo.');
308+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (62, 55, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
309+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (63, 55, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
310+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (64, 56, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
311+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (65, 56, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
312+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (66, 57, 1, 'Registrant (Gentoo)', 'You received this bug notification because you are the registrant for Gentoo.');
313+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (67, 57, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
314+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (68, 57, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
315+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (69, 58, 1, 'Registrant (Gentoo)', 'You received this bug notification because you are the registrant for Gentoo.');
316+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (70, 58, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
317+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (71, 58, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
318+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (72, 59, 1, 'Registrant (Gentoo)', 'You received this bug notification because you are the registrant for Gentoo.');
319+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (73, 59, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
320+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (74, 59, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
321+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (75, 60, 1, 'Registrant (Gentoo)', 'You received this bug notification because you are the registrant for Gentoo.');
322+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (76, 60, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
323+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (77, 60, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
324+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (78, 61, 1, 'Registrant (Gentoo)', 'You received this bug notification because you are the registrant for Gentoo.');
325+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (79, 61, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
326+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (80, 61, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
327+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (81, 62, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
328+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (82, 62, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
329+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (83, 63, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
330+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (84, 63, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
331+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (85, 64, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
332+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (86, 64, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
333+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (87, 65, 1, 'Registrant (Gentoo)', 'You received this bug notification because you are the registrant for Gentoo.');
334+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (88, 65, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
335+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (89, 65, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
336+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (90, 66, 1, 'Registrant (Gentoo)', 'You received this bug notification because you are the registrant for Gentoo.');
337+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (91, 66, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
338+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (92, 66, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
339+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (93, 67, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
340+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (94, 67, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
341+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (95, 68, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
342+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (96, 68, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
343+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (97, 69, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
344+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (98, 69, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
345+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (99, 70, 16, 'Assignee', 'You received this bug notification because you are a bug assignee.');
346+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (100, 70, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
347+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (101, 70, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
348+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (102, 71, 16, 'Assignee', 'You received this bug notification because you are a bug assignee.');
349+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (103, 71, 12, 'Subscriber', 'You received this bug notification because you are a direct subscriber of the bug.');
350+INSERT INTO bugnotificationrecipient (id, bug_notification, person, reason_header, reason_body) VALUES (104, 71, 17, 'Registrant (Ubuntu) @ubuntu-team', 'You received this bug notification because you are a member of Ubuntu Team, which is the registrant for Ubuntu.');
351
352
353 ALTER TABLE bugnotificationrecipient ENABLE TRIGGER ALL;
354@@ -1557,6 +1851,15 @@
355 INSERT INTO bugsubscription (id, person, bug, date_created, subscribed_by) VALUES (15, 63, 14, '2007-08-09 11:39:16.836856', 65);
356 INSERT INTO bugsubscription (id, person, bug, date_created, subscribed_by) VALUES (16, 14, 14, '2007-08-09 11:39:16.836856', 65);
357 INSERT INTO bugsubscription (id, person, bug, date_created, subscribed_by) VALUES (17, 16, 15, '2007-12-18 16:30:19.103679', 65);
358+INSERT INTO bugsubscription (id, person, bug, date_created, subscribed_by) VALUES (18, 12, 16, '2010-01-12 20:45:21.127561', 12);
359+INSERT INTO bugsubscription (id, person, bug, date_created, subscribed_by) VALUES (19, 12, 17, '2010-01-12 22:22:46.153194', 12);
360+INSERT INTO bugsubscription (id, person, bug, date_created, subscribed_by) VALUES (20, 12, 18, '2010-01-13 14:16:19.911349', 12);
361+INSERT INTO bugsubscription (id, person, bug, date_created, subscribed_by) VALUES (21, 12, 19, '2010-01-13 14:18:01.028701', 12);
362+INSERT INTO bugsubscription (id, person, bug, date_created, subscribed_by) VALUES (22, 12, 20, '2010-01-13 14:19:01.243841', 12);
363+INSERT INTO bugsubscription (id, person, bug, date_created, subscribed_by) VALUES (23, 12, 21, '2010-01-13 14:20:12.307283', 12);
364+INSERT INTO bugsubscription (id, person, bug, date_created, subscribed_by) VALUES (24, 12, 22, '2010-01-13 14:22:45.617948', 12);
365+INSERT INTO bugsubscription (id, person, bug, date_created, subscribed_by) VALUES (25, 12, 23, '2010-01-13 18:23:45.763802', 12);
366+INSERT INTO bugsubscription (id, person, bug, date_created, subscribed_by) VALUES (26, 12, 24, '2010-01-13 18:29:46.39858', 12);
367
368
369 ALTER TABLE bugsubscription ENABLE TRIGGER ALL;
370@@ -1607,6 +1910,27 @@
371 INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (33, 14, 20, NULL, NULL, NULL, NULL, 10, NULL, 5, NULL, NULL, '2007-08-09 11:39:16.836856', 63, NULL, NULL, NULL, NULL, 'Jokosher', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
372 INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (34, 15, 22, NULL, NULL, NULL, NULL, 10, NULL, 5, NULL, NULL, '2007-12-18 16:30:19.103679', 16, NULL, NULL, NULL, NULL, 'Redfish', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
373 INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (35, 15, 8, NULL, NULL, NULL, NULL, 10, NULL, 999, NULL, NULL, '2007-12-18 16:30:47.889614', 16, NULL, 11, NULL, NULL, 'Mozilla Thunderbird', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
374+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (36, 16, 30, NULL, NULL, NULL, NULL, 10, NULL, 5, NULL, NULL, '2010-01-12 20:45:21.127561', 12, NULL, NULL, NULL, NULL, 'Patches View Test', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
375+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (37, 17, 30, NULL, NULL, NULL, NULL, 10, NULL, 5, NULL, NULL, '2010-01-12 22:22:46.153194', 12, NULL, NULL, NULL, NULL, 'Patches View Test', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
376+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (38, 18, 30, NULL, NULL, NULL, NULL, 10, NULL, 5, 16, '2010-01-27 22:19:06.095198', '2010-01-13 14:16:19.911349', 12, NULL, NULL, NULL, NULL, 'Patches View Test', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
377+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (39, 19, 30, NULL, NULL, NULL, NULL, 10, NULL, 5, NULL, NULL, '2010-01-13 14:18:01.028701', 12, NULL, NULL, NULL, NULL, 'Patches View Test', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
378+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (40, 20, 30, NULL, NULL, NULL, NULL, 10, NULL, 5, NULL, NULL, '2010-01-13 14:19:01.243841', 12, NULL, NULL, NULL, NULL, 'Patches View Test', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
379+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (41, 21, 30, NULL, NULL, NULL, NULL, 10, NULL, 5, NULL, NULL, '2010-01-13 14:20:12.307283', 12, NULL, NULL, NULL, NULL, 'Patches View Test', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
380+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (42, 22, 30, NULL, NULL, NULL, NULL, 10, NULL, 5, NULL, NULL, '2010-01-13 14:22:45.617948', 12, NULL, NULL, NULL, NULL, 'Patches View Test', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
381+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (43, 23, 30, NULL, NULL, NULL, NULL, 10, NULL, 5, NULL, NULL, '2010-01-13 18:23:45.763802', 12, NULL, NULL, NULL, NULL, 'Patches View Test', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
382+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (44, 24, 30, NULL, NULL, NULL, NULL, 15, NULL, 40, NULL, NULL, '2010-01-13 18:29:46.39858', 12, NULL, NULL, NULL, NULL, 'Patches View Test', NULL, NULL, NULL, NULL, '2010-01-20 21:23:53.052331', '2010-01-20 21:23:53.052331', NULL, NULL, NULL, NULL, 0, NULL);
383+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (45, 18, 4, NULL, NULL, NULL, NULL, 10, NULL, 10, NULL, NULL, '2010-01-20 21:17:00.883889', 12, NULL, NULL, NULL, NULL, 'Mozilla Firefox', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
384+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (46, 18, NULL, 1, NULL, 24, NULL, 20, NULL, 5, NULL, NULL, '2010-01-20 21:18:49.833838', 12, NULL, NULL, NULL, NULL, 'cdrkit (Ubuntu)', '2010-01-20 21:41:58.645349', NULL, NULL, NULL, NULL, '2010-01-20 21:41:58.645349', NULL, NULL, NULL, NULL, 0, NULL);
385+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (47, 24, NULL, 4, NULL, NULL, NULL, 10, NULL, 5, NULL, NULL, '2010-01-20 21:20:10.669476', 12, NULL, NULL, NULL, NULL, 'Gentoo', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
386+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (48, 24, NULL, 1, NULL, 21, NULL, 10, NULL, 50, NULL, NULL, '2010-01-20 21:20:35.930261', 12, NULL, NULL, NULL, NULL, 'libstdc++ (Ubuntu)', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
387+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (49, 24, 4, NULL, NULL, NULL, NULL, 10, NULL, 10, NULL, NULL, '2010-01-20 21:21:09.866741', 12, NULL, NULL, NULL, NULL, 'Mozilla Firefox', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
388+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (50, 24, 5, NULL, NULL, NULL, NULL, 20, NULL, 20, NULL, NULL, '2010-01-20 21:21:33.597745', 12, NULL, NULL, NULL, NULL, 'Evolution', '2010-01-20 21:23:57.702694', NULL, NULL, NULL, NULL, '2010-01-20 21:23:57.702694', NULL, NULL, NULL, NULL, 0, NULL);
389+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (51, 18, NULL, 1, NULL, 19, NULL, 10, NULL, 5, NULL, NULL, '2010-01-21 15:38:51.601715', 12, NULL, NULL, NULL, NULL, 'alsa-utils (Ubuntu)', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
390+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (52, 18, NULL, 1, NULL, 17, NULL, 10, NULL, 5, 16, '2010-01-27 22:30:14.233883', '2010-01-21 15:40:28.504905', 12, NULL, NULL, NULL, NULL, 'at (Ubuntu)', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
391+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (53, 24, NULL, NULL, NULL, NULL, NULL, 15, NULL, 40, NULL, NULL, '2010-01-22 17:23:55.406526', 16, NULL, NULL, NULL, NULL, 'Patches View Test trunk', NULL, NULL, NULL, 32, '2010-01-20 21:23:53.052331', '2010-01-20 21:23:53.052331', NULL, NULL, NULL, NULL, 0, NULL);
392+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (54, 18, NULL, NULL, 3, 19, NULL, 10, NULL, 5, NULL, NULL, '2010-01-26 20:13:16.909946', 16, NULL, NULL, NULL, NULL, 'alsa-utils (Ubuntu Hoary)', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
393+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (55, 18, NULL, NULL, 3, 17, NULL, 10, NULL, 5, 16, '2010-01-27 22:30:14.233883', '2010-01-26 20:13:16.909946', 16, NULL, NULL, NULL, NULL, 'at (Ubuntu Hoary)', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL);
394+INSERT INTO bugtask (id, bug, product, distribution, distroseries, sourcepackagename, binarypackagename, status, priority, importance, assignee, date_assigned, datecreated, owner, milestone, bugwatch, statusexplanation, fti, targetnamecache, date_confirmed, date_inprogress, date_closed, productseries, date_incomplete, date_left_new, date_triaged, date_fix_committed, date_fix_released, date_left_closed, heat_rank, date_milestone_set) VALUES (56, 18, NULL, NULL, 3, 24, NULL, 20, NULL, 5, NULL, NULL, '2010-01-26 20:13:16.909946', 16, NULL, NULL, NULL, NULL, 'cdrkit (Ubuntu Hoary)', '2010-01-20 21:41:58.645349', NULL, NULL, NULL, NULL, '2010-01-20 21:41:58.645349', NULL, NULL, NULL, NULL, 0, NULL);
395
396
397 ALTER TABLE bugtask ENABLE TRIGGER ALL;
398@@ -1715,8 +2039,8 @@
399
400 ALTER TABLE buildqueue DISABLE TRIGGER ALL;
401
402-INSERT INTO buildqueue (id, builder, logtail, lastscore, manual, job, job_type, estimated_duration, processor, virtualized) VALUES (1, 1, 'Dummy sampledata entry, not processing', 1, false, 1, 1, '00:00:00', 1, FALSE);
403-INSERT INTO buildqueue (id, builder, logtail, lastscore, manual, job, job_type, estimated_duration, processor, virtualized) VALUES (2, NULL, NULL, 10, false, 2, 1, '00:01:00', 1, FALSE);
404+INSERT INTO buildqueue (id, builder, logtail, lastscore, manual, job, job_type, estimated_duration) VALUES (1, 1, 'Dummy sampledata entry, not processing', 1, false, 1, 1, '00:00:00');
405+INSERT INTO buildqueue (id, builder, logtail, lastscore, manual, job, job_type, estimated_duration) VALUES (2, NULL, NULL, 10, false, 2, 1, '00:01:00');
406
407
408 ALTER TABLE buildqueue ENABLE TRIGGER ALL;
409@@ -2870,6 +3194,57 @@
410 INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (61, '2000-03-13 20:46:49.83307', 16, 2, 20, NULL, NULL);
411 INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (62, '2001-07-03 21:30:51.583356', 12, 47, NULL, 1, NULL);
412 INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (63, '2001-08-09 11:39:16.836856', 63, 1, 20, NULL, NULL);
413+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (64, '2010-01-12 20:45:21.127561', 12, 1, 30, NULL, NULL);
414+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (65, '2010-01-12 22:22:46.153194', 12, 1, 30, NULL, NULL);
415+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (66, '2010-01-12 22:28:27.800017', 12, 2, 30, NULL, NULL);
416+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (67, '2010-01-13 14:16:19.911349', 12, 1, 30, NULL, NULL);
417+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (68, '2010-01-13 14:16:19.911349', 12, 2, 30, NULL, NULL);
418+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (69, '2010-01-13 14:18:01.028701', 12, 1, 30, NULL, NULL);
419+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (70, '2010-01-13 14:18:01.028701', 12, 2, 30, NULL, NULL);
420+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (71, '2010-01-13 14:18:27.630313', 12, 3, 30, NULL, NULL);
421+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (72, '2010-01-13 14:18:34.066926', 12, 5, 30, NULL, NULL);
422+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (73, '2010-01-13 14:19:01.243841', 12, 1, 30, NULL, NULL);
423+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (74, '2010-01-13 14:20:12.307283', 12, 1, 30, NULL, NULL);
424+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (75, '2010-01-13 14:20:12.307283', 12, 2, 30, NULL, NULL);
425+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (76, '2010-01-13 14:22:45.617948', 12, 1, 30, NULL, NULL);
426+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (77, '2010-01-13 14:22:45.617948', 12, 2, 30, NULL, NULL);
427+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (78, '2010-01-13 14:26:47.46993', 12, 3, 30, NULL, NULL);
428+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (79, '2010-01-13 17:21:46.537052', 12, 3, 30, NULL, NULL);
429+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (80, '2010-01-13 17:22:11.382144', 12, 3, 30, NULL, NULL);
430+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (81, '2010-01-13 17:22:24.925081', 12, 3, 30, NULL, NULL);
431+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (82, '2010-01-13 17:22:37.743448', 12, 3, 30, NULL, NULL);
432+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (83, '2010-01-13 17:22:44.88561', 12, 3, 30, NULL, NULL);
433+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (84, '2010-01-13 17:23:32.153195', 12, 3, 30, NULL, NULL);
434+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (85, '2010-01-13 17:23:49.760696', 12, 3, 30, NULL, NULL);
435+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (86, '2010-01-13 17:27:10.325536', 12, 3, 30, NULL, NULL);
436+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (87, '2010-01-13 17:27:28.108308', 12, 3, 30, NULL, NULL);
437+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (88, '2010-01-13 17:27:33.53256', 12, 3, 30, NULL, NULL);
438+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (89, '2010-01-13 17:27:52.536624', 12, 3, 30, NULL, NULL);
439+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (90, '2010-01-13 18:23:45.763802', 12, 1, 30, NULL, NULL);
440+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (91, '2010-01-13 18:26:37.318632', 12, 2, 30, NULL, NULL);
441+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (92, '2010-01-13 18:27:05.201874', 12, 2, 30, NULL, NULL);
442+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (93, '2010-01-13 18:29:46.39858', 12, 1, 30, NULL, NULL);
443+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (94, '2010-01-13 18:29:46.39858', 12, 2, 30, NULL, NULL);
444+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (95, '2010-01-13 18:30:30.467005', 12, 2, 30, NULL, NULL);
445+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (96, '2010-01-13 18:31:54.707866', 12, 2, 30, NULL, NULL);
446+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (97, '2010-01-13 18:32:47.18092', 12, 2, 30, NULL, NULL);
447+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (98, '2010-01-13 18:33:38.232304', 12, 2, 30, NULL, NULL);
448+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (99, '2010-01-13 18:34:21.130592', 12, 2, 30, NULL, NULL);
449+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (100, '2010-01-20 21:17:00.883889', 12, 9, 4, NULL, NULL);
450+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (101, '2010-01-20 21:18:49.833838', 12, 9, NULL, 1, 24);
451+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (102, '2010-01-20 21:20:10.669476', 12, 9, NULL, 4, NULL);
452+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (103, '2010-01-20 21:20:35.930261', 12, 9, NULL, 1, 21);
453+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (104, '2010-01-20 21:21:09.866741', 12, 9, 4, NULL, NULL);
454+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (105, '2010-01-20 21:21:33.597745', 12, 9, 5, NULL, NULL);
455+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (106, '2010-01-20 21:22:54.717976', 12, 18, 4, NULL, NULL);
456+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (107, '2010-01-20 21:23:26.85161', 12, 18, 5, NULL, NULL);
457+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (108, '2010-01-20 21:23:29.895717', 12, 18, 4, NULL, NULL);
458+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (109, '2010-01-20 21:23:39.33682', 12, 18, 30, NULL, NULL);
459+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (110, '2010-01-20 21:23:57.506344', 12, 17, 5, NULL, NULL);
460+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (111, '2010-01-20 21:41:58.449444', 12, 17, NULL, 1, 24);
461+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (112, '2010-01-21 15:38:51.601715', 12, 9, NULL, 1, 19);
462+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (113, '2010-01-21 15:40:28.504905', 12, 9, NULL, 1, 17);
463+INSERT INTO karma (id, datecreated, person, action, product, distribution, sourcepackagename) VALUES (114, '2010-01-22 16:28:29.7187', 16, 18, NULL, 1, 21);
464
465
466 ALTER TABLE karma ENABLE TRIGGER ALL;
467@@ -3740,6 +4115,19 @@
468 INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (90, 90, 'pmount_1.0-1_all.deb', 'application/x-debian-package', NULL, '2008-05-08 10:15:32.440132', '2008-05-08 10:10:27.899028', false, 0);
469 INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (91, 91, 'upload_22_log.txt', 'application/text', NULL, '2008-07-07 22:30:01.123456', '2008-07-07 22:30:01.123456', false, 0);
470 INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (92, 92, 'sample-submission-2.xml', 'application/x-bzip2', NULL, '2008-09-30 08:19:00.222131', '2008-09-30 08:19:00.222131', false, 0);
471+INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (93, 93, 'bigjools.png', 'image/png', NULL, '2010-01-12 22:28:27.800017', '2010-01-12 22:28:27.800017', false, 0);
472+INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (94, 94, 'test-patch.txt', 'text/plain', NULL, '2010-01-13 14:16:19.911349', '2010-01-13 14:16:19.911349', false, 0);
473+INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (95, 95, 'nobody.png', 'text/plain', NULL, '2010-01-13 14:18:01.028701', '2010-01-13 14:18:01.028701', false, 0);
474+INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (96, 96, 'nobody.png', 'image/png', NULL, '2010-01-13 14:20:12.307283', '2010-01-13 14:20:12.307283', false, 0);
475+INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (97, 97, 'ignore-this.patch', 'text/plain', NULL, '2010-01-13 14:22:45.617948', '2010-01-13 14:22:45.617948', false, 0);
476+INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (98, 98, 'another-diff.txt', 'text/plain', NULL, '2010-01-13 18:26:37.318632', '2010-01-13 18:26:37.318632', false, 0);
477+INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (99, 99, 'another-diff.txt', 'text/plain', NULL, '2010-01-13 18:27:05.201874', '2010-01-13 18:27:05.201874', false, 0);
478+INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (100, 100, 'another-diff.txt', 'text/plain', NULL, '2010-01-13 18:29:46.39858', '2010-01-13 18:29:46.39858', false, 0);
479+INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (101, 101, 'test-patch.txt', 'text/plain', NULL, '2010-01-13 18:30:30.467005', '2010-01-13 18:30:30.467005', false, 0);
480+INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (102, 102, 'barcelona-laundry.jpg', 'image/jpeg', NULL, '2010-01-13 18:31:54.707866', '2010-01-13 18:31:54.707866', false, 0);
481+INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (103, 103, 'esther-helen-exley.jpg', 'image/jpeg', NULL, '2010-01-13 18:32:47.18092', '2010-01-13 18:32:47.18092', false, 0);
482+INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (104, 104, 'rf-setup-patch.txt', 'text/plain', NULL, '2010-01-13 18:33:38.232304', '2010-01-13 18:33:38.232304', false, 0);
483+INSERT INTO libraryfilealias (id, content, filename, mimetype, expires, last_accessed, date_created, restricted, hits) VALUES (105, 105, 'vonage-cancellation.pdf', 'application/pdf', NULL, '2010-01-13 18:34:21.130592', '2010-01-13 18:34:21.130592', false, 0);
484
485
486 ALTER TABLE libraryfilealias ENABLE TRIGGER ALL;
487@@ -3834,6 +4222,19 @@
488 INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (90, '2008-05-08 10:10:16.866444', 18, '0c805a60b31058a1018680f99447033dcb9d4caa', '8a8a67b8dbc5f203ae8712092c68c7aa', NULL);
489 INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (91, '2008-07-07 22:30:01.123456', 10, '0c805a60b31058a1018680f99447033dcb9d4c01', '8a8a67b8dbc5f203ae8712092c68c701', NULL);
490 INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (92, '2008-09-30 08:19:00.222131', 10, 'f10e2821bbbea527ea02200352313bc059445190', '7815696ecbf1c96e6894b779456d330e', NULL);
491+INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (93, '2010-01-12 22:28:27.800017', 6302, '7592bc722c8954347c11a8f95a54460fe7c92c4a', '19eaeb35afa81e6a537ab083c54df4db', NULL);
492+INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (94, '2010-01-13 14:16:19.911349', 1391, 'b0f2a8f2dd78f25d852f4398592011d2f102ccf8', '02de56a37dd2678ef3afc14819f07c9f', NULL);
493+INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (95, '2010-01-13 14:18:01.028701', 2280, '2a100b56cdbb251c95db843ad5142a01a40d9be5', '3da18ccb0800458bbbd7f186e88c436b', NULL);
494+INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (96, '2010-01-13 14:20:12.307283', 2280, '2a100b56cdbb251c95db843ad5142a01a40d9be5', '3da18ccb0800458bbbd7f186e88c436b', NULL);
495+INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (97, '2010-01-13 14:22:45.617948', 1391, 'b0f2a8f2dd78f25d852f4398592011d2f102ccf8', '02de56a37dd2678ef3afc14819f07c9f', NULL);
496+INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (98, '2010-01-13 18:26:37.318632', 540, '7afc411f4a356cf36db1bdbefc3097751bf15e29', 'a28f11e3141320afe818a304968de315', NULL);
497+INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (99, '2010-01-13 18:27:05.201874', 540, '7afc411f4a356cf36db1bdbefc3097751bf15e29', 'a28f11e3141320afe818a304968de315', NULL);
498+INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (100, '2010-01-13 18:29:46.39858', 540, '7afc411f4a356cf36db1bdbefc3097751bf15e29', 'a28f11e3141320afe818a304968de315', NULL);
499+INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (101, '2010-01-13 18:30:30.467005', 1391, 'b0f2a8f2dd78f25d852f4398592011d2f102ccf8', '02de56a37dd2678ef3afc14819f07c9f', NULL);
500+INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (102, '2010-01-13 18:31:54.707866', 127994, '32d7d60180115aeeb2ffb09f88bc9b281b65a7e4', '9e5c76cd3a2e30992207d0086547360e', NULL);
501+INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (103, '2010-01-13 18:32:47.18092', 105515, '2c3ba9c20b9ba3a116385664bacb42c71ac812ee', 'e3a26b8983484e4bceda32e0dd324d85', NULL);
502+INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (104, '2010-01-13 18:33:38.232304', 4324, 'd3a6cc586cf31427cb6bdec493c27f2cf245de58', 'dc8d96c1ecae8d71099981c14e14edb8', NULL);
503+INSERT INTO libraryfilecontent (id, datecreated, filesize, sha1, md5, sha256) VALUES (105, '2010-01-13 18:34:21.130592', 55594, 'cb69cb3e91a19c0ee831b571ff0e121ba57c35db', 'a031e115a3cfecd18fee97c1c42af7a0', NULL);
504
505
506 ALTER TABLE libraryfilecontent ENABLE TRIGGER ALL;
507@@ -4321,6 +4722,77 @@
508 INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (47, '2005-05-17 20:20:44', 'Re: Bug#308994: gnome-volume-manager: dvd+rw unreadable when automounted in burner because mounted read/write', 243615, 46, NULL, '<20050517202044.GA23231@spring.luon.net>', NULL, 78);
509 INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (48, '2005-06-17 14:00:11', 'Re: Bug#308994: gnome-volume-manager: dvd+rw unreadable when automounted in burner because mounted read/write', 243616, 46, NULL, '<20050617140011.GA15638@piware.de>', NULL, 79);
510 INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (49, '2005-06-25 10:13:10', 'Re: Bug#308994: gnome-volume-manager: dvd+rw unreadable when automounted in burner because mounted read/write', 243614, NULL, NULL, '<42BD2E36.9090809@gmx.de>', NULL, 81);
511+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (50, '2010-01-12 20:45:21.127561', 'The first bug has no patch attachment.', 12, NULL, NULL, '<20100112204521.3617.46129.malonedeb@kfogel-work>', NULL, NULL);
512+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (51, '2010-01-12 22:22:46.153194', 'The second bug has the first attachment, but it''s not a patch.', 12, NULL, NULL, '<20100112222246.19348.2002.malonedeb@kfogel-work>', NULL, NULL);
513+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (52, '2010-01-12 22:28:27.800017', 'Re: The second bug has the first attachment, but it''s not a patch.', 12, NULL, NULL, '<20100112222827.19348.56893.malone@kfogel-work>', NULL, NULL);
514+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (53, '2010-01-12 22:28:27.800017', 'Re: The second bug has the first attachment, but it''s not a patch.', 12, NULL, NULL, '<20100112222828.19348.64771.launchpad@kfogel-work>', NULL, NULL);
515+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (54, '2010-01-13 14:16:19.911349', 'The third bug has the first patch attachment.', 12, NULL, NULL, '<20100113141619.5358.90135.malonedeb@kfogel-work>', NULL, NULL);
516+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (55, '2010-01-13 14:16:19.911349', 'Re: The third bug has the first patch attachment.', 12, NULL, NULL, '<20100113141620.5358.60178.malone@kfogel-work>', NULL, NULL);
517+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (56, '2010-01-13 14:16:19.911349', 'Re: The third bug has the first patch attachment.', 12, NULL, NULL, '<20100113141620.5358.25424.launchpad@kfogel-work>', NULL, NULL);
518+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (57, '2010-01-13 14:18:01.028701', 'The fourth bug has a non-patch attachment.', 12, NULL, NULL, '<20100113141801.5358.87208.malonedeb@kfogel-work>', NULL, NULL);
519+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (58, '2010-01-13 14:18:01.028701', 'Re: The fourth bug has a non-patch attachment.', 12, NULL, NULL, '<20100113141801.5358.39419.malone@kfogel-work>', NULL, NULL);
520+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (59, '2010-01-13 14:18:01.028701', 'Re: The fourth bug has a non-patch attachment.', 12, NULL, NULL, '<20100113141801.5358.92085.launchpad@kfogel-work>', NULL, NULL);
521+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (60, '2010-01-13 14:18:27.630313', 'Re: The fourth bug has a attachment.', 12, NULL, NULL, '<20100113141827.5358.73694.launchpad@kfogel-work>', NULL, NULL);
522+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (61, '2010-01-13 14:18:34.066926', 'Re: The fourth bug has a attachment.', 12, NULL, NULL, '<20100113141834.5358.46673.launchpad@kfogel-work>', NULL, NULL);
523+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (62, '2010-01-13 14:19:01.243841', 'Bug number five has no attachment.', 12, NULL, NULL, '<20100113141901.5358.60302.malonedeb@kfogel-work>', NULL, NULL);
524+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (63, '2010-01-13 14:20:12.307283', 'Bug six has a non-patch attachment (but same as earlier was called a patch).', 12, NULL, NULL, '<20100113142012.5358.56004.malonedeb@kfogel-work>', NULL, NULL);
525+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (64, '2010-01-13 14:20:12.307283', 'Re: Bug six has a non-patch attachment (but same as earlier was called a patch).', 12, NULL, NULL, '<20100113142012.5358.61043.malone@kfogel-work>', NULL, NULL);
526+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (65, '2010-01-13 14:20:12.307283', 'Re: Bug six has a non-patch attachment (but same as earlier was called a patch).', 12, NULL, NULL, '<20100113142012.5358.83534.launchpad@kfogel-work>', NULL, NULL);
527+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (66, '2010-01-13 14:22:45.617948', 'Bug seven has a patch attachment.', 12, NULL, NULL, '<20100113142245.5358.72439.malonedeb@kfogel-work>', NULL, NULL);
528+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (67, '2010-01-13 14:22:45.617948', 'Re: Bug seven has a patch attachment.', 12, NULL, NULL, '<20100113142245.5358.51636.malone@kfogel-work>', NULL, NULL);
529+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (68, '2010-01-13 14:22:45.617948', 'Re: Bug seven has a patch attachment.', 12, NULL, NULL, '<20100113142245.5358.4495.launchpad@kfogel-work>', NULL, NULL);
530+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (69, '2010-01-13 14:26:47.46993', 'Re: The fourth bug has a patch attachment.', 12, NULL, NULL, '<20100113142647.5358.43442.launchpad@kfogel-work>', NULL, NULL);
531+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (70, '2010-01-13 17:21:46.537052', 'Re: No attachments at all.', 12, NULL, NULL, '<20100113172146.5358.79987.launchpad@kfogel-work>', NULL, NULL);
532+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (71, '2010-01-13 17:22:11.382144', 'Re: Bug A: No attachments at all.', 12, NULL, NULL, '<20100113172211.5358.62209.launchpad@kfogel-work>', NULL, NULL);
533+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (72, '2010-01-13 17:22:24.925081', 'Re: Bug B: non-patch attachment.', 12, NULL, NULL, '<20100113172225.5358.57044.launchpad@kfogel-work>', NULL, NULL);
534+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (73, '2010-01-13 17:22:37.743448', 'Re: Bug C: one patch attachment.', 12, NULL, NULL, '<20100113172237.5358.37093.launchpad@kfogel-work>', NULL, NULL);
535+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (74, '2010-01-13 17:22:44.88561', 'Re: Bug B: one non-patch attachment.', 12, NULL, NULL, '<20100113172245.5358.16852.launchpad@kfogel-work>', NULL, NULL);
536+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (75, '2010-01-13 17:23:32.153195', 'Re: Bug D: no attachments.', 12, NULL, NULL, '<20100113172332.5358.90533.launchpad@kfogel-work>', NULL, NULL);
537+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (76, '2010-01-13 17:23:49.760696', 'Re: Bug E: no attachments.', 12, NULL, NULL, '<20100113172349.5358.24365.launchpad@kfogel-work>', NULL, NULL);
538+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (77, '2010-01-13 17:27:10.325536', 'Re: Bug D: one patch attachment (really an image file).', 12, NULL, NULL, '<20100113172710.5358.34990.launchpad@kfogel-work>', NULL, NULL);
539+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (78, '2010-01-13 17:27:28.108308', 'Re: Bug F: one non-patch attachment (same image thaht Bug D calls a patch).', 12, NULL, NULL, '<20100113172728.5358.33754.launchpad@kfogel-work>', NULL, NULL);
540+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (79, '2010-01-13 17:27:33.53256', 'Re: Bug F: one non-patch attachment (same image that Bug D calls a patch).', 12, NULL, NULL, '<20100113172733.5358.6028.launchpad@kfogel-work>', NULL, NULL);
541+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (80, '2010-01-13 17:27:52.536624', 'Re: Bug G: one patch attachment.', 12, NULL, NULL, '<20100113172752.5358.82801.launchpad@kfogel-work>', NULL, NULL);
542+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (81, '2010-01-13 18:23:45.763802', 'Bug H: two attachments, one patch, one not.', 12, NULL, NULL, '<20100113182345.5358.35767.malonedeb@kfogel-work>', NULL, NULL);
543+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (82, '2010-01-13 18:26:37.318632', 'Re: Bug H: two attachments, one patch, one not.', 12, NULL, NULL, '<20100113182637.5358.46835.malone@kfogel-work>', NULL, NULL);
544+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (83, '2010-01-13 18:26:37.318632', 'Re: Bug H: two attachments, one patch, one not.', 12, NULL, NULL, '<20100113182637.5358.41333.launchpad@kfogel-work>', NULL, NULL);
545+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (84, '2010-01-13 18:27:05.201874', 'Re: Bug H: two attachments, one patch, one not.', 12, NULL, NULL, '<20100113182705.5358.62395.malone@kfogel-work>', NULL, NULL);
546+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (85, '2010-01-13 18:27:05.201874', 'Re: Bug H: two attachments, one patch, one not.', 12, NULL, NULL, '<20100113182705.5358.76691.launchpad@kfogel-work>', NULL, NULL);
547+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (86, '2010-01-13 18:29:46.39858', 'Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100113182946.5358.76263.malonedeb@kfogel-work>', NULL, NULL);
548+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (87, '2010-01-13 18:29:46.39858', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100113182946.5358.5131.malone@kfogel-work>', NULL, NULL);
549+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (88, '2010-01-13 18:29:46.39858', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100113182946.5358.14868.launchpad@kfogel-work>', NULL, NULL);
550+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (89, '2010-01-13 18:30:30.467005', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100113183030.5358.85602.malone@kfogel-work>', NULL, NULL);
551+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (90, '2010-01-13 18:30:30.467005', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100113183030.5358.69918.launchpad@kfogel-work>', NULL, NULL);
552+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (91, '2010-01-13 18:31:54.707866', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100113183154.5358.10140.malone@kfogel-work>', NULL, NULL);
553+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (92, '2010-01-13 18:31:54.707866', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100113183154.5358.18175.launchpad@kfogel-work>', NULL, NULL);
554+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (93, '2010-01-13 18:32:47.18092', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100113183247.5358.10006.malone@kfogel-work>', NULL, NULL);
555+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (94, '2010-01-13 18:32:47.18092', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100113183247.5358.29330.launchpad@kfogel-work>', NULL, NULL);
556+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (95, '2010-01-13 18:33:38.232304', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100113183338.5358.26039.malone@kfogel-work>', NULL, NULL);
557+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (96, '2010-01-13 18:33:38.232304', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100113183338.5358.41992.launchpad@kfogel-work>', NULL, NULL);
558+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (97, '2010-01-13 18:34:21.130592', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100113183421.5358.32215.malone@kfogel-work>', NULL, NULL);
559+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (98, '2010-01-13 18:34:21.130592', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100113183421.5358.648.launchpad@kfogel-work>', NULL, NULL);
560+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (99, '2010-01-20 21:17:00.883889', 'Re: Bug C: one patch attachment.', 12, NULL, NULL, '<20100120211701.17445.29712.launchpad@kfogel-work>', NULL, NULL);
561+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (100, '2010-01-20 21:18:49.833838', 'Re: Bug C: one patch attachment.', 12, NULL, NULL, '<20100120211850.17445.84724.launchpad@kfogel-work>', NULL, NULL);
562+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (101, '2010-01-20 21:20:10.669476', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100120212010.17445.30818.launchpad@kfogel-work>', NULL, NULL);
563+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (102, '2010-01-20 21:20:35.930261', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100120212036.17445.94048.launchpad@kfogel-work>', NULL, NULL);
564+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (103, '2010-01-20 21:21:09.866741', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100120212110.17445.54332.launchpad@kfogel-work>', NULL, NULL);
565+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (104, '2010-01-20 21:21:33.597745', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100120212133.17445.35200.launchpad@kfogel-work>', NULL, NULL);
566+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (105, '2010-01-20 21:22:54.717976', 'Re: Bug C: one patch attachment.', 12, NULL, NULL, '<20100120212254.17445.14068.launchpad@kfogel-work>', NULL, NULL);
567+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (106, '2010-01-20 21:23:26.85161', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100120212327.17445.79653.launchpad@kfogel-work>', NULL, NULL);
568+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (107, '2010-01-20 21:23:29.895717', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100120212330.17445.31898.launchpad@kfogel-work>', NULL, NULL);
569+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (108, '2010-01-20 21:23:39.33682', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100120212339.17445.27845.launchpad@kfogel-work>', NULL, NULL);
570+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (109, '2010-01-20 21:23:52.874688', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100120212353.17445.58578.launchpad@kfogel-work>', NULL, NULL);
571+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (110, '2010-01-20 21:23:57.506344', 'Re: Bug I: six attachments (three patches, three non-patches).', 12, NULL, NULL, '<20100120212357.17445.63504.launchpad@kfogel-work>', NULL, NULL);
572+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (111, '2010-01-20 21:41:58.449444', 'Re: Bug C: one patch attachment.', 12, NULL, NULL, '<20100120214158.18968.79883.launchpad@kfogel-work>', NULL, NULL);
573+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (112, '2010-01-21 15:38:51.601715', 'Re: Bug C: one patch attachment.', 12, NULL, NULL, '<20100121153852.4166.85021.launchpad@kfogel-work>', NULL, NULL);
574+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (113, '2010-01-21 15:40:28.504905', 'Re: Bug C: one patch attachment.', 12, NULL, NULL, '<20100121154028.4166.46784.launchpad@kfogel-work>', NULL, NULL);
575+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (114, '2010-01-22 16:28:29.7187', 'Re: Bug I: six attachments (three patches, three non-patches).', 16, NULL, NULL, '<20100122162830.5301.16916.launchpad@kfogel-work>', NULL, NULL);
576+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (115, '2010-01-22 17:23:55.406526', 'Re: Bug I: six attachments (three patches, three non-patches).', 16, NULL, NULL, '<20100122172355.5301.60732.launchpad@kfogel-work>', NULL, NULL);
577+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (116, '2010-01-26 20:13:16.909946', 'Re: Bug C: one patch attachment.', 16, NULL, NULL, '<20100126201317.10252.35278.launchpad@kfogel-work>', NULL, NULL);
578+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (117, '2010-01-26 20:13:16.909946', 'Re: Bug C: one patch attachment.', 16, NULL, NULL, '<20100126201317.10252.72527.launchpad@kfogel-work>', NULL, NULL);
579+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (118, '2010-01-26 20:13:16.909946', 'Re: Bug C: one patch attachment.', 16, NULL, NULL, '<20100126201317.10252.57614.launchpad@kfogel-work>', NULL, NULL);
580+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (119, '2010-01-27 22:19:05.667291', 'Re: Bug C: one patch attachment.', 16, NULL, NULL, '<20100127221906.10252.53976.launchpad@kfogel-work>', NULL, NULL);
581+INSERT INTO message (id, datecreated, subject, owner, parent, distribution, rfc822msgid, fti, raw) VALUES (120, '2010-01-27 22:30:14.068436', 'Re: Bug C: one patch attachment.', 16, NULL, NULL, '<20100127223014.10252.23666.launchpad@kfogel-work>', NULL, NULL);
582
583
584 ALTER TABLE message ENABLE TRIGGER ALL;
585@@ -4781,6 +5253,166 @@
586
587
588 ', NULL, NULL);
589+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (51, 50, 1, 'Enough said.', NULL, NULL);
590+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (52, 51, 1, 'This is the second bug.', NULL, NULL);
591+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (53, 52, 1, 'Attach a non-patch.', NULL, NULL);
592+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (54, 53, 1, '** Attachment added: "bigjools.png"
593+ http://launchpad.dev:58080/93/bigjools.png', NULL, NULL);
594+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (55, 54, 1, 'This is the third bug in the project, and it has the first attachment that is a patch.', NULL, NULL);
595+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (56, 55, 1, NULL, NULL, NULL);
596+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (57, 56, 1, '** Attachment added: "test patch"
597+ http://launchpad.dev:58080/94/test-patch.txt', NULL, NULL);
598+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (58, 57, 1, 'Bug number four, with a non-patch attachment.', NULL, NULL);
599+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (59, 58, 1, NULL, NULL, NULL);
600+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (60, 59, 1, '** Attachment added: "An image file. Let''s see what mime type it gets."
601+ http://launchpad.dev:58080/95/nobody.png', NULL, NULL);
602+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (61, 60, 1, '** Summary changed:
603+
604+- The fourth bug has a non-patch attachment.
605++ The fourth bug has a attachment.', NULL, NULL);
606+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (62, 61, 1, '** Description changed:
607+
608+- Bug number four, with a non-patch attachment.
609++ Bug number four, with patch attachment.', NULL, NULL);
610+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (63, 62, 1, 'Bug five has no attachment.', NULL, NULL);
611+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (64, 63, 1, 'Bug six has a non-patch attachment (but it''s the same as an earlier bug called a patch attachment).', NULL, NULL);
612+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (65, 64, 1, NULL, NULL, NULL);
613+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (66, 65, 1, '** Attachment added: "An image, this time not as a patch."
614+ http://launchpad.dev:58080/96/nobody.png', NULL, NULL);
615+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (67, 66, 1, 'Bug seven has a patch attachment.', NULL, NULL);
616+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (68, 67, 1, NULL, NULL, NULL);
617+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (69, 68, 1, '** Attachment added: "Some patch."
618+ http://launchpad.dev:58080/97/ignore-this.patch', NULL, NULL);
619+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (70, 69, 1, '** Summary changed:
620+
621+- The fourth bug has a attachment.
622++ The fourth bug has a patch attachment.', NULL, NULL);
623+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (71, 70, 1, '** Summary changed:
624+
625+- The first bug has no patch attachment.
626++ No attachments at all.', NULL, NULL);
627+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (72, 71, 1, '** Summary changed:
628+
629+- No attachments at all.
630++ Bug A: No attachments at all.', NULL, NULL);
631+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (73, 72, 1, '** Summary changed:
632+
633+- The second bug has the first attachment, but it''s not a patch.
634++ Bug B: non-patch attachment.', NULL, NULL);
635+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (74, 73, 1, '** Summary changed:
636+
637+- The third bug has the first patch attachment.
638++ Bug C: one patch attachment.', NULL, NULL);
639+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (75, 74, 1, '** Summary changed:
640+
641+- Bug B: non-patch attachment.
642++ Bug B: one non-patch attachment.', NULL, NULL);
643+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (76, 75, 1, '** Summary changed:
644+
645+- Bug number five has no attachment.
646++ Bug D: no attachments.', NULL, NULL);
647+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (77, 76, 1, '** Summary changed:
648+
649+- Bug D: no attachments.
650++ Bug E: no attachments.', NULL, NULL);
651+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (78, 77, 1, '** Summary changed:
652+
653+- The fourth bug has a patch attachment.
654++ Bug D: one patch attachment (really an image file).', NULL, NULL);
655+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (79, 78, 1, '** Summary changed:
656+
657+- Bug six has a non-patch attachment (but same as earlier was called a patch).
658++ Bug F: one non-patch attachment (same image thaht Bug D calls a patch).', NULL, NULL);
659+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (80, 79, 1, '** Summary changed:
660+
661+- Bug F: one non-patch attachment (same image thaht Bug D calls a patch).
662++ Bug F: one non-patch attachment (same image that Bug D calls a patch).', NULL, NULL);
663+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (81, 80, 1, '** Summary changed:
664+
665+- Bug seven has a patch attachment.
666++ Bug G: one patch attachment.', NULL, NULL);
667+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (82, 81, 1, 'This is Bug H. It has two attachments. One is a patch, the other is not.', NULL, NULL);
668+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (83, 82, 1, NULL, NULL, NULL);
669+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (84, 83, 1, '** Attachment added: "Patch attachment to Bug H."
670+ http://launchpad.dev:58080/98/another-diff.txt', NULL, NULL);
671+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (85, 84, 1, NULL, NULL, NULL);
672+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (86, 85, 1, '** Attachment added: "Non-patch attachment to Bug H (same as patch attachment, btw)."
673+ http://launchpad.dev:58080/99/another-diff.txt', NULL, NULL);
674+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (87, 86, 1, 'This is Bug I. It has six attachments, of which three are patches.', NULL, NULL);
675+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (88, 87, 1, NULL, NULL, NULL);
676+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (89, 88, 1, '** Attachment added: "first patch attachment to Bug I"
677+ http://launchpad.dev:58080/100/another-diff.txt', NULL, NULL);
678+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (90, 89, 1, NULL, NULL, NULL);
679+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (91, 90, 1, '** Attachment added: "second patch attachment to bug I"
680+ http://launchpad.dev:58080/101/test-patch.txt', NULL, NULL);
681+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (92, 91, 1, NULL, NULL, NULL);
682+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (93, 92, 1, '** Attachment added: "first non-patch attachment to Bug I"
683+ http://launchpad.dev:58080/102/barcelona-laundry.jpg', NULL, NULL);
684+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (94, 93, 1, NULL, NULL, NULL);
685+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (95, 94, 1, '** Attachment added: "second non-patch attachment to Bug I"
686+ http://launchpad.dev:58080/103/esther-helen-exley.jpg', NULL, NULL);
687+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (96, 95, 1, NULL, NULL, NULL);
688+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (97, 96, 1, '** Attachment added: "third patch attachment to Bug I"
689+ http://launchpad.dev:58080/104/rf-setup-patch.txt', NULL, NULL);
690+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (98, 97, 1, NULL, NULL, NULL);
691+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (99, 98, 1, '** Attachment added: "third non-patch attachment to Bug I"
692+ http://launchpad.dev:58080/105/vonage-cancellation.pdf', NULL, NULL);
693+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (100, 99, 1, '** Also affects: firefox
694+ Importance: Undecided
695+ Status: New', NULL, NULL);
696+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (101, 100, 1, '** Also affects: cdrkit (Ubuntu)
697+ Importance: Undecided
698+ Status: New', NULL, NULL);
699+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (102, 101, 1, '** Also affects: gentoo
700+ Importance: Undecided
701+ Status: New', NULL, NULL);
702+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (103, 102, 1, '** Also affects: libstdc++ (Ubuntu)
703+ Importance: Undecided
704+ Status: New', NULL, NULL);
705+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (104, 103, 1, '** Also affects: firefox
706+ Importance: Undecided
707+ Status: New', NULL, NULL);
708+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (105, 104, 1, '** Also affects: evolution
709+ Importance: Undecided
710+ Status: New', NULL, NULL);
711+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (106, 105, 1, '** Changed in: firefox
712+ Importance: Undecided => Wishlist', NULL, NULL);
713+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (107, 106, 1, '** Changed in: evolution
714+ Importance: Undecided => Low', NULL, NULL);
715+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (108, 107, 1, '** Changed in: firefox
716+ Importance: Undecided => Wishlist', NULL, NULL);
717+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (109, 108, 1, '** Changed in: patches-view-test
718+ Importance: Undecided => High', NULL, NULL);
719+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (110, 109, 1, '** Changed in: patches-view-test
720+ Status: New => Incomplete', NULL, NULL);
721+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (111, 110, 1, '** Changed in: evolution
722+ Status: New => Confirmed', NULL, NULL);
723+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (112, 111, 1, '** Changed in: cdrkit (Ubuntu)
724+ Status: New => Confirmed', NULL, NULL);
725+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (113, 112, 1, '** Also affects: alsa-utils (Ubuntu)
726+ Importance: Undecided
727+ Status: New', NULL, NULL);
728+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (114, 113, 1, '** Also affects: at (Ubuntu)
729+ Importance: Undecided
730+ Status: New', NULL, NULL);
731+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (115, 114, 1, '** Changed in: libstdc++ (Ubuntu)
732+ Importance: Undecided => Critical', NULL, NULL);
733+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (116, 115, 1, '** Also affects: patches-view-test/trunk
734+ Importance: High
735+ Status: Incomplete', NULL, NULL);
736+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (117, 116, 1, '** Also affects: alsa-utils (Ubuntu Hoary)
737+ Importance: Undecided
738+ Status: New', NULL, NULL);
739+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (118, 117, 1, '** Also affects: at (Ubuntu Hoary)
740+ Importance: Undecided
741+ Status: New', NULL, NULL);
742+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (119, 118, 1, '** Also affects: cdrkit (Ubuntu Hoary)
743+ Importance: Undecided
744+ Status: Confirmed', NULL, NULL);
745+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (120, 119, 1, '** Changed in: patches-view-test
746+ Assignee: (unassigned) => Foo Bar (name16)', NULL, NULL);
747+INSERT INTO messagechunk (id, message, sequence, content, blob, fti) VALUES (121, 120, 1, '** Changed in: at (Ubuntu Hoary)
748+ Assignee: (unassigned) => Foo Bar (name16)', NULL, NULL);
749
750
751 ALTER TABLE messagechunk ENABLE TRIGGER ALL;
752@@ -5318,6 +5950,8 @@
753 INSERT INTO pillarname (id, name, product, project, distribution, active, alias_for) VALUES (45, 'epiphany', 27, NULL, NULL, true, NULL);
754 INSERT INTO pillarname (id, name, product, project, distribution, active, alias_for) VALUES (46, 'intltool', 28, NULL, NULL, true, NULL);
755 INSERT INTO pillarname (id, name, product, project, distribution, active, alias_for) VALUES (47, 'lies', 29, NULL, NULL, true, NULL);
756+INSERT INTO pillarname (id, name, product, project, distribution, active, alias_for) VALUES (48, 'patches-view-test', 30, NULL, NULL, true, NULL);
757+INSERT INTO pillarname (id, name, product, project, distribution, active, alias_for) VALUES (49, 'patches-view-group', NULL, 9, NULL, true, NULL);
758
759
760 ALTER TABLE pillarname ENABLE TRIGGER ALL;
761@@ -8132,6 +8766,7 @@
762 INSERT INTO product (id, project, owner, name, displayname, title, summary, description, datecreated, homepageurl, screenshotsurl, wikiurl, listurl, programminglang, downloadurl, lastdoap, sourceforgeproject, freshmeatproject, reviewed, active, fti, autoupdate, translationgroup, translationpermission, official_rosetta, official_malone, bug_supervisor, security_contact, driver, bugtracker, development_focus, homepage_content, icon, mugshot, logo, official_answers, private_bugs, private_specs, license_info, official_blueprints, enable_bug_expiration, bug_reporting_guidelines, reviewer_whiteboard, official_codehosting, license_approved, registrant, remote_product, translation_focus) VALUES (27, NULL, 243648, 'epiphany', 'Epiphany', 'Epiphany Web Browser', 'A default GNOME web browser.', 'description1', '2009-08-24 14:36:04.699204', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, true, NULL, false, 3, 20, true, false, NULL, NULL, NULL, NULL, 29, NULL, NULL, NULL, NULL, false, false, false, NULL, false, false, NULL, NULL, false, false, 243648, NULL, NULL);
763 INSERT INTO product (id, project, owner, name, displayname, title, summary, description, datecreated, homepageurl, screenshotsurl, wikiurl, listurl, programminglang, downloadurl, lastdoap, sourceforgeproject, freshmeatproject, reviewed, active, fti, autoupdate, translationgroup, translationpermission, official_rosetta, official_malone, bug_supervisor, security_contact, driver, bugtracker, development_focus, homepage_content, icon, mugshot, logo, official_answers, private_bugs, private_specs, license_info, official_blueprints, enable_bug_expiration, bug_reporting_guidelines, reviewer_whiteboard, official_codehosting, license_approved, registrant, remote_product, translation_focus) VALUES (28, NULL, 243649, 'intltool', 'intltool', 'Internationalization build tools', 'Tools to extract translatable messages from different file formats and to merge them back in.', 'description2', '2009-08-24 14:39:04.708167', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, true, NULL, false, 2, 1, true, false, NULL, NULL, NULL, NULL, 30, NULL, NULL, NULL, NULL, false, false, false, NULL, false, false, NULL, NULL, false, false, 243649, NULL, NULL);
764 INSERT INTO product (id, project, owner, name, displayname, title, summary, description, datecreated, homepageurl, screenshotsurl, wikiurl, listurl, programminglang, downloadurl, lastdoap, sourceforgeproject, freshmeatproject, reviewed, active, fti, autoupdate, translationgroup, translationpermission, official_rosetta, official_malone, bug_supervisor, security_contact, driver, bugtracker, development_focus, homepage_content, icon, mugshot, logo, official_answers, private_bugs, private_specs, license_info, official_blueprints, enable_bug_expiration, bug_reporting_guidelines, reviewer_whiteboard, official_codehosting, license_approved, registrant, remote_product, translation_focus) VALUES (29, NULL, 243650, 'lies', 'Lies', 'Quick production of lies', 'Software to easily and quickly manufacture as many lies as possible. It takes truth as the input', 'description3', '2009-08-24 14:41:04.427117', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, true, NULL, false, 2, 100, true, false, NULL, NULL, NULL, NULL, 31, NULL, NULL, NULL, NULL, false, false, false, NULL, false, false, NULL, NULL, false, false, 243650, NULL, NULL);
765+INSERT INTO product (id, project, owner, name, displayname, title, summary, description, datecreated, homepageurl, screenshotsurl, wikiurl, listurl, programminglang, downloadurl, lastdoap, sourceforgeproject, freshmeatproject, reviewed, active, fti, autoupdate, translationgroup, translationpermission, official_rosetta, official_malone, bug_supervisor, security_contact, driver, bugtracker, development_focus, homepage_content, icon, mugshot, logo, official_answers, private_bugs, private_specs, license_info, official_blueprints, enable_bug_expiration, bug_reporting_guidelines, reviewer_whiteboard, official_codehosting, license_approved, registrant, remote_product, translation_focus) VALUES (30, 9, 12, 'patches-view-test', 'Patches View Test', 'Test project for +patches view.', 'Summary of Patches View Test.', 'Description of Patches View Test.', '2010-01-12 20:23:51.720963', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, true, NULL, false, NULL, 1, false, true, NULL, NULL, NULL, NULL, 32, NULL, NULL, NULL, NULL, false, false, false, NULL, false, false, NULL, NULL, true, false, 12, NULL, NULL);
766
767
768 ALTER TABLE product ENABLE TRIGGER ALL;
769@@ -8164,6 +8799,7 @@
770 INSERT INTO productlicense (id, product, license) VALUES (7, 28, 130);
771 INSERT INTO productlicense (id, product, license) VALUES (8, 29, 130);
772 INSERT INTO productlicense (id, product, license) VALUES (9, 15, 150);
773+INSERT INTO productlicense (id, product, license) VALUES (10, 30, 220);
774
775
776 ALTER TABLE productlicense ENABLE TRIGGER ALL;
777@@ -8401,6 +9037,7 @@
778 INSERT INTO productseries (id, product, name, summary, releasefileglob, releaseverstyle, datecreated, driver, owner, status, translations_autoimport_mode, branch, translations_branch) VALUES (29, 27, 'trunk', 'The "trunk" series represents the primary line of development rather than a stable release branch. This is sometimes also called MAIN or HEAD.', NULL, NULL, '2009-08-24 14:36:04.699204', NULL, 243648, 2, 1, NULL, NULL);
779 INSERT INTO productseries (id, product, name, summary, releasefileglob, releaseverstyle, datecreated, driver, owner, status, translations_autoimport_mode, branch, translations_branch) VALUES (30, 28, 'trunk', 'The "trunk" series represents the primary line of development rather than a stable release branch. This is sometimes also called MAIN or HEAD.', NULL, NULL, '2009-08-24 14:39:04.708167', NULL, 243649, 2, 1, NULL, NULL);
780 INSERT INTO productseries (id, product, name, summary, releasefileglob, releaseverstyle, datecreated, driver, owner, status, translations_autoimport_mode, branch, translations_branch) VALUES (31, 29, 'trunk', 'The "trunk" series represents the primary line of development rather than a stable release branch. This is sometimes also called MAIN or HEAD.', NULL, NULL, '2009-08-24 14:41:04.427117', NULL, 243650, 2, 1, NULL, NULL);
781+INSERT INTO productseries (id, product, name, summary, releasefileglob, releaseverstyle, datecreated, driver, owner, status, translations_autoimport_mode, branch, translations_branch) VALUES (32, 30, 'trunk', 'The "trunk" series represents the primary line of development rather than a stable release branch. This is sometimes also called MAIN or HEAD.', NULL, NULL, '2010-01-12 20:23:51.720963', NULL, 12, 2, 1, NULL, NULL);
782
783
784 ALTER TABLE productseries ENABLE TRIGGER ALL;
785@@ -8440,6 +9077,7 @@
786 INSERT INTO project (id, owner, name, displayname, title, summary, description, datecreated, homepageurl, wikiurl, lastdoap, sourceforgeproject, freshmeatproject, reviewed, active, fti, translationgroup, translationpermission, driver, bugtracker, homepage_content, icon, mugshot, logo, bug_reporting_guidelines, reviewer_whiteboard, registrant) VALUES (8, 16, 'gimp', 'the GiMP Project', 'The GIMP Project', 'The GIMP Project works in the field of image manipulation and reproduction. The Project is responsible for several pieces of software, such as The GiMP and GiMP-Print.', 'Founded by Spencer Kimball in 1996 with the simple aim of producing a "paint" program, the GIMP project has become one of the defining projects of the open source world. The GIMP itself is an image manipulation program that is beginning to rival even Adobe Photoshop in features and functionality.
787
788 The project is loosely organised, with about 15 people making regular contributions. There is no fixed release schedule other than "when it is done".', '2004-10-03 22:27:45.283741', 'http://www.gimp.org/', NULL, NULL, NULL, NULL, false, true, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 16);
789+INSERT INTO project (id, owner, name, displayname, title, summary, description, datecreated, homepageurl, wikiurl, lastdoap, sourceforgeproject, freshmeatproject, reviewed, active, fti, translationgroup, translationpermission, driver, bugtracker, homepage_content, icon, mugshot, logo, bug_reporting_guidelines, reviewer_whiteboard, registrant) VALUES (9, 16, 'patches-view-group', 'Patches View Project Group', 'FULL NAME OF PATCHES VIEW PROJECT GROUP', 'summary', 'description', '2010-01-22 17:18:55.961276', NULL, NULL, NULL, NULL, NULL, false, true, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 16);
790
791
792 ALTER TABLE project ENABLE TRIGGER ALL;
793
794=== modified file 'lib/canonical/launchpad/icing/style.css'
795--- lib/canonical/launchpad/icing/style.css 2010-01-21 22:07:42 +0000
796+++ lib/canonical/launchpad/icing/style.css 2010-02-02 01:39:18 +0000
797@@ -1463,7 +1463,7 @@
798
799 div.popupTitle {
800 background: #ffffdc;
801- padding: 0 1em;
802+ padding: 0.5em 1em;
803 border: 1px black solid;
804 position: absolute;
805 display: none;
806
807=== modified file 'lib/lp/bugs/browser/bugtarget.py'
808--- lib/lp/bugs/browser/bugtarget.py 2010-01-29 19:00:47 +0000
809+++ lib/lp/bugs/browser/bugtarget.py 2010-02-02 01:39:18 +0000
810@@ -1,4 +1,4 @@
811-# Copyright 2009 Canonical Ltd. This software is licensed under the
812+# Copyright 2010 Canonical Ltd. This software is licensed under the
813 # GNU Affero General Public License version 3 (see the file LICENSE).
814
815 """IBugTarget-related browser views."""
816@@ -7,6 +7,7 @@
817
818 __all__ = [
819 "BugsVHostBreadcrumb",
820+ "BugsPatchesView",
821 "BugTargetBugListingView",
822 "BugTargetBugTagsView",
823 "BugTargetBugsView",
824@@ -19,8 +20,10 @@
825
826 import cgi
827 from cStringIO import StringIO
828+from datetime import datetime
829 from email import message_from_string
830 from operator import itemgetter
831+from pytz import timezone
832 from simplejson import dumps
833 import tempfile
834 import urllib
835@@ -40,6 +43,7 @@
836 from canonical.config import config
837 from lp.bugs.browser.bugtask import BugTaskSearchListingView
838 from lp.bugs.interfaces.bug import IBug
839+from lp.bugs.interfaces.bugattachment import BugAttachmentType
840 from canonical.launchpad.browser.feeds import (
841 BugFeedLink, BugTargetLatestBugsFeedLink, FeedsMixin,
842 PersonLatestBugsFeedLink)
843@@ -48,7 +52,8 @@
844 IBugTarget, IOfficialBugTagTargetPublic, IOfficialBugTagTargetRestricted)
845 from lp.bugs.interfaces.bug import IBugSet
846 from lp.bugs.interfaces.bugtask import (
847- BugTaskStatus, IBugTaskSet, UNRESOLVED_BUGTASK_STATUSES)
848+ BugTaskStatus, IBugTaskSet, UNRESOLVED_BUGTASK_STATUSES,
849+ UNRESOLVED_PLUS_FIXRELEASED_BUGTASK_STATUSES)
850 from canonical.launchpad.interfaces.launchpad import (
851 IHasExternalBugTracker, ILaunchpadUsage)
852 from canonical.launchpad.interfaces.hwdb import IHWSubmissionSet
853@@ -73,6 +78,7 @@
854 LaunchpadEditFormView, LaunchpadFormView, LaunchpadView, action,
855 canonical_url, custom_widget, safe_action)
856 from canonical.launchpad.webapp.authorization import check_permission
857+from canonical.launchpad.webapp.batching import BatchNavigator
858 from canonical.launchpad.webapp.tales import BugTrackerFormatterAPI
859 from canonical.launchpad.validators.name import valid_name_pattern
860 from canonical.launchpad.webapp.menu import structured
861@@ -1384,3 +1390,59 @@
862 class BugsVHostBreadcrumb(Breadcrumb):
863 rootsite = 'bugs'
864 text = 'Bugs'
865+
866+
867+class BugsPatchesView(LaunchpadView):
868+ """View list of patch attachments associated with bugs."""
869+
870+ @property
871+ def label(self):
872+ """The display label for the view."""
873+ return 'Patch attachments in %s' % self.context.displayname
874+
875+ def batchedPatchTasks(self):
876+ """Return a BatchNavigator for bug tasks with patch attachments."""
877+ # XXX: Karl Fogel 2010-02-01 bug=515584: we should be using a
878+ # Zope form instead of validating the values by hand in the
879+ # code. Doing it the Zope form way would specify rendering
880+ # and validation from the same enum, and thus observe DRY.
881+ orderby = self.request.get("orderby")
882+ if (orderby is not None and
883+ orderby not in ["-importance", "status", "targetname",
884+ "datecreated", "-datecreated"]):
885+ raise AssertionError("patch task batch navigator ordered by "
886+ "invalid value '%s'" % orderby)
887+ return BatchNavigator(
888+ self.context.searchTasks(
889+ None, user=self.user, order_by=orderby,
890+ status=UNRESOLVED_PLUS_FIXRELEASED_BUGTASK_STATUSES,
891+ omit_duplicates=True, has_patch=True),
892+ self.request)
893+
894+ def shouldShowTargetName(self):
895+ """Return True if current context can have different bugtargets."""
896+ return (IDistribution.providedBy(self.context) or
897+ IDistroSeries.providedBy(self.context) or
898+ IProject.providedBy(self.context))
899+
900+ def youngestPatch(self, bug):
901+ """Return the youngest patch attached to a bug, else error."""
902+ youngest = None
903+ # Loop over bugtasks, gathering youngest patch for each's bug.
904+ for attachment in bug.attachments:
905+ if attachment.is_patch:
906+ if youngest is None:
907+ youngest = attachment
908+ elif (attachment.message.datecreated >
909+ youngest.message.datecreated):
910+ youngest = attachment
911+ if youngest is None:
912+ # This is the patches view, so every bug under
913+ # consideration should have at least one patch attachment.
914+ raise AssertionError("bug %i has no patch attachments" % bug.id)
915+ return youngest
916+
917+ def patchAge(self, patch):
918+ """Return a timedelta object for the age of a patch attachment."""
919+ now = datetime.now(timezone('UTC'))
920+ return now - patch.message.datecreated
921
922=== modified file 'lib/lp/bugs/browser/configure.zcml'
923--- lib/lp/bugs/browser/configure.zcml 2010-01-18 21:44:59 +0000
924+++ lib/lp/bugs/browser/configure.zcml 2010-02-02 01:39:18 +0000
925@@ -1,4 +1,4 @@
926-<!-- Copyright 2009 Canonical Ltd. This software is licensed under the
927+<!-- Copyright 2010 Canonical Ltd. This software is licensed under the
928 GNU Affero General Public License version 3 (see the file LICENSE).
929 -->
930
931@@ -108,6 +108,13 @@
932 facet="bugs"
933 permission="launchpad.Edit"
934 template="../templates/official-bug-target-manage-tags.pt"/>
935+ <browser:page
936+ name="+patches"
937+ for="lp.bugs.interfaces.bugtarget.IHasBugs"
938+ class="lp.bugs.browser.bugtarget.BugsPatchesView"
939+ facet="bugs"
940+ permission="zope.Public"
941+ template="../templates/bugtarget-patches.pt"/>
942 </facet>
943 <browser:page
944 name="+bugtarget-macros-search"
945
946=== modified file 'lib/lp/bugs/interfaces/bugtarget.py'
947--- lib/lp/bugs/interfaces/bugtarget.py 2009-08-18 11:12:06 +0000
948+++ lib/lp/bugs/interfaces/bugtarget.py 2010-02-02 01:39:18 +0000
949@@ -1,4 +1,4 @@
950-# Copyright 2009 Canonical Ltd. This software is licensed under the
951+# Copyright 2010 Canonical Ltd. This software is licensed under the
952 # GNU Affero General Public License version 3 (see the file LICENSE).
953
954 # pylint: disable-msg=E0211,E0213
955
956=== modified file 'lib/lp/bugs/interfaces/bugtask.py'
957--- lib/lp/bugs/interfaces/bugtask.py 2010-01-23 21:42:36 +0000
958+++ lib/lp/bugs/interfaces/bugtask.py 2010-02-02 01:39:18 +0000
959@@ -36,6 +36,7 @@
960 'IUpstreamProductBugTaskSearch',
961 'RESOLVED_BUGTASK_STATUSES',
962 'UNRESOLVED_BUGTASK_STATUSES',
963+ 'UNRESOLVED_PLUS_FIXRELEASED_BUGTASK_STATUSES',
964 'UserCannotEditBugTaskImportance',
965 'UserCannotEditBugTaskMilestone',
966 'UserCannotEditBugTaskStatus',
967@@ -287,6 +288,9 @@
968 BugTaskStatus.INPROGRESS,
969 BugTaskStatus.FIXCOMMITTED)
970
971+UNRESOLVED_PLUS_FIXRELEASED_BUGTASK_STATUSES = (
972+ UNRESOLVED_BUGTASK_STATUSES + (BugTaskStatus.FIXRELEASED,))
973+
974 RESOLVED_BUGTASK_STATUSES = (
975 BugTaskStatus.FIXRELEASED,
976 BugTaskStatus.INVALID,
977
978=== modified file 'lib/lp/bugs/model/bugtarget.py'
979--- lib/lp/bugs/model/bugtarget.py 2010-01-21 16:47:24 +0000
980+++ lib/lp/bugs/model/bugtarget.py 2010-02-02 01:39:18 +0000
981@@ -1,4 +1,4 @@
982-# Copyright 2009 Canonical Ltd. This software is licensed under the
983+# Copyright 2010 Canonical Ltd. This software is licensed under the
984 # GNU Affero General Public License version 3 (see the file LICENSE).
985
986 # pylint: disable-msg=E0611,W0212
987
988=== added directory 'lib/lp/bugs/stories/patches-view'
989=== added file 'lib/lp/bugs/stories/patches-view/patches-view.txt'
990--- lib/lp/bugs/stories/patches-view/patches-view.txt 1970-01-01 00:00:00 +0000
991+++ lib/lp/bugs/stories/patches-view/patches-view.txt 2010-02-02 01:39:18 +0000
992@@ -0,0 +1,325 @@
993+Patches View
994+============
995+
996+Patches View by Product
997+-----------------------
998+
999+We have a view listing patches attached to bugs that target a given
1000+product. At first, the product is new and has no bugs.
1001+
1002+ >>> patchy_product = factory.doAsUser(
1003+ ... 'foo.bar@canonical.com', factory.makeProduct,
1004+ ... name='patchy-product-1')
1005+
1006+We don't see any patches when we open the patches view.
1007+
1008+ >>> def show_patches_view(expected_contents):
1009+ ... for tag in find_tags_by_class(
1010+ ... expected_contents, 'listing'):
1011+ ... print extract_text(tag)
1012+ ... messages = find_tags_by_class(expected_contents, 'informational')
1013+ ... if len(messages) > 0:
1014+ ... print extract_text(messages[0])
1015+
1016+ >>> user_browser.open(
1017+ ... 'http://bugs.launchpad.dev/patchy-product-1/+patches')
1018+ >>> show_patches_view(user_browser.contents)
1019+ There are no patches associated with Patchy-product-1 at this time.
1020+
1021+After the product has a bug, it still doesn't show up in the patches
1022+view, because that bug has no patch attachments.
1023+
1024+ >>> from lp.bugs.interfaces.bugtask import (
1025+ ... BugTaskImportance, BugTaskStatus)
1026+ >>> def make_bug(
1027+ ... title, product, importance=BugTaskImportance.UNDECIDED,
1028+ ... status=BugTaskStatus.NEW):
1029+ ... bug = factory.makeBug(title=title, product=product)
1030+ ... bug.default_bugtask.transitionToImportance(
1031+ ... importance, product.owner)
1032+ ... bug.default_bugtask.transitionToStatus(
1033+ ... status, product.owner)
1034+ ... return bug
1035+
1036+ >>> bug_a = factory.doAsUser(
1037+ ... 'foo.bar@canonical.com', make_bug,
1038+ ... title="bug_a title", product=patchy_product)
1039+ >>> user_browser.open(
1040+ ... 'http://bugs.launchpad.dev/patchy-product-1/+patches')
1041+ >>> show_patches_view(user_browser.contents)
1042+ There are no patches associated with Patchy-product-1 at this time.
1043+
1044+
1045+After we add a non-patch attachment to that bug, the patches view
1046+still shows no patches.
1047+
1048+ >>> factory.doAsUser('foo.bar@canonical.com', factory.makeBugAttachment,
1049+ ... bug=bug_a, is_patch=False)
1050+ <BugAttachment at...
1051+ >>> user_browser.open('http://bugs.launchpad.dev/patchy-product-1/+patches')
1052+ >>> show_patches_view(user_browser.contents)
1053+ There are no patches associated with Patchy-product-1 at this time.
1054+
1055+After we add a patch attachment that's one day old, we see it in the
1056+patches view.
1057+
1058+ >>> patch_submitter = factory.doAsUser(
1059+ ... 'foo.bar@canonical.com', factory.makePerson,
1060+ ... name="patchy-person", displayname="Patchy Person")
1061+ >>> factory.doAsUser(
1062+ ... 'foo.bar@canonical.com', factory.makeBugAttachment,
1063+ ... comment="comment about patch a",
1064+ ... filename="patch_a.diff", owner=patch_submitter,
1065+ ... description="description of patch a", bug=bug_a, is_patch=True)
1066+ <BugAttachment at...
1067+ >>> user_browser.open(
1068+ ... 'http://bugs.launchpad.dev/patchy-product-1/+patches')
1069+ >>> show_patches_view(user_browser.contents)
1070+ Bug Importance Status Patch Age
1071+ Bug #16: bug_a title Undecided New ...second...
1072+ From: Patchy Person
1073+ Link: patch_a.diff description of patch a
1074+
1075+After creating some more bugs, with some non-patch and some patch
1076+attachments...
1077+
1078+ >>> bug_b = factory.doAsUser(
1079+ ... 'foo.bar@canonical.com', make_bug,
1080+ ... title="bug_b title", product=patchy_product,
1081+ ... importance=BugTaskImportance.CRITICAL,
1082+ ... status=BugTaskStatus.CONFIRMED)
1083+ >>> bug_c = factory.doAsUser(
1084+ ... 'foo.bar@canonical.com', make_bug,
1085+ ... title="bug_c title", product=patchy_product,
1086+ ... importance=BugTaskImportance.WISHLIST,
1087+ ... status=BugTaskStatus.FIXCOMMITTED)
1088+ >>> factory.doAsUser(
1089+ ... 'foo.bar@canonical.com', factory.makeBugAttachment,
1090+ ... comment="comment about patch b",
1091+ ... filename="patch_b.diff", owner=patch_submitter,
1092+ ... description="description of patch b", bug=bug_b, is_patch=True)
1093+ <BugAttachment at...
1094+ >>> factory.doAsUser(
1095+ ... 'foo.bar@canonical.com', factory.makeBugAttachment,
1096+ ... comment="comment about patch c",
1097+ ... filename="patch_c.diff", owner=patch_submitter,
1098+ ... description="description of patch c", bug=bug_b, is_patch=True)
1099+ <BugAttachment at...
1100+ >>> factory.doAsUser(
1101+ ... 'foo.bar@canonical.com', factory.makeBugAttachment,
1102+ ... bug=bug_c, is_patch=False)
1103+ <BugAttachment at...
1104+ >>> factory.doAsUser(
1105+ ... 'foo.bar@canonical.com', factory.makeBugAttachment,
1106+ ... comment="comment about patch d",
1107+ ... filename="patch_d.diff", owner=patch_submitter,
1108+ ... description="description of patch d", bug=bug_c, is_patch=True)
1109+ <BugAttachment at...
1110+ >>> factory.doAsUser(
1111+ ... 'foo.bar@canonical.com', factory.makeBugAttachment,
1112+ ... comment="comment about patch e",
1113+ ... filename="patch_e.diff", owner=patch_submitter,
1114+ ... description="description of patch e", bug=bug_c, is_patch=True)
1115+ <BugAttachment at...
1116+ >>> factory.doAsUser(
1117+ ... 'foo.bar@canonical.com', factory.makeBugAttachment,
1118+ ... comment="comment about patch f",
1119+ ... filename="patch_f.diff", owner=patch_submitter,
1120+ ... description="description of patch f", bug=bug_c, is_patch=True)
1121+ <BugAttachment at...
1122+
1123+...the youngest patch on each bug is visible is the patch report.
1124+
1125+ >>> user_browser.open('http://bugs.launchpad.dev/patchy-product-1/+patches')
1126+ >>> show_patches_view(user_browser.contents)
1127+ Bug Importance Status Patch Age
1128+ Bug #17: bug_b title Critical Confirmed ...second...
1129+ From: Patchy Person
1130+ Link: patch_c.diff description of patch c
1131+ Bug #18: bug_c title Wishlist Fix Committed ...second...
1132+ From: Patchy Person
1133+ Link: patch_f.diff description of patch f
1134+ Bug #16: bug_a title Undecided New ...second...
1135+ From: Patchy Person
1136+ Link: patch_a.diff description of patch a
1137+
1138+We can sort patches by importance and status.
1139+
1140+ >>> user_browser.getControl(name="orderby").value = ['-importance']
1141+ >>> user_browser.getControl("sort").click()
1142+ >>> user_browser.url
1143+ 'http://bugs.launchpad.dev/patchy-product-1/+patches?orderby=-importance'
1144+ >>> show_patches_view(user_browser.contents)
1145+ Bug Importance Status Patch Age
1146+ Bug #17: bug_b title Critical Confirmed ...second...
1147+ From: Patchy Person
1148+ Link: patch_c.diff description of patch c
1149+ Bug #18: bug_c title Wishlist Fix Committed ...second...
1150+ From: Patchy Person
1151+ Link: patch_f.diff description of patch f
1152+ Bug #16: bug_a title Undecided New ...second...
1153+ From: Patchy Person
1154+ Link: patch_a.diff description of patch a
1155+
1156+ >>> user_browser.getControl(name="orderby").value = ['status']
1157+ >>> user_browser.getControl("sort").click()
1158+ >>> user_browser.url
1159+ 'http://bugs.launchpad.dev/patchy-product-1/+patches?orderby=status'
1160+ >>> show_patches_view(user_browser.contents)
1161+ Bug Importance Status Patch Age
1162+ Bug #16: bug_a title Undecided New ...second...
1163+ From: Patchy Person
1164+ Link: patch_a.diff description of patch a
1165+ Bug #17: bug_b title Critical Confirmed ...second...
1166+ From: Patchy Person
1167+ Link: patch_c.diff description of patch c
1168+ Bug #18: bug_c title Wishlist Fix Committed ...second...
1169+ From: Patchy Person
1170+ Link: patch_f.diff description of patch f
1171+
1172+Bugs in a product series show up in the patches view for that series.
1173+
1174+ >>> from zope.component import getUtility
1175+ >>> from lp.registry.interfaces.distribution import IDistributionSet
1176+ >>> def make_bugtask(
1177+ ... # Meta-factory for making bugtasks.
1178+ ... #
1179+ ... # In all instances where a distro is needed, defaults to
1180+ ... # 'ubuntu' distro.
1181+ ... #
1182+ ... # :param bug: The bug with which the task is associated.
1183+ ... # :param target: The target to which to attach this bug.
1184+ ... # If the target is a string, then it names the target
1185+ ... # object, and exactly one of following two boolean
1186+ ... # parameters must be set to indicate the object type.
1187+ ... # :param target_is_spkg_name: If true, target is a string
1188+ ... # indicating the name of the source package for the task.
1189+ ... # :param target_is_distroseries_name: If true, target is a string
1190+ ... # indicating the name of the distroseries for the task.
1191+ ... # :param importance: The initial importance of the bugtask;
1192+ ... # if None, just use the default importance.
1193+ ... # :param status: The initial status of the bugtask;
1194+ ... # if None, just use the default status.
1195+ ... bug, target,
1196+ ... target_is_spkg_name=False,
1197+ ... target_is_distroseries_name=False,
1198+ ... importance=None, status=None):
1199+ ... ubuntu_distro = getUtility(IDistributionSet).getByName('ubuntu')
1200+ ... if target_is_spkg_name:
1201+ ... target = ubuntu_distro.getSourcePackage(target)
1202+ ... if target_is_distroseries_name:
1203+ ... target = ubuntu_distro.getSeries(target)
1204+ ... bugtask = factory.makeBugTask(bug=bug, target=target)
1205+ ... if importance is not None:
1206+ ... bugtask.transitionToImportance(importance, ubuntu_distro.owner)
1207+ ... if status is not None:
1208+ ... bugtask.transitionToStatus(status, ubuntu_distro.owner)
1209+ >>> patchy_product_series = patchy_product.getSeries('trunk')
1210+ >>> factory.doAsUser(
1211+ ... 'foo.bar@canonical.com', make_bugtask,
1212+ ... bug=bug_a, target=patchy_product_series)
1213+ >>> factory.doAsUser(
1214+ ... 'foo.bar@canonical.com', make_bugtask,
1215+ ... bug=bug_c, target=patchy_product_series)
1216+ >>> user_browser.open(
1217+ ... 'https://launchpad.dev/patchy-product-1/trunk/+patches')
1218+ >>> show_patches_view(user_browser.contents)
1219+ Bug Importance Status Patch Age
1220+ Bug #18: bug_c title Wishlist Fix Committed ...second...
1221+ From: Patchy Person
1222+ Link: patch_f.diff
1223+ description of patch f
1224+ Bug #16: bug_a title Undecided New ...second...
1225+ From: Patchy Person
1226+ Link: patch_a.diff
1227+ description of patch a
1228+
1229+Patches View by Distro
1230+----------------------
1231+
1232+The patches view also works for distributions, and it shows the target
1233+package when viewed via a distribution.
1234+
1235+ >>> factory.doAsUser(
1236+ ... 'foo.bar@canonical.com', make_bugtask, bug=bug_a,
1237+ ... target='evolution', target_is_spkg_name=True,
1238+ ... importance=BugTaskImportance.MEDIUM,
1239+ ... status=BugTaskStatus.FIXRELEASED)
1240+ >>> factory.doAsUser(
1241+ ... 'foo.bar@canonical.com', make_bugtask, bug=bug_c,
1242+ ... target='a52dec', target_is_spkg_name=True,
1243+ ... importance=BugTaskImportance.HIGH,
1244+ ... status=BugTaskStatus.TRIAGED)
1245+
1246+ >>> user_browser.open('http://bugs.launchpad.dev/ubuntu/+patches')
1247+ >>> show_patches_view(user_browser.contents)
1248+ Bug Importance Status Package Patch Age
1249+ Bug #18: bug_c title High Triaged a52dec ...second...
1250+ From: Patchy Person
1251+ Link: patch_f.diff description of patch f
1252+ Bug #16: bug_a title Medium Fix Released evolution ...second...
1253+ From: Patchy Person
1254+ Link: patch_a.diff description of patch a
1255+
1256+Patches View by Distro Series
1257+-----------------------------
1258+
1259+The patches view works for distro series.
1260+
1261+ >>> factory.doAsUser(
1262+ ... 'foo.bar@canonical.com', make_bugtask, bug=bug_a,
1263+ ... target='hoary', target_is_distroseries_name=True)
1264+ >>> factory.doAsUser(
1265+ ... 'foo.bar@canonical.com', make_bugtask, bug=bug_a,
1266+ ... target='warty', target_is_distroseries_name=True)
1267+ >>> factory.doAsUser(
1268+ ... 'foo.bar@canonical.com', make_bugtask, bug=bug_b,
1269+ ... target='warty', target_is_distroseries_name=True)
1270+ >>> factory.doAsUser(
1271+ ... 'foo.bar@canonical.com', make_bugtask, bug=bug_c,
1272+ ... target='warty', target_is_distroseries_name=True,
1273+ ... importance=BugTaskImportance.HIGH,
1274+ ... status=BugTaskStatus.TRIAGED)
1275+ >>> user_browser.open('https://launchpad.dev/ubuntu/hoary/+patches')
1276+ >>> show_patches_view(user_browser.contents)
1277+ Bug Importance Status Package Patch Age
1278+ Bug #16: bug_a title Undecided New hoary ...second...
1279+ From: Patchy Person
1280+ Link: patch_a.diff
1281+ description of patch a
1282+ >>> user_browser.open('https://launchpad.dev/ubuntu/warty/+patches')
1283+ >>> show_patches_view(user_browser.contents)
1284+ Bug Importance Status Package Patch Age
1285+ Bug #18: bug_c title High Triaged warty ...second...
1286+ From: Patchy Person
1287+ Link: patch_f.diff description of patch f
1288+ Bug #16: bug_a title Undecided New warty ...second...
1289+ From: Patchy Person
1290+ Link: patch_a.diff
1291+ description of patch a
1292+ Bug #17: bug_b title Undecided New warty ...second...
1293+ From: Patchy Person
1294+ Link: patch_c.diff
1295+ description of patch c
1296+
1297+Patches View by Source Package
1298+------------------------------
1299+
1300+The patches view works for source packages too. The view doesn't show
1301+target package column in that case, because the package is implied.
1302+
1303+ >>> user_browser.open(
1304+ ... 'http://bugs.launchpad.dev/ubuntu/+source/a52dec/+patches')
1305+ >>> show_patches_view(user_browser.contents)
1306+ Bug Importance Status Patch Age
1307+ Bug #18: bug_c title High Triaged ...second...
1308+ From: Patchy Person
1309+ Link: patch_f.diff description of patch f
1310+ >>> user_browser.open(
1311+ ... 'http://bugs.launchpad.dev/ubuntu/+source/evolution/+patches')
1312+ >>> show_patches_view(user_browser.contents)
1313+ Bug Importance Status Patch Age
1314+ Bug #16: bug_a title Medium Fix Released ...second...
1315+ From: Patchy Person
1316+ Link: patch_a.diff description of patch a
1317+
1318
1319=== added file 'lib/lp/bugs/templates/bugtarget-patches.pt'
1320--- lib/lp/bugs/templates/bugtarget-patches.pt 1970-01-01 00:00:00 +0000
1321+++ lib/lp/bugs/templates/bugtarget-patches.pt 2010-02-02 01:39:18 +0000
1322@@ -0,0 +1,136 @@
1323+<html
1324+ xmlns="http://www.w3.org/1999/xhtml"
1325+ xmlns:tal="http://xml.zope.org/namespaces/tal"
1326+ xmlns:metal="http://xml.zope.org/namespaces/metal"
1327+ xmlns:i18n="http://xml.zope.org/namespaces/i18n"
1328+ xml:lang="en"
1329+ lang="en"
1330+ dir="ltr"
1331+ metal:use-macro="view/macro:page/main_only"
1332+ i18n:domain="malone"
1333+>
1334+
1335+ <body>
1336+ <div metal:fill-slot="main" class="tab-bugs"
1337+ tal:define="batchnav view/batchedPatchTasks;
1338+ batch batchnav/currentBatch">
1339+ <div tal:condition="python: len(batch) > 0">
1340+
1341+ <form class="lesser" id="sort" method="get"
1342+ tal:attributes="action string:${context/fmt:url}/+patches">
1343+
1344+ <script type="text/javascript">
1345+ <!--
1346+ YUI().use('base', 'node', 'event', function(Y) {
1347+ Y.on('domready', function(e) {
1348+ Y.get('#sort-button').setStyle('display', 'none');
1349+ Y.get('#orderby').on('change', function(e) {
1350+ Y.get('#sort').submit();
1351+ });
1352+ });
1353+ });
1354+ // -->
1355+ </script>
1356+
1357+ Order&nbsp;by:&nbsp;<select
1358+ name="orderby" id="orderby" size="1"
1359+ tal:define="orderby request/orderby|string:-importance">
1360+ <option
1361+ value="-importance"
1362+ tal:attributes="selected python:orderby == '-importance'"
1363+ >importance</option>
1364+ <option
1365+ value="status"
1366+ tal:attributes="selected python:orderby == 'status'"
1367+ >status</option>
1368+ <option
1369+ tal:condition="view/shouldShowTargetName"
1370+ tal:attributes="selected python:orderby == 'targetname'"
1371+ value="targetname"
1372+ >package</option>
1373+ <option
1374+ value="datecreated"
1375+ tal:attributes="selected python:orderby == 'datecreated'"
1376+ >oldest first</option>
1377+ <option
1378+ value="-datecreated"
1379+ tal:attributes="selected python:orderby == '-datecreated'"
1380+ >newest first</option>
1381+ </select>
1382+ <input type="submit" value="sort" id="sort-button"/>
1383+ </form>
1384+
1385+ <table class="listing"><thead>
1386+ <tr>
1387+ <th style="padding-right: 1em;"
1388+ >Bug</th>
1389+ <th style="padding-right: 1em;"
1390+ >Importance</th>
1391+ <th style="padding-right: 1em;"
1392+ >Status</th>
1393+ <th style="padding-right: 1em;"
1394+ tal:condition="view/shouldShowTargetName"
1395+ >Package</th>
1396+ <th style="padding-right: 1em;"
1397+ >Patch Age</th>
1398+ </tr>
1399+ </thead>
1400+ <tr tal:repeat="patch_task batch">
1401+ <td style="padding-right: 1em;"
1402+ ><a tal:replace="structure patch_task/fmt:link" /></td>
1403+ <td style="padding-right: 1em;"
1404+ tal:content="patch_task/importance/title"
1405+ tal:attributes="class string:importance${patch_task/importance/name}"></td>
1406+ <td style="padding-right: 1em;"
1407+ tal:content="patch_task/status/title"
1408+ tal:attributes="class string:status${patch_task/status/name}"></td>
1409+ <td style="padding-right: 1em;"
1410+ tal:condition="view/shouldShowTargetName"
1411+ ><a tal:attributes="href patch_task/target/fmt:url"
1412+ tal:content="patch_task/target/name"
1413+ ></a></td>
1414+ <td style="padding-right: 1em;"
1415+ tal:define="p python:view.youngestPatch(patch_task.bug);
1416+ age python:view.patchAge(p)"
1417+ tal:attributes="id string:patch-cell-${repeat/patch_task/index}"
1418+ ><a tal:attributes="href p/libraryfile/http_url"
1419+ tal:content="age/fmt:approximateduration/use-digits"
1420+ ></a>
1421+ <div class="popupTitle"
1422+ tal:attributes="id string:patch-popup-${repeat/patch_task/index};">
1423+ <p tal:define="submitter p/message/owner"
1424+ ><strong>From:</strong>
1425+ <a tal:replace="structure submitter/fmt:link"></a><br/>
1426+ <strong>Link:</strong>
1427+ <a tal:attributes="href p/libraryfile/http_url"
1428+ tal:content="p/libraryfile/filename"
1429+ ></a></p>
1430+ <p tal:content="string:${p/title}"></p>
1431+ </div>
1432+ <script type="text/javascript" tal:content="string:
1433+ YUI().use('base', 'node', 'event', function(Y) {
1434+ Y.on('domready', function(e) {
1435+ var cell_id = '#patch-cell-${repeat/patch_task/index}';
1436+ var target_id = '#patch-popup-${repeat/patch_task/index}';
1437+ var elt = Y.get(cell_id);
1438+ elt.on('mouseover', function(e) {
1439+ Y.get(target_id).setStyle('display', 'block');
1440+ });
1441+ elt.on('mouseout', function(e) {
1442+ Y.get(target_id).setStyle('display', 'none');
1443+ });
1444+ });
1445+ });"/>
1446+ </td>
1447+ </tr></table>
1448+ <div tal:replace="structure batchnav/@@+navigation-links-lower" />
1449+ </div>
1450+ <div class="informational message"
1451+ tal:condition="python: len(batch) == 0">
1452+ There are no patches associated with
1453+ <tal:target replace="context/displayname" />
1454+ at this time.
1455+ </div>
1456+ </div><!-- main -->
1457+ </body>
1458+</html>
1459
1460=== modified file 'lib/lp/testing/factory.py'
1461--- lib/lp/testing/factory.py 2010-01-30 05:27:48 +0000
1462+++ lib/lp/testing/factory.py 2010-02-02 01:39:18 +0000
1463@@ -130,7 +130,7 @@
1464 from lp.soyuz.interfaces.component import IComponentSet
1465 from lp.soyuz.interfaces.packageset import IPackagesetSet
1466 from lp.soyuz.model.buildqueue import BuildQueue
1467-from lp.testing import run_with_login, time_counter
1468+from lp.testing import run_with_login, time_counter, login, logout
1469
1470 SPACE = ' '
1471
1472@@ -239,6 +239,19 @@
1473 %s
1474 ''')
1475
1476+ def doAsUser(self, user, factory_method, **factory_args):
1477+ """Perform a factory method while temporarily logged in as a user.
1478+ :param user: The user to log in as, and then to log out from.
1479+ :param factory_method: The factory method to invoke while logged in.
1480+ :param factory_args: Keyword arguments to pass to factory_method."""
1481+ login(user)
1482+ try:
1483+ result = factory_method(**factory_args)
1484+ transaction.commit()
1485+ finally:
1486+ logout()
1487+ return result
1488+
1489 def makeCopyArchiveLocation(self, distribution=None, owner=None,
1490 name=None, enabled=True):
1491 """Create and return a new arbitrary location for copy packages."""
1492@@ -1084,7 +1097,7 @@
1493
1494 def makeBugAttachment(self, bug=None, owner=None, data=None,
1495 comment=None, filename=None, content_type=None,
1496- description=None):
1497+ description=None, is_patch=None):
1498 """Create and return a new bug attachment.
1499
1500 :param bug: An `IBug` or a bug ID or name, or None, in which
1501@@ -1099,6 +1112,7 @@
1502 string will be used.
1503 :param content_type: The MIME-type of this file.
1504 :param description: The description of the attachment.
1505+ :param is_patch: Iff true, this attachment is a patch.
1506 :return: An `IBugAttachment`.
1507 """
1508 if bug is None:
1509@@ -1115,9 +1129,16 @@
1510 comment = self.getUniqueString()
1511 if filename is None:
1512 filename = self.getUniqueString()
1513+ # If the default value of is_patch when creating a new
1514+ # BugAttachment should ever change, we don't want to interfere
1515+ # with that. So, we only override it if our caller explicitly
1516+ # passed it.
1517+ other_params = {}
1518+ if is_patch is not None:
1519+ other_params['is_patch'] = is_patch
1520 return bug.addAttachment(
1521 owner, data, comment, filename, content_type=content_type,
1522- description=description)
1523+ description=description, **other_params)
1524
1525 def makeSignedMessage(self, msgid=None, body=None, subject=None,
1526 attachment_contents=None, force_transfer_encoding=False,