Merge lp:~adeuring/launchpad/bug-511240-bug-heat-include-duplicate-bugs into lp:launchpad

Proposed by Abel Deuring
Status: Merged
Approved by: Abel Deuring
Approved revision: no longer in the source branch.
Merge reported by: Deryck Hodge
Merged at revision: not available
Proposed branch: lp:~adeuring/launchpad/bug-511240-bug-heat-include-duplicate-bugs
Merge into: lp:launchpad
Diff against target: 17438 lines (+6669/-2949)
211 files modified
.bzrignore (+2/-0)
configs/development/launchpad-lazr.conf (+3/-0)
configs/testrunner/launchpad-lazr.conf (+5/-0)
cronscripts/process-apport-blobs.py (+33/-0)
daemons/cache-database-replication-lag.py (+53/-0)
database/replication/helpers.py (+9/-0)
database/sampledata/current-dev.sql (+214/-136)
database/sampledata/current.sql (+214/-136)
database/schema/Makefile (+2/-0)
database/schema/comments.sql (+61/-62)
database/schema/diagram.py (+2/-3)
database/schema/patch-2207-23-0.sql (+19/-0)
database/schema/patch-2207-28-1.sql (+9/-0)
database/schema/patch-2207-29-0.sql (+34/-0)
database/schema/patch-2207-30-0.sql (+14/-0)
database/schema/patch-2207-31-0.sql (+27/-0)
database/schema/patch-2207-32-0.sql (+24/-0)
database/schema/patch-2207-33-0.sql (+9/-0)
database/schema/patch-2207-34-0.sql (+11/-0)
database/schema/patch-2207-35-0.sql (+8/-0)
database/schema/security.cfg (+41/-22)
database/schema/security.py (+2/-3)
database/schema/trusted.sql (+57/-0)
lib/canonical/config/schema-lazr.conf (+7/-1)
lib/canonical/launchpad/browser/launchpad.py (+35/-32)
lib/canonical/launchpad/browser/temporaryblobstorage.py (+48/-4)
lib/canonical/launchpad/database/account.py (+4/-0)
lib/canonical/launchpad/database/temporaryblobstorage.py (+27/-6)
lib/canonical/launchpad/doc/account.txt (+72/-61)
lib/canonical/launchpad/doc/oauth.txt (+45/-32)
lib/canonical/launchpad/doc/renamed-view.txt (+1/-1)
lib/canonical/launchpad/doc/temporaryblobstorage.txt (+45/-0)
lib/canonical/launchpad/icing/style.css (+5/-1)
lib/canonical/launchpad/interfaces/_schema_circular_imports.py (+10/-5)
lib/canonical/launchpad/interfaces/temporaryblobstorage.py (+28/-1)
lib/canonical/launchpad/javascript/code/codereview.js (+49/-34)
lib/canonical/launchpad/pagetests/webservice/xx-temporary-blob-storage.txt (+81/-0)
lib/canonical/launchpad/webapp/dbpolicy.py (+11/-19)
lib/canonical/launchpad/zcml/temporaryblobstorage.zcml (+16/-0)
lib/lp/answers/doc/person.txt (+155/-138)
lib/lp/answers/doc/projectgroup.txt (+45/-38)
lib/lp/answers/doc/question.txt (+162/-132)
lib/lp/answers/doc/questionsets.txt (+148/-139)
lib/lp/answers/doc/questiontarget.txt (+266/-245)
lib/lp/answers/doc/workflow.txt (+209/-193)
lib/lp/answers/interfaces/questionreopening.py (+1/-0)
lib/lp/archivepublisher/deathrow.py (+16/-16)
lib/lp/archivepublisher/domination.py (+34/-37)
lib/lp/archivepublisher/tests/deathrow.txt (+6/-6)
lib/lp/archivepublisher/tests/test_deathrow.py (+1/-4)
lib/lp/archivepublisher/tests/test_dominator.py (+10/-14)
lib/lp/archiveuploader/dscfile.py (+34/-1)
lib/lp/archiveuploader/nascentupload.py (+2/-5)
lib/lp/archiveuploader/tests/test_buildduploads.py (+2/-2)
lib/lp/archiveuploader/tests/test_recipeuploads.py (+75/-0)
lib/lp/archiveuploader/tests/test_uploadprocessor.py (+3/-3)
lib/lp/bugs/browser/bug.py (+0/-20)
lib/lp/bugs/browser/bugtarget.py (+129/-191)
lib/lp/bugs/browser/bugtask.py (+48/-10)
lib/lp/bugs/browser/configure.zcml (+15/-6)
lib/lp/bugs/browser/distribution_upstream_bug_report.py (+17/-5)
lib/lp/bugs/browser/tests/bug-heat-view.txt (+56/-11)
lib/lp/bugs/browser/tests/bugtarget-filebug-views.txt (+52/-38)
lib/lp/bugs/configure.zcml (+42/-3)
lib/lp/bugs/doc/bug.txt (+88/-0)
lib/lp/bugs/doc/bugattachments.txt (+71/-6)
lib/lp/bugs/doc/bugtask-search.txt (+38/-0)
lib/lp/bugs/doc/distribution-upstream-bug-report.txt (+66/-25)
lib/lp/bugs/doc/filebug-data-parser.txt (+3/-3)
lib/lp/bugs/doc/official-bug-tags.txt (+3/-3)
lib/lp/bugs/interfaces/apportjob.py (+74/-0)
lib/lp/bugs/interfaces/bug.py (+33/-0)
lib/lp/bugs/interfaces/bugtarget.py (+6/-1)
lib/lp/bugs/interfaces/bugtask.py (+8/-2)
lib/lp/bugs/model/apportjob.py (+263/-0)
lib/lp/bugs/model/bug.py (+97/-14)
lib/lp/bugs/model/bugjob.py (+1/-12)
lib/lp/bugs/model/bugtarget.py (+15/-1)
lib/lp/bugs/model/bugtask.py (+40/-36)
lib/lp/bugs/scripts/bugheat.py (+2/-8)
lib/lp/bugs/scripts/tests/test_bugheat.py (+23/-3)
lib/lp/bugs/stories/distribution/xx-distribution-upstream-bug-report.txt (+32/-16)
lib/lp/bugs/stories/guided-filebug/xx-bug-reporting-tools.txt (+37/-0)
lib/lp/bugs/stories/patches-view/patches-view.txt (+493/-0)
lib/lp/bugs/stories/webservice/xx-bug.txt (+8/-0)
lib/lp/bugs/stories/xx-bugs-statistics-portlet.txt (+52/-46)
lib/lp/bugs/templates/bugtarget-filebug-search.pt (+9/-1)
lib/lp/bugs/templates/bugtarget-patches.pt (+115/-0)
lib/lp/bugs/templates/bugtarget-portlet-bugfilters-content.pt (+10/-0)
lib/lp/bugs/templates/distribution-upstream-bug-report.pt (+21/-1)
lib/lp/bugs/tests/bug.py (+45/-1)
lib/lp/bugs/tests/test_apportjob.py (+426/-0)
lib/lp/bugs/tests/test_bugheat.py (+209/-4)
lib/lp/bugs/utilities/filebugdataparser.py (+168/-0)
lib/lp/buildmaster/interfaces/buildbase.py (+15/-0)
lib/lp/buildmaster/model/buildbase.py (+39/-4)
lib/lp/code/browser/branch.py (+5/-3)
lib/lp/code/browser/branchmergeproposal.py (+40/-1)
lib/lp/code/browser/configure.zcml (+7/-0)
lib/lp/code/browser/tests/test_branchmergeproposal.py (+9/-20)
lib/lp/code/configure.zcml (+9/-2)
lib/lp/code/doc/branch-merge-proposal-notifications.txt (+1/-1)
lib/lp/code/doc/codereviewcomment.txt (+2/-8)
lib/lp/code/interfaces/branch.py (+15/-18)
lib/lp/code/interfaces/branchmergeproposal.py (+7/-3)
lib/lp/code/interfaces/sourcepackagerecipebuild.py (+7/-0)
lib/lp/code/mail/branchmergeproposal.py (+15/-22)
lib/lp/code/mail/codehandler.py (+4/-7)
lib/lp/code/mail/tests/test_branchmergeproposal.py (+1/-4)
lib/lp/code/mail/tests/test_codehandler.py (+24/-25)
lib/lp/code/model/branch.py (+4/-7)
lib/lp/code/model/branchmergeproposal.py (+3/-12)
lib/lp/code/model/branchmergeproposaljob.py (+0/-8)
lib/lp/code/model/sourcepackagerecipebuild.py (+23/-19)
lib/lp/code/model/tests/test_branch.py (+1/-3)
lib/lp/code/model/tests/test_branchmergeproposals.py (+1/-31)
lib/lp/code/model/tests/test_codereviewcomment.py (+0/-3)
lib/lp/code/stories/branches/xx-branchmergeproposals.txt (+1/-1)
lib/lp/code/stories/branches/xx-claiming-team-code-reviews.txt (+2/-1)
lib/lp/code/stories/webservice/xx-branchmergeproposal.txt (+3/-15)
lib/lp/code/templates/branchmergeproposal-index.pt (+53/-24)
lib/lp/code/windmill/tests/test_branchmergeproposal_commitmessage.py (+3/-3)
lib/lp/registry/configure.zcml (+2/-1)
lib/lp/registry/doc/distribution.txt (+6/-0)
lib/lp/registry/doc/private-team-roles.txt (+1/-1)
lib/lp/registry/doc/sourcepackage.txt (+13/-12)
lib/lp/registry/doc/structural-subscriptions.txt (+1/-1)
lib/lp/registry/interfaces/distroseries.py (+3/-1)
lib/lp/registry/model/distribution.py (+23/-7)
lib/lp/registry/model/distributionmirror.py (+18/-18)
lib/lp/registry/model/distributionsourcepackage.py (+23/-0)
lib/lp/registry/model/distroseries.py (+9/-4)
lib/lp/registry/model/person.py (+11/-1)
lib/lp/registry/model/product.py (+3/-3)
lib/lp/registry/model/productseries.py (+5/-0)
lib/lp/registry/model/project.py (+2/-0)
lib/lp/registry/model/sourcepackage.py (+5/-0)
lib/lp/registry/model/sourcepackagename.py (+3/-0)
lib/lp/services/job/runner.py (+11/-0)
lib/lp/services/mail/sendmail.py (+1/-2)
lib/lp/services/openid/doc/openid-rp-config.txt (+17/-9)
lib/lp/services/worlddata/doc/language.txt (+6/-0)
lib/lp/services/worlddata/model/language.py (+12/-5)
lib/lp/soyuz/browser/archive.py (+1/-1)
lib/lp/soyuz/browser/tests/archive-views.txt (+4/-4)
lib/lp/soyuz/browser/tests/distributionsourcepackagerelease-views.txt (+2/-2)
lib/lp/soyuz/browser/tests/publishing-views.txt (+2/-6)
lib/lp/soyuz/configure.zcml (+12/-26)
lib/lp/soyuz/doc/archive-dependencies.txt (+42/-2)
lib/lp/soyuz/doc/archive.txt (+5/-2)
lib/lp/soyuz/doc/build-failedtoupload-workflow.txt (+5/-0)
lib/lp/soyuz/doc/build.txt (+4/-4)
lib/lp/soyuz/doc/buildd-queuebuilder-lookup.txt (+3/-3)
lib/lp/soyuz/doc/buildd-slavescanner.txt (+5/-8)
lib/lp/soyuz/doc/distribution.txt (+4/-9)
lib/lp/soyuz/doc/distroarchseries.txt (+2/-2)
lib/lp/soyuz/doc/distroarchseriesbinarypackage.txt (+4/-8)
lib/lp/soyuz/doc/distroseries-publishing-lookups.txt (+3/-3)
lib/lp/soyuz/doc/distroseriesqueue-translations.txt (+2/-3)
lib/lp/soyuz/doc/gina-multiple-arch.txt (+4/-4)
lib/lp/soyuz/doc/gina.txt (+5/-5)
lib/lp/soyuz/doc/publishing.txt (+8/-36)
lib/lp/soyuz/doc/sourcepackagerelease-build-lookup.txt (+7/-7)
lib/lp/soyuz/doc/sourcepackagerelease.txt (+5/-1)
lib/lp/soyuz/doc/soyuz-set-of-uploads.txt (+6/-8)
lib/lp/soyuz/doc/soyuz-upload.txt.disabled (+1/-1)
lib/lp/soyuz/interfaces/archive.py (+3/-0)
lib/lp/soyuz/interfaces/archivearch.py (+11/-0)
lib/lp/soyuz/interfaces/build.py (+1/-15)
lib/lp/soyuz/interfaces/packagecloner.py (+1/-1)
lib/lp/soyuz/interfaces/processor.py (+24/-1)
lib/lp/soyuz/interfaces/publishing.py (+3/-33)
lib/lp/soyuz/interfaces/sourcepackagerelease.py (+10/-0)
lib/lp/soyuz/model/archive.py (+35/-0)
lib/lp/soyuz/model/archivearch.py (+16/-0)
lib/lp/soyuz/model/build.py (+4/-31)
lib/lp/soyuz/model/packagecloner.py (+15/-17)
lib/lp/soyuz/model/processor.py (+12/-0)
lib/lp/soyuz/model/publishing.py (+72/-194)
lib/lp/soyuz/model/queue.py (+0/-1)
lib/lp/soyuz/model/sourcepackagerelease.py (+8/-4)
lib/lp/soyuz/scripts/expire_ppa_binaries.py (+2/-2)
lib/lp/soyuz/scripts/ftpmaster.py (+1/-1)
lib/lp/soyuz/scripts/gina/handlers.py (+8/-8)
lib/lp/soyuz/scripts/tests/test_buildd_cronscripts.py (+2/-5)
lib/lp/soyuz/scripts/tests/test_copypackage.py (+11/-11)
lib/lp/soyuz/scripts/tests/test_expire_ppa_bins.py (+6/-6)
lib/lp/soyuz/scripts/tests/test_obsoletedistroseries.py (+5/-7)
lib/lp/soyuz/scripts/tests/test_processdeathrow.py (+14/-15)
lib/lp/soyuz/scripts/tests/test_publishdistro.py (+1/-1)
lib/lp/soyuz/scripts/tests/test_removepackage.py (+14/-14)
lib/lp/soyuz/stories/ppa/xx-copy-packages.txt (+1/-1)
lib/lp/soyuz/stories/ppa/xx-delete-packages.txt (+3/-3)
lib/lp/soyuz/stories/ppa/xx-ppa-packages.txt (+6/-6)
lib/lp/soyuz/stories/soyuz/xx-distributionsourcepackagerelease-pages.txt (+1/-1)
lib/lp/soyuz/stories/soyuz/xx-person-packages.txt (+3/-3)
lib/lp/soyuz/stories/webservice/xx-archive.txt (+2/-2)
lib/lp/soyuz/tests/ppa.py (+4/-6)
lib/lp/soyuz/tests/soyuz.py (+7/-12)
lib/lp/soyuz/tests/test_archive.py (+56/-3)
lib/lp/soyuz/tests/test_archivearch.py (+57/-0)
lib/lp/soyuz/tests/test_build.py (+44/-0)
lib/lp/soyuz/tests/test_buildqueue.py (+3/-3)
lib/lp/soyuz/tests/test_processor.py (+32/-0)
lib/lp/soyuz/tests/test_publishing.py (+110/-26)
lib/lp/soyuz/tests/test_publishing_models.py (+1/-1)
lib/lp/testing/factory.py (+122/-46)
lib/schoolbell/icalendar.py (+4/-5)
scripts/ftpmaster-tools/remove-package.py (+4/-4)
scripts/ftpmaster-tools/sync-source.py (+1/-1)
utilities/findimports.py (+3/-5)
To merge this branch: bzr merge lp:~adeuring/launchpad/bug-511240-bug-heat-include-duplicate-bugs
Reviewer Review Type Date Requested Status
Francis J. Lacoste (community) release-critical Approve
Gavin Panella (community) code Approve
Review via email: mp+20533@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Abel Deuring (adeuring) wrote :

This branch changes the bug heat calculation so that users affected from duplicates are included like users that are directly affected by a bug.

"make lint" complained about several unused imports, so I removed/changed the "offending" lines.

test: ./bin/test -t test_bugheat

= Launchpad lint =

Checking for conflicts. and issues in doctests and templates.
Running jslint, xmllint, pyflakes, and pylint.
Using normal rules.

Linting changed files:
  lib/lp/bugs/scripts/bugheat.py
  lib/lp/bugs/scripts/tests/test_bugheat.py
abel@klato4:~/canonical/lp-branches/bug-511240-bug-heat-include-duplicate-bugs$ make lint
utilities/shhh.py PYTHONPATH= ./bin/buildout \
                configuration:instance_name=development -c buildout.cfg
= Launchpad lint =

Checking for conflicts. and issues in doctests and templates.
Running jslint, xmllint, pyflakes, and pylint.
Using normal rules.

Linting changed files:
  lib/lp/bugs/scripts/bugheat.py
  lib/lp/bugs/scripts/tests/test_bugheat.py

Revision history for this message
Gavin Panella (allenap) wrote :
Download full text (3.5 KiB)

Hi Abel,

One tiny tiny suggestion. Other than that, it's great :)

Gavin.

> === modified file 'lib/lp/bugs/scripts/bugheat.py'
> --- lib/lp/bugs/scripts/bugheat.py 2010-02-26 21:54:43 +0000
> +++ lib/lp/bugs/scripts/bugheat.py 2010-03-03 14:54:02 +0000
> @@ -10,12 +10,6 @@
>
> from datetime import datetime
>
> -from zope.component import getUtility
> -from zope.interface import implements
> -
> -from canonical.launchpad.interfaces.looptuner import ITunableLoop
> -from canonical.launchpad.utilities.looptuner import DBLoopTuner
> -
> from lp.bugs.interfaces.bugtask import RESOLVED_BUGTASK_STATUSES
>
>
> @@ -55,7 +49,8 @@
> def _getHeatFromAffectedUsers(self):
> """Return the heat generated by the bug's affected users."""
> return (
> - self.bug.users_affected.count() * BugHeatConstants.AFFECTED_USER)
> + self.bug.users_affected_count_with_dupes *
> + BugHeatConstants.AFFECTED_USER)
>
> def _getHeatFromSubscribers(self):
> """Return the heat generated by the bug's subscribers."""
>
> === modified file 'lib/lp/bugs/scripts/tests/test_bugheat.py'
> --- lib/lp/bugs/scripts/tests/test_bugheat.py 2010-02-26 21:54:43 +0000
> +++ lib/lp/bugs/scripts/tests/test_bugheat.py 2010-03-03 14:54:02 +0000
> @@ -7,7 +7,7 @@
>
> import unittest
>
> -from datetime import datetime, timedelta
> +from datetime import timedelta
>
> from canonical.testing import LaunchpadZopelessLayer
>
> @@ -47,7 +47,7 @@
>
> def test__getHeatFromAffectedUsers(self):
> # BugHeatCalculator._getHeatFromAffectedUsers() returns the bug
> - # heat generated by users affected by the bug.
> + # heat generated by users affected by the bug and by duplicate bugs.
> # By default, the heat will be BugHeatConstants.AFFECTED_USER, since
> # there will be one affected user (the user who filed the bug).
> self.assertEqual(
> @@ -68,6 +68,23 @@
> "Heat from affected users does not match expected heat. "
> "Expected %s, got %s" % (expected_heat, actual_heat))
>
> + # When our bug has duplicates, users affected by these duplicates
> + # are included in _getHeatFromAffectedUsers() of the main bug.
> + for i in range(3):
> + dupe = self.factory.makeBug()
> + dupe.duplicateof = self.bug
> + expected_heat += BugHeatConstants.AFFECTED_USER * 3

Perhaps add a comment to say that it's the owners of the
factory-created bugs that are contributing to the heat score above?

> +
> + person = self.factory.makePerson()
> + dupe.markUserAffected(person)
> + expected_heat += BugHeatConstants.AFFECTED_USER
> + actual_heat = self.calculator._getHeatFromAffectedUsers()
> + self.assertEqual(
> + expected_heat, actual_heat,
> + "Heat from users affected by duplicate bugs does not match "
> + "expected heat. Expected %s, got %s"
> + % (expected_heat, actual_heat))
> +
> def test__getHeatFromSubscribers(self):
> # BugHeatCalculator._getHeatFromSubscribers() returns the bug
> # heat generated by users subscribed tothe bug....

Read more...

review: Approve (code)
Revision history for this message
Francis J. Lacoste (flacoste) wrote :

Land it on db-devel.

review: Approve (release-critical)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2010-01-13 22:16:04 +0000
3+++ .bzrignore 2010-03-04 20:06:42 +0000
4@@ -58,3 +58,5 @@
5 .subversion
6 lib/canonical/buildd/launchpad-files
7 .testrepository
8+.memcache.pid
9+./pipes
10
11=== modified file 'configs/development/launchpad-lazr.conf'
12--- configs/development/launchpad-lazr.conf 2010-02-12 19:26:23 +0000
13+++ configs/development/launchpad-lazr.conf 2010-03-04 20:06:42 +0000
14@@ -223,6 +223,9 @@
15 error_dir: /var/tmp/poimport
16 oops_prefix: POI
17
18+[process_apport_blobs]
19+error_dir: /var/tmp/lperr
20+
21 [supermirror_puller]
22 error_dir: /var/tmp/codehosting.test
23 oops_prefix: SMP
24
25=== modified file 'configs/testrunner/launchpad-lazr.conf'
26--- configs/testrunner/launchpad-lazr.conf 2010-02-23 11:53:24 +0000
27+++ configs/testrunner/launchpad-lazr.conf 2010-03-04 20:06:42 +0000
28@@ -193,6 +193,11 @@
29 error_dir: /var/tmp/poimport.test
30 oops_prefix: TPOI
31
32+[process_apport_blobs]
33+dbuser: process-apport-blobs
34+oops_prefix: TAPPORTBLOB
35+error_dir: /var/tmp/lperr.test
36+
37 [rosetta]
38 generate_templates: True
39
40
41=== added file 'cronscripts/process-apport-blobs.py'
42--- cronscripts/process-apport-blobs.py 1970-01-01 00:00:00 +0000
43+++ cronscripts/process-apport-blobs.py 2010-03-04 20:06:42 +0000
44@@ -0,0 +1,33 @@
45+#!/usr/bin/python2.5
46+#
47+# Copyright 2010 Canonical Ltd. This software is licensed under the
48+# GNU Affero General Public License version 3 (see the file LICENSE).
49+
50+# pylint: disable-msg=W0403
51+
52+"""Process uploaded Apport BLOBs."""
53+
54+__metaclass__ = type
55+
56+import _pythonpath
57+
58+from canonical.launchpad.webapp import errorlog
59+
60+from lp.services.job.runner import JobCronScript
61+from lp.bugs.interfaces.apportjob import IProcessApportBlobJobSource
62+
63+
64+class RunProcessApportBlobs(JobCronScript):
65+ """Run ProcessApportBlobJobs."""
66+
67+ config_name = 'process_apport_blobs'
68+ source_interface = IProcessApportBlobJobSource
69+
70+ def main(self):
71+ errorlog.globalErrorUtility.configure(self.config_name)
72+ return super(RunProcessApportBlobs, self).main()
73+
74+
75+if __name__ == '__main__':
76+ script = RunProcessApportBlobs()
77+ script.lock_and_run()
78
79=== added symlink 'daemons/_pythonpath.py'
80=== target is u'../_pythonpath.py'
81=== added file 'daemons/cache-database-replication-lag.py'
82--- daemons/cache-database-replication-lag.py 1970-01-01 00:00:00 +0000
83+++ daemons/cache-database-replication-lag.py 2010-03-04 20:06:42 +0000
84@@ -0,0 +1,53 @@
85+#!/usr/bin/python2.5
86+#
87+# Copyright 2010 Canonical Ltd. This software is licensed under the
88+# GNU Affero General Public License version 3 (see the file LICENSE).
89+
90+"""Calculate database replication lag and cache it."""
91+
92+__metaclass__ = type
93+__all__ = []
94+
95+import _pythonpath
96+
97+import sys
98+import time
99+
100+import psycopg2
101+
102+from canonical.database.sqlbase import connect, ISOLATION_LEVEL_AUTOCOMMIT
103+from canonical.launchpad.scripts import db_options, logger
104+from lp.scripts.helpers import LPOptionParser
105+
106+
107+def main(args=None):
108+ parser = LPOptionParser()
109+ db_options(parser)
110+ parser.add_option(
111+ "-s", "--sleep", dest="sleep", type="int", default=5,
112+ metavar="SECS", help="Wait SECS seconds between refreshes.")
113+
114+ (options, args) = parser.parse_args(args)
115+ if len(args) != 0:
116+ parser.error("Too many arguments.")
117+
118+ log = logger(options)
119+
120+ while True:
121+ try:
122+ con = connect(user="lagmon", isolation=ISOLATION_LEVEL_AUTOCOMMIT)
123+ cur = con.cursor()
124+ while True:
125+ cur.execute("SELECT update_replication_lag_cache()")
126+ if cur.fetchone()[0]:
127+ log.info("Updated.")
128+ else:
129+ log.error("update_replication_lag_cache() failed.")
130+ time.sleep(options.sleep)
131+ except psycopg2.Error, x:
132+ log.error("%s. Retrying.", str(x).strip())
133+ time.sleep(options.sleep)
134+
135+
136+if __name__ == '__main__':
137+ sys.exit(main())
138
139=== modified file 'database/replication/helpers.py'
140--- database/replication/helpers.py 2010-01-22 06:25:48 +0000
141+++ database/replication/helpers.py 2010-03-04 20:06:42 +0000
142@@ -44,6 +44,7 @@
143 LPMAIN_SEED = frozenset([
144 ('public', 'person'),
145 ('public', 'launchpaddatabaserevision'),
146+ ('public', 'databasereplicationlag'),
147 ('public', 'fticache'),
148 ('public', 'nameblacklist'),
149 ('public', 'openidconsumerassociation'),
150@@ -57,6 +58,7 @@
151 ('public', 'parsedapachelog'),
152 ('public', 'shipitsurvey'),
153 ('public', 'openidassociations'), # Remove this in April 2009 or later.
154+ ('public', 'databasereplicationlag'),
155 ])
156
157 # Explicitly list tables that should not be replicated. This includes the
158@@ -87,6 +89,13 @@
159 'public.auth_group_permissions',
160 'public.auth_user_groups',
161 'public.auth_user_user_permissions',
162+ 'public.oauth_nonce',
163+ 'public.oauth_consumer',
164+ 'public.oauth_token',
165+ 'public.api_user',
166+ 'public.oauth_consumer_id_seq',
167+ 'public.api_user_id_seq',
168+ 'public.oauth_nonce_id_seq',
169 ])
170
171 # Calculate IGNORED_SEQUENCES
172
173=== modified file 'database/sampledata/current-dev.sql'
174--- database/sampledata/current-dev.sql 2010-01-18 21:30:20 +0000
175+++ database/sampledata/current-dev.sql 2010-03-04 20:06:42 +0000
176@@ -754,6 +754,27 @@
177
178
179
180+
181+
182+
183+
184+
185+
186+
187+
188+
189+
190+
191+
192+
193+
194+
195+
196+
197+
198+
199+
200+
201 ALTER TABLE account DISABLE TRIGGER ALL;
202
203 INSERT INTO account (id, date_created, creation_rationale, status, date_status_set, displayname, openid_identifier, status_comment, old_openid_identifier) VALUES (1, '2005-06-06 08:59:51.591618', 8, 20, '2005-06-06 08:59:51.591618', 'Mark Shuttleworth', 'mark_oid', NULL, '123/mark');
204@@ -976,6 +997,13 @@
205 ALTER TABLE answercontact ENABLE TRIGGER ALL;
206
207
208+ALTER TABLE apportjob DISABLE TRIGGER ALL;
209+
210+
211+
212+ALTER TABLE apportjob ENABLE TRIGGER ALL;
213+
214+
215 ALTER TABLE archive DISABLE TRIGGER ALL;
216
217 INSERT INTO archive (id, owner, description, enabled, authorized_size, distribution, purpose, private, sources_cached, binaries_cached, package_description_cache, fti, buildd_secret, require_virtualized, name, publish, date_updated, total_count, pending_count, succeeded_count, failed_count, building_count, date_created, signing_key, removed_binary_retention_days, num_old_versions_published, displayname, relative_build_score, external_dependencies) VALUES (1, 17, NULL, true, NULL, 1, 1, false, NULL, NULL, NULL, NULL, NULL, false, 'primary', true, '2008-05-27 18:15:12.241774', 15, 1, 8, 5, 1, '2008-09-23 17:29:03.442606', NULL, NULL, NULL, 'Primary Archive for Ubuntu Linux', 0, NULL);
218@@ -1086,6 +1114,39 @@
219 ALTER TABLE binarypackagename ENABLE TRIGGER ALL;
220
221
222+ALTER TABLE binarypackagepublishinghistory DISABLE TRIGGER ALL;
223+
224+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (9, 12, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
225+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (11, 15, 6, 3, 1, 3, 40, '2005-05-05 00:00:00', '2005-05-05 00:01:00', '2006-01-25 00:00:00', 7, NULL, NULL, NULL, 0, 1, NULL, NULL);
226+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (12, 15, 6, 2, 3, 3, 40, '2006-01-25 00:00:00', '2006-01-25 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
227+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (13, 15, 1, 3, 3, 3, 40, '2006-01-26 00:00:00', '2006-01-26 00:01:00', '2007-09-13 00:00:01', NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
228+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (14, 15, 7, 3, 3, 3, 40, '2006-01-26 00:00:00', '2006-01-26 00:01:00', '2006-01-28 00:00:00', NULL, NULL, NULL, NULL, 0, 3, NULL, NULL);
229+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (15, 12, 7, 2, 3, 3, 40, '2006-01-26 00:00:00', '2006-01-26 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, 3, NULL, NULL);
230+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (16, 15, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-24 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
231+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (17, 16, 1, 2, 1, 1, 10, '2005-07-06 00:00:00', '2005-08-20 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
232+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (18, 17, 1, 3, 1, 1, 10, '2005-08-07 00:00:00', '2005-08-22 00:00:00', '2005-08-22 00:00:01', NULL, NULL, '2005-08-22 00:00:02', '2005-08-23 00:00:00', 0, 1, NULL, NULL);
233+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (19, 18, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-20 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
234+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (20, 17, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-20 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
235+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (21, 18, 11, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-20 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
236+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (22, 20, 8, 4, 1, 1, 40, '2006-09-13 00:00:00', '2006-09-13 00:00:01', '2006-09-13 00:00:01', NULL, NULL, '2006-09-13 00:00:02', '2006-09-13 00:00:03', 0, 1, 1, 'nah ...');
237+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (23, 6, 1, 4, 1, 1, 40, '2006-12-01 00:00:00', '2006-12-01 00:00:01', '2006-12-01 00:00:01', NULL, NULL, '2006-12-01 00:00:02', '2006-12-01 00:00:03', 0, 1, 28, 'I do not like it either');
238+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (24, 21, 1, 2, 1, 1, 40, '2006-12-01 00:00:00', '2006-12-01 00:00:01', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
239+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (25, 12, 1, 2, 1, 1, 10, '2007-01-19 00:00:00', '2007-02-19 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 8, NULL, NULL);
240+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (26, 22, 1, 2, 1, 1, 40, '2006-04-11 13:00:00', '2006-04-11 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
241+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (27, 22, 1, 2, 1, 1, 40, '2007-07-10 13:00:00', '2007-07-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, 9, NULL, NULL);
242+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (28, 23, 1, 2, 1, 1, 40, '2007-07-10 13:00:00', '2007-07-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, 9, NULL, NULL);
243+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (29, 23, 12, 2, 1, 1, 40, '2007-07-10 13:00:00', '2007-07-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, 9, NULL, NULL);
244+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (30, 24, 12, 2, 1, 1, 40, '2007-08-10 13:00:00', '2007-08-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, 9, NULL, NULL);
245+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (31, 25, 8, 2, 5, 7, 20, '2007-08-09 21:55:39.561526', '2007-08-09 21:56:39.561526', NULL, NULL, NULL, NULL, NULL, 0, 12, NULL, NULL);
246+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (32, 26, 12, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
247+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (33, 27, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
248+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (34, 27, 12, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
249+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (35, 24, 12, 2, 1, 1, 40, '2007-08-10 13:00:00', '2007-08-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, 10, NULL, NULL);
250+
251+
252+ALTER TABLE binarypackagepublishinghistory ENABLE TRIGGER ALL;
253+
254+
255 ALTER TABLE binarypackagerelease DISABLE TRIGGER ALL;
256
257 INSERT INTO binarypackagerelease (id, binarypackagename, version, summary, description, build, binpackageformat, component, section, priority, shlibdeps, depends, recommends, suggests, conflicts, replaces, provides, essential, installedsize, architecturespecific, fti, datecreated, pre_depends, enhances, breaks) VALUES (6, 6, '1.0', 'foobar is bad', 'foobar should be removed', 6, 1, 1, 1, 40, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, NULL, false, NULL, '2006-12-01 17:50:10.878712', NULL, NULL, NULL);
258@@ -1289,19 +1350,19 @@
259
260 ALTER TABLE bug DISABLE TRIGGER ALL;
261
262-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 (1, '2004-01-01 20:58:04.553583', NULL, 'Firefox does not support SVG', 'Firefox needs to support embedded SVG images, now that the standard has been finalised.
263+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, latest_patch_uploaded) VALUES (1, '2004-01-01 20:58:04.553583', NULL, 'Firefox does not support SVG', 'Firefox needs to support embedded SVG images, now that the standard has been finalised.
264
265-The SVG standard 1.0 is complete, and draft implementations for Firefox exist. One of these implementations needs to be integrated with the base install of Firefox. Ideally, the implementation needs to include support for the manipulation of SVG objects from JavaScript to enable interactive and dynamic SVG drawings.', 12, NULL, NULL, false, false, '2006-05-19 06:37:40.344941', NULL, NULL, NULL, 0, 2, 0, 0, 0, NULL);
266-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 (2, '2004-01-02 20:58:04.572546', 'blackhole', 'Blackhole Trash folder', 'The Trash folder seems to have significant problems! At the moment, dragging an item to the trash results in immediate deletion. The item does not appear in the Trash, it is just deleted from my hard disk. There is no undo or ability to recover the deleted file. Help!', 12, NULL, NULL, false, false, '2006-07-14 08:47:36.124403', NULL, NULL, NULL, 0, 3, 0, 0, 0, NULL);
267-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 (3, '2004-01-03 00:00:00', NULL, 'Bug Title Test', 'Shirtpkdf user@domain.org lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xo
268+The SVG standard 1.0 is complete, and draft implementations for Firefox exist. One of these implementations needs to be integrated with the base install of Firefox. Ideally, the implementation needs to include support for the manipulation of SVG objects from JavaScript to enable interactive and dynamic SVG drawings.', 12, NULL, NULL, false, false, '2006-05-19 06:37:40.344941', NULL, NULL, NULL, 0, 2, 0, 0, 0, NULL, NULL);
269+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, latest_patch_uploaded) VALUES (2, '2004-01-02 20:58:04.572546', 'blackhole', 'Blackhole Trash folder', 'The Trash folder seems to have significant problems! At the moment, dragging an item to the trash results in immediate deletion. The item does not appear in the Trash, it is just deleted from my hard disk. There is no undo or ability to recover the deleted file. Help!', 12, NULL, NULL, false, false, '2006-07-14 08:47:36.124403', NULL, NULL, NULL, 0, 3, 0, 0, 0, NULL, NULL);
270+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, latest_patch_uploaded) VALUES (3, '2004-01-03 00:00:00', NULL, 'Bug Title Test', 'Shirtpkdf user@domain.org lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xo
271
272 y idu yifdxhfgffxShirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xoShirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xo
273 Shirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xoShirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xo
274
275-Shirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xoShirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xo', 16, NULL, NULL, false, false, '2006-07-14 08:48:52.922462', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
276-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 (4, '2004-01-04 00:00:00', NULL, 'Reflow problems with complex page layouts', 'Malone pages that use more complex layouts with portlets and fancy CSS are sometimes not getting properly reflowed after rendering.', 12, NULL, NULL, false, false, '2006-07-14 08:49:17.124885', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
277-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 (5, '2004-01-05 00:00:00', NULL, 'Firefox install instructions should be complete', 'All ways of downloading firefox should provide complete install instructions. At present, they are only visible on the Release Notes page.', 12, NULL, NULL, false, false, '2006-07-14 08:49:40.553212', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
278-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 (6, '2004-01-06 00:00:00', NULL, 'Firefox crashes when Save As dialog for a nonexistent window is closed', 'User-Agent:
279+Shirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xoShirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xo', 16, NULL, NULL, false, false, '2006-07-14 08:48:52.922462', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL, NULL);
280+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, latest_patch_uploaded) VALUES (4, '2004-01-04 00:00:00', NULL, 'Reflow problems with complex page layouts', 'Malone pages that use more complex layouts with portlets and fancy CSS are sometimes not getting properly reflowed after rendering.', 12, NULL, NULL, false, false, '2006-07-14 08:49:17.124885', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL, NULL);
281+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, latest_patch_uploaded) VALUES (5, '2004-01-05 00:00:00', NULL, 'Firefox install instructions should be complete', 'All ways of downloading firefox should provide complete install instructions. At present, they are only visible on the Release Notes page.', 12, NULL, NULL, false, false, '2006-07-14 08:49:40.553212', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL, NULL);
282+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, latest_patch_uploaded) VALUES (6, '2004-01-06 00:00:00', NULL, 'Firefox crashes when Save As dialog for a nonexistent window is closed', 'User-Agent:
283 Build Identifier: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040207 Firefox/0.8
284
285 If a Save As dialog for a nonexistent window exists, when the dialog is closed Firefox will crash. It''s possible to cause this to happen using the "Open With/Save As" dialog.
286@@ -1320,12 +1381,12 @@
287 Crash!
288
289 Expected Results:
290-Not crashed.', 12, 5, NULL, false, false, '2006-05-19 06:37:40.389193', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
291-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 (7, '2004-01-07 15:12:29.602117', NULL, 'A test bug', 'A test description', 16, NULL, NULL, false, false, '2006-05-19 06:37:40.391822', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
292-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 (8, '2004-01-08 09:10:17.13237', NULL, 'Printing doesn''t work', 'When I press print in Firefox, nothing happens, not even a print dialog comes up.', 12, NULL, NULL, false, false, '2006-05-19 06:37:40.393303', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
293-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 (9, '2004-01-09 16:42:14.080227', NULL, 'Thunderbird crashes', 'Every time I start Thunderbird it crashes.', 16, NULL, NULL, false, false, '2006-07-14 08:45:10.600579', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
294-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 (10, '2004-01-10 19:42:21.890299', NULL, 'another test bug', 'test bug', 16, NULL, NULL, false, false, '2006-07-14 08:54:19.453881', NULL, NULL, NULL, 0, 2, 0, 0, 0, NULL);
295-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 (11, '2007-03-15 20:33:56.67893', NULL, 'Make Jokosher use autoaudiosink', 'I''ve had problems when switching from Jokosher to Totem to play an Ogg.
296+Not crashed.', 12, 5, NULL, false, false, '2006-05-19 06:37:40.389193', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL, NULL);
297+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, latest_patch_uploaded) VALUES (7, '2004-01-07 15:12:29.602117', NULL, 'A test bug', 'A test description', 16, NULL, NULL, false, false, '2006-05-19 06:37:40.391822', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL, NULL);
298+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, latest_patch_uploaded) VALUES (8, '2004-01-08 09:10:17.13237', NULL, 'Printing doesn''t work', 'When I press print in Firefox, nothing happens, not even a print dialog comes up.', 12, NULL, NULL, false, false, '2006-05-19 06:37:40.393303', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL, NULL);
299+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, latest_patch_uploaded) VALUES (9, '2004-01-09 16:42:14.080227', NULL, 'Thunderbird crashes', 'Every time I start Thunderbird it crashes.', 16, NULL, NULL, false, false, '2006-07-14 08:45:10.600579', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL, NULL);
300+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, latest_patch_uploaded) VALUES (10, '2004-01-10 19:42:21.890299', NULL, 'another test bug', 'test bug', 16, NULL, NULL, false, false, '2006-07-14 08:54:19.453881', NULL, NULL, NULL, 0, 2, 0, 0, 0, NULL, NULL);
301+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, latest_patch_uploaded) VALUES (11, '2007-03-15 20:33:56.67893', NULL, 'Make Jokosher use autoaudiosink', 'I''ve had problems when switching from Jokosher to Totem to play an Ogg.
302
303 Totem appears to be playing normally but does not produce any sound.
304 If I close Jokosher then you can hear totem.
305@@ -1351,11 +1412,11 @@
306 Is there some way to reset alsa or the device driver - with out having
307 to restart?
308
309-Running on Ubuntu - with Jokosher 0.2 runscript.', 16, NULL, NULL, false, false, '2007-03-15 20:37:51.603369', NULL, NULL, NULL, 0, 7, 0, 0, 0, NULL);
310-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 (12, '2007-03-15 20:41:18.635493', NULL, 'Copy, Cut and Delete operations should work on selections', 'When trying to copy, cut or delete just a selected portion of an event, the operations affect the event completely. That is, you can''t select a portion and cut that piece. The whole event will be cut. Same goes for the other 2 operations.', 16, NULL, NULL, false, false, '2007-03-15 20:46:49.909153', NULL, NULL, NULL, 0, 5, 0, 0, 0, NULL);
311-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);
312-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);
313-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);
314+Running on Ubuntu - with Jokosher 0.2 runscript.', 16, NULL, NULL, false, false, '2007-03-15 20:37:51.603369', NULL, NULL, NULL, 0, 7, 0, 0, 0, NULL, NULL);
315+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, latest_patch_uploaded) VALUES (12, '2007-03-15 20:41:18.635493', NULL, 'Copy, Cut and Delete operations should work on selections', 'When trying to copy, cut or delete just a selected portion of an event, the operations affect the event completely. That is, you can''t select a portion and cut that piece. The whole event will be cut. Same goes for the other 2 operations.', 16, NULL, NULL, false, false, '2007-03-15 20:46:49.909153', NULL, NULL, NULL, 0, 5, 0, 0, 0, NULL, NULL);
316+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, latest_patch_uploaded) 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, NULL);
317+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, latest_patch_uploaded) 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, NULL);
318+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, latest_patch_uploaded) 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, NULL);
319
320
321 ALTER TABLE bug ENABLE TRIGGER ALL;
322@@ -1437,6 +1498,13 @@
323 ALTER TABLE bugcve ENABLE TRIGGER ALL;
324
325
326+ALTER TABLE bugjob DISABLE TRIGGER ALL;
327+
328+
329+
330+ALTER TABLE bugjob ENABLE TRIGGER ALL;
331+
332+
333 ALTER TABLE bugmessage DISABLE TRIGGER ALL;
334
335 INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (1, 2, 1, NULL, NULL, true);
336@@ -1715,8 +1783,8 @@
337
338 ALTER TABLE buildqueue DISABLE TRIGGER ALL;
339
340-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);
341-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);
342+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);
343+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);
344
345
346 ALTER TABLE buildqueue ENABLE TRIGGER ALL;
347@@ -2152,6 +2220,13 @@
348 ALTER TABLE cvereference ENABLE TRIGGER ALL;
349
350
351+ALTER TABLE databasereplicationlag DISABLE TRIGGER ALL;
352+
353+
354+
355+ALTER TABLE databasereplicationlag ENABLE TRIGGER ALL;
356+
357+
358 ALTER TABLE diff DISABLE TRIGGER ALL;
359
360
361@@ -2209,16 +2284,16 @@
362
363 ALTER TABLE distributionmirror DISABLE TRIGGER ALL;
364
365-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (1, 1, 'archive-mirror', 'http://localhost:11375/valid-mirror/', NULL, NULL, NULL, NULL, 1, 10, 75, 1, true, true, '2006-10-16 18:31:43.434567', NULL, 30, NULL, NULL);
366-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (2, 1, 'invalid-mirror', 'http://localhost:11375/invalid-mirror/', NULL, NULL, NULL, NULL, 12, 50, 75, 2, true, true, '2006-10-16 18:31:43.436833', NULL, 20, NULL, NULL);
367-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (3, 1, 'unreachable-mirror', 'http://localhost:11375/timeout/', NULL, NULL, NULL, NULL, 12, 30, 75, 2, true, true, '2006-10-16 18:31:43.437635', NULL, 30, NULL, NULL);
368-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (4, 1, 'archive-404-mirror', 'http://localhost:11375/archive-mirror/', NULL, NULL, NULL, NULL, 12, 30, 75, 1, true, true, '2006-10-16 18:31:43.438573', NULL, 30, NULL, NULL);
369-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (5, 1, 'releases-mirror', 'http://localhost:11375/valid-mirror/releases/', NULL, NULL, NULL, NULL, 12, 50, 75, 2, true, true, '2006-10-16 18:31:43.439336', NULL, 30, NULL, NULL);
370-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (6, 1, 'releases-mirror2', 'http://localhost:11375/valid-mirror/releases2/', NULL, NULL, NULL, NULL, 12, 50, 82, 2, true, true, '2006-10-16 18:31:43.440079', NULL, 30, NULL, NULL);
371-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (7, 1, 'archive-mirror2', 'http://localhost:11375/valid-mirror2/', NULL, NULL, NULL, NULL, 1, 10, 9, 1, true, true, '2006-10-16 18:31:43.440832', NULL, 30, NULL, NULL);
372-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (8, 1, 'canonical-archive', 'http://archive.ubuntu.com/ubuntu/', NULL, NULL, NULL, NULL, 1, 70, 225, 1, true, true, '2006-10-16 18:31:43.434567', NULL, 30, NULL, NULL);
373-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (9, 1, 'canonical-releases', 'http://releases.ubuntu.com/', NULL, NULL, NULL, NULL, 1, 70, 225, 2, true, true, '2006-10-16 18:31:43.434567', NULL, 30, NULL, NULL);
374-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (10, 1, 'random-releases-mirror', 'http://releases.random.com/', NULL, NULL, NULL, NULL, 1, 70, 225, 2, true, true, '2006-10-16 18:31:43.434567', NULL, 10, NULL, NULL);
375+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (1, 1, 'archive-mirror', 'http://localhost:11375/valid-mirror/', NULL, NULL, NULL, NULL, 1, 10, 75, 1, true, true, '2006-10-16 18:31:43.434567', NULL, 30, NULL, NULL, false);
376+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (2, 1, 'invalid-mirror', 'http://localhost:11375/invalid-mirror/', NULL, NULL, NULL, NULL, 12, 50, 75, 2, true, true, '2006-10-16 18:31:43.436833', NULL, 20, NULL, NULL, false);
377+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (3, 1, 'unreachable-mirror', 'http://localhost:11375/timeout/', NULL, NULL, NULL, NULL, 12, 30, 75, 2, true, true, '2006-10-16 18:31:43.437635', NULL, 30, NULL, NULL, false);
378+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (4, 1, 'archive-404-mirror', 'http://localhost:11375/archive-mirror/', NULL, NULL, NULL, NULL, 12, 30, 75, 1, true, true, '2006-10-16 18:31:43.438573', NULL, 30, NULL, NULL, false);
379+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (5, 1, 'releases-mirror', 'http://localhost:11375/valid-mirror/releases/', NULL, NULL, NULL, NULL, 12, 50, 75, 2, true, true, '2006-10-16 18:31:43.439336', NULL, 30, NULL, NULL, false);
380+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (6, 1, 'releases-mirror2', 'http://localhost:11375/valid-mirror/releases2/', NULL, NULL, NULL, NULL, 12, 50, 82, 2, true, true, '2006-10-16 18:31:43.440079', NULL, 30, NULL, NULL, false);
381+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (7, 1, 'archive-mirror2', 'http://localhost:11375/valid-mirror2/', NULL, NULL, NULL, NULL, 1, 10, 9, 1, true, true, '2006-10-16 18:31:43.440832', NULL, 30, NULL, NULL, false);
382+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (8, 1, 'canonical-archive', 'http://archive.ubuntu.com/ubuntu/', NULL, NULL, NULL, NULL, 1, 70, 225, 1, true, true, '2006-10-16 18:31:43.434567', NULL, 30, NULL, NULL, false);
383+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (9, 1, 'canonical-releases', 'http://releases.ubuntu.com/', NULL, NULL, NULL, NULL, 1, 70, 225, 2, true, true, '2006-10-16 18:31:43.434567', NULL, 30, NULL, NULL, false);
384+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (10, 1, 'random-releases-mirror', 'http://releases.random.com/', NULL, NULL, NULL, NULL, 1, 70, 225, 2, true, true, '2006-10-16 18:31:43.434567', NULL, 10, NULL, NULL, false);
385
386
387 ALTER TABLE distributionmirror ENABLE TRIGGER ALL;
388@@ -8068,10 +8143,11 @@
389
390 ALTER TABLE processorfamily DISABLE TRIGGER ALL;
391
392-INSERT INTO processorfamily (id, name, title, description) VALUES (1, 'x86', 'Intel 386 compatible chips', 'Bring back the 8086!');
393-INSERT INTO processorfamily (id, name, title, description) VALUES (2, 'powerpc', 'PowerPC compatible systems, G3 G4 etc', 'An architecture conceived by Motorola and developed further in cooperation with IBM. Was used very successfully by Apple for their PowerMac range, until 2007.');
394-INSERT INTO processorfamily (id, name, title, description) VALUES (3, 'amd64', 'AMD64 and Intel EM64T and compatible systems', 'A 64-bit extension to the venerable x86 architecture, pioneered by AMD and later adopted by Intel as well.');
395-INSERT INTO processorfamily (id, name, title, description) VALUES (4, 'hppa', 'PA-RISC Processors', 'The HP PA-RISC and compatible processors');
396+INSERT INTO processorfamily (id, name, title, description, restricted) VALUES (1, 'x86', 'Intel 386 compatible chips', 'Bring back the 8086!', false);
397+INSERT INTO processorfamily (id, name, title, description, restricted) VALUES (2, 'powerpc', 'PowerPC compatible systems, G3 G4 etc', 'An architecture conceived by Motorola and developed further in cooperation with IBM. Was used very successfully by Apple for their PowerMac range, until 2007.', false);
398+INSERT INTO processorfamily (id, name, title, description, restricted) VALUES (3, 'amd64', 'AMD64 and Intel EM64T and compatible systems', 'A 64-bit extension to the venerable x86 architecture, pioneered by AMD and later adopted by Intel as well.', false);
399+INSERT INTO processorfamily (id, name, title, description, restricted) VALUES (4, 'hppa', 'PA-RISC Processors', 'The HP PA-RISC and compatible processors', false);
400+INSERT INTO processorfamily (id, name, title, description, restricted) VALUES (5, 'arm', 'ARM Processors', 'The ARM and compatible processors', true);
401
402
403 ALTER TABLE processorfamily ENABLE TRIGGER ALL;
404@@ -8807,74 +8883,6 @@
405 ALTER TABLE sectionselection ENABLE TRIGGER ALL;
406
407
408-ALTER TABLE securebinarypackagepublishinghistory DISABLE TRIGGER ALL;
409-
410-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (9, 12, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
411-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (11, 15, 6, 3, 1, 3, 40, '2005-05-05 00:00:00', '2005-05-05 00:01:00', '2006-01-25 00:00:00', 7, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
412-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (12, 15, 6, 2, 3, 3, 40, '2006-01-25 00:00:00', '2006-01-25 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
413-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (13, 15, 1, 3, 3, 3, 40, '2006-01-26 00:00:00', '2006-01-26 00:01:00', '2007-09-13 00:00:01', NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
414-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (14, 15, 7, 3, 3, 3, 40, '2006-01-26 00:00:00', '2006-01-26 00:01:00', '2006-01-28 00:00:00', NULL, NULL, NULL, NULL, 0, false, NULL, 3, NULL, NULL);
415-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (15, 12, 7, 2, 3, 3, 40, '2006-01-26 00:00:00', '2006-01-26 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 3, NULL, NULL);
416-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (16, 15, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-24 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
417-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (17, 16, 1, 2, 1, 1, 10, '2005-07-06 00:00:00', '2005-08-20 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
418-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (18, 17, 1, 3, 1, 1, 10, '2005-08-07 00:00:00', '2005-08-22 00:00:00', '2005-08-22 00:00:01', NULL, NULL, '2005-08-22 00:00:02', '2005-08-23 00:00:00', 0, false, NULL, 1, NULL, NULL);
419-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (19, 18, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-20 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
420-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (20, 17, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-20 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
421-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (21, 18, 11, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-20 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
422-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (22, 20, 8, 4, 1, 1, 40, '2006-09-13 00:00:00', '2006-09-13 00:00:01', '2006-09-13 00:00:01', NULL, NULL, '2006-09-13 00:00:02', '2006-09-13 00:00:03', 0, false, NULL, 1, 1, 'nah ...');
423-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (23, 6, 1, 4, 1, 1, 40, '2006-12-01 00:00:00', '2006-12-01 00:00:01', '2006-12-01 00:00:01', NULL, NULL, '2006-12-01 00:00:02', '2006-12-01 00:00:03', 0, false, NULL, 1, 28, 'I do not like it either');
424-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (24, 21, 1, 2, 1, 1, 40, '2006-12-01 00:00:00', '2006-12-01 00:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
425-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (25, 12, 1, 2, 1, 1, 10, '2007-01-19 00:00:00', '2007-02-19 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 8, NULL, NULL);
426-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (26, 22, 1, 2, 1, 1, 40, '2006-04-11 13:00:00', '2006-04-11 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
427-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (27, 22, 1, 2, 1, 1, 40, '2007-07-10 13:00:00', '2007-07-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 9, NULL, NULL);
428-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (28, 23, 1, 2, 1, 1, 40, '2007-07-10 13:00:00', '2007-07-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 9, NULL, NULL);
429-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (29, 23, 12, 2, 1, 1, 40, '2007-07-10 13:00:00', '2007-07-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 9, NULL, NULL);
430-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (30, 24, 12, 2, 1, 1, 40, '2007-08-10 13:00:00', '2007-08-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 9, NULL, NULL);
431-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (31, 25, 8, 2, 5, 7, 20, '2007-08-09 21:55:39.561526', '2007-08-09 21:56:39.561526', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 12, NULL, NULL);
432-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (32, 26, 12, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
433-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (33, 27, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
434-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (34, 27, 12, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
435-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (35, 24, 12, 2, 1, 1, 40, '2007-08-10 13:00:00', '2007-08-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 10, NULL, NULL);
436-
437-
438-ALTER TABLE securebinarypackagepublishinghistory ENABLE TRIGGER ALL;
439-
440-
441-ALTER TABLE securesourcepackagepublishinghistory DISABLE TRIGGER ALL;
442-
443-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (1, 14, 1, 1, 1, 3, '2004-09-27 11:57:13', NULL, NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
444-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (2, 15, 3, 2, 1, 3, '2004-09-27 11:57:13', '2004-09-27 11:57:13', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
445-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (4, 17, 1, 2, 1, 1, '2004-03-14 18:00:00', '2004-03-14 18:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
446-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (5, 16, 3, 2, 1, 2, '2004-03-10 16:30:00', '2004-03-10 16:30:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
447-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (8, 20, 3, 3, 1, 1, '2005-04-18 17:34:15.308434', '2005-04-18 17:34:15.308434', '2005-08-24 17:01:15.308434', 21, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
448-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (9, 21, 3, 2, 1, 3, '2005-08-24 17:01:15.308434', '2005-08-24 17:01:15.308434', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
449-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (10, 23, 1, 2, 1, 1, '2005-09-15 11:42:02.870714', '2005-09-15 11:42:02.870714', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
450-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (11, 24, 8, 2, 1, 2, '2005-09-15 11:42:21.070926', '2005-09-15 11:42:21.070926', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 3, NULL, NULL);
451-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (12, 25, 3, 2, 1, 1, '2005-09-15 11:43:00.05741', '2005-09-15 11:43:00.05741', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
452-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (13, 26, 3, 2, 3, 1, '2005-12-22 18:19:00.05741', '2005-12-22 18:20:00.05741', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
453-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (14, 24, 3, 3, 1, 3, '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', 25, '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', 0, false, NULL, 1, NULL, NULL);
454-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (15, 24, 1, 2, 1, 1, '2005-09-16 11:42:02.870714', '2005-09-16 11:42:02.870714', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
455-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (16, 27, 3, 2, 1, 1, '2005-02-10 12:19:00.05741', '2005-02-10 12:20:00.05741', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
456-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (17, 28, 3, 2, 1, 1, '2005-02-10 12:19:00.05741', '2005-02-10 12:20:00.05741', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
457-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (18, 14, 1, 2, 1, 2, '2006-02-13 12:19:00.05741', '2006-02-13 12:19:00.05741', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
458-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (19, 28, 1, 1, 1, 3, '2006-02-15 12:19:00.05741', NULL, NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
459-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (20, 25, 1, 1, 1, 3, '2006-02-15 12:19:00.05741', NULL, NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
460-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (21, 24, 11, 4, 1, 3, '2006-09-14 11:44:00.10654', '2006-09-14 11:44:00', '2006-09-14 11:44:01', 25, '2006-09-14 11:45:00', '2006-09-14 11:45:00', '2006-09-15 11:45:00', 0, false, NULL, 8, 1, 'does anyone like ? I did not think so.');
461-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (22, 32, 1, 4, 1, 3, '2006-12-01 13:44:00.10654', '2006-12-01 11:44:00', NULL, NULL, NULL, NULL, '2006-12-02 11:44:00', 0, false, NULL, 1, 28, 'I do not like it.');
462-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (23, 33, 1, 2, 1, 3, '2006-12-01 13:44:00.10654', '2006-12-01 11:44:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
463-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (24, 14, 1, 2, 1, 2, '2006-02-19 11:57:13', '2007-02-19 11:57:13', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 8, NULL, NULL);
464-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (25, 33, 10, 2, 1, 3, '2007-04-25 13:44:00.10654', '2007-04-25 14:14:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
465-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (26, 35, 1, 2, 1, 3, '2006-04-11 12:00:00', '2006-04-11 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
466-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (27, 33, 10, 2, 1, 3, '2007-07-09 13:44:00.10654', '2007-07-09 14:14:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 9, NULL, NULL);
467-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (28, 35, 1, 2, 1, 3, '2007-07-09 12:00:00', '2007-07-09 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 9, NULL, NULL);
468-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (29, 20, 1, 2, 1, 3, '2007-07-09 12:00:00', '2007-07-09 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 9, NULL, NULL);
469-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (30, 36, 10, 2, 5, 7, '2007-08-09 21:28:12.106187', NULL, NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 12, NULL, NULL);
470-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (31, 35, 10, 2, 1, 3, '2007-07-09 12:00:00', '2007-07-09 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 10, NULL, NULL);
471-
472-
473-ALTER TABLE securesourcepackagepublishinghistory ENABLE TRIGGER ALL;
474-
475-
476 ALTER TABLE seriessourcepackagebranch DISABLE TRIGGER ALL;
477
478
479@@ -9013,31 +9021,101 @@
480 ALTER TABLE sourcepackagename ENABLE TRIGGER ALL;
481
482
483+ALTER TABLE sourcepackagepublishinghistory DISABLE TRIGGER ALL;
484+
485+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (1, 14, 1, 1, 1, 3, '2004-09-27 11:57:13', NULL, NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
486+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (2, 15, 3, 2, 1, 3, '2004-09-27 11:57:13', '2004-09-27 11:57:13', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
487+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (4, 17, 1, 2, 1, 1, '2004-03-14 18:00:00', '2004-03-14 18:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
488+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (5, 16, 3, 2, 1, 2, '2004-03-10 16:30:00', '2004-03-10 16:30:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
489+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (8, 20, 3, 3, 1, 1, '2005-04-18 17:34:15.308434', '2005-04-18 17:34:15.308434', '2005-08-24 17:01:15.308434', 21, NULL, NULL, NULL, 0, 1, NULL, NULL);
490+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (9, 21, 3, 2, 1, 3, '2005-08-24 17:01:15.308434', '2005-08-24 17:01:15.308434', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
491+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (10, 23, 1, 2, 1, 1, '2005-09-15 11:42:02.870714', '2005-09-15 11:42:02.870714', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
492+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (11, 24, 8, 2, 1, 2, '2005-09-15 11:42:21.070926', '2005-09-15 11:42:21.070926', NULL, NULL, NULL, NULL, NULL, 0, 3, NULL, NULL);
493+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (12, 25, 3, 2, 1, 1, '2005-09-15 11:43:00.05741', '2005-09-15 11:43:00.05741', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
494+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (13, 26, 3, 2, 3, 1, '2005-12-22 18:19:00.05741', '2005-12-22 18:20:00.05741', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
495+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (14, 24, 3, 3, 1, 3, '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', 25, '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', 0, 1, NULL, NULL);
496+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (15, 24, 1, 2, 1, 1, '2005-09-16 11:42:02.870714', '2005-09-16 11:42:02.870714', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
497+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (16, 27, 3, 2, 1, 1, '2005-02-10 12:19:00.05741', '2005-02-10 12:20:00.05741', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
498+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (17, 28, 3, 2, 1, 1, '2005-02-10 12:19:00.05741', '2005-02-10 12:20:00.05741', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
499+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (18, 14, 1, 2, 1, 2, '2006-02-13 12:19:00.05741', '2006-02-13 12:19:00.05741', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
500+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (19, 28, 1, 1, 1, 3, '2006-02-15 12:19:00.05741', NULL, NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
501+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (20, 25, 1, 1, 1, 3, '2006-02-15 12:19:00.05741', NULL, NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
502+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (21, 24, 11, 4, 1, 3, '2006-09-14 11:44:00.10654', '2006-09-14 11:44:00', '2006-09-14 11:44:01', 25, '2006-09-14 11:45:00', '2006-09-14 11:45:00', '2006-09-15 11:45:00', 0, 8, 1, 'does anyone like ? I did not think so.');
503+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (22, 32, 1, 4, 1, 3, '2006-12-01 13:44:00.10654', '2006-12-01 11:44:00', NULL, NULL, NULL, NULL, '2006-12-02 11:44:00', 0, 1, 28, 'I do not like it.');
504+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (23, 33, 1, 2, 1, 3, '2006-12-01 13:44:00.10654', '2006-12-01 11:44:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
505+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (24, 14, 1, 2, 1, 2, '2006-02-19 11:57:13', '2007-02-19 11:57:13', NULL, NULL, NULL, NULL, NULL, 0, 8, NULL, NULL);
506+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (25, 33, 10, 2, 1, 3, '2007-04-25 13:44:00.10654', '2007-04-25 14:14:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
507+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (26, 35, 1, 2, 1, 3, '2006-04-11 12:00:00', '2006-04-11 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
508+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (27, 33, 10, 2, 1, 3, '2007-07-09 13:44:00.10654', '2007-07-09 14:14:00', NULL, NULL, NULL, NULL, NULL, 0, 9, NULL, NULL);
509+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (28, 35, 1, 2, 1, 3, '2007-07-09 12:00:00', '2007-07-09 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, 9, NULL, NULL);
510+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (29, 20, 1, 2, 1, 3, '2007-07-09 12:00:00', '2007-07-09 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, 9, NULL, NULL);
511+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (30, 36, 10, 2, 5, 7, '2007-08-09 21:28:12.106187', NULL, NULL, NULL, NULL, NULL, NULL, 0, 12, NULL, NULL);
512+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (31, 35, 10, 2, 1, 3, '2007-07-09 12:00:00', '2007-07-09 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, 10, NULL, NULL);
513+
514+
515+ALTER TABLE sourcepackagepublishinghistory ENABLE TRIGGER ALL;
516+
517+
518+ALTER TABLE sourcepackagerecipe DISABLE TRIGGER ALL;
519+
520+
521+
522+ALTER TABLE sourcepackagerecipe ENABLE TRIGGER ALL;
523+
524+
525+ALTER TABLE sourcepackagerecipebuild DISABLE TRIGGER ALL;
526+
527+
528+
529+ALTER TABLE sourcepackagerecipebuild ENABLE TRIGGER ALL;
530+
531+
532+ALTER TABLE sourcepackagerecipebuildjob DISABLE TRIGGER ALL;
533+
534+
535+
536+ALTER TABLE sourcepackagerecipebuildjob ENABLE TRIGGER ALL;
537+
538+
539+ALTER TABLE sourcepackagerecipedata DISABLE TRIGGER ALL;
540+
541+
542+
543+ALTER TABLE sourcepackagerecipedata ENABLE TRIGGER ALL;
544+
545+
546+ALTER TABLE sourcepackagerecipedatainstruction DISABLE TRIGGER ALL;
547+
548+
549+
550+ALTER TABLE sourcepackagerecipedatainstruction ENABLE TRIGGER ALL;
551+
552+
553 ALTER TABLE sourcepackagerelease DISABLE TRIGGER ALL;
554
555-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (14, 1, '0.9', '2004-09-27 11:57:13', 1, NULL, 1, 'Mozilla dummy Changelog......', 'gcc-3.4-base, libc6 (>= 2.3.2.ds1-4), gcc-3.4 (>= 3.4.1-4sarge1), gcc-3.4 (<< 3.4.2), libstdc++6-dev (>= 3.4.1-4sarge1), pmount', 'bacula-common (= 1.34.6-2), bacula-director-common (= 1.34.6-2), postgresql-client (>= 7.4), pmount', 'any', NULL, 1, 1, 1, 1, 1, 'Mark Shuttleworth <mark@canonical.com>', '3.6.2', '1.0', 'mozilla-firefox', 1, NULL, 'gcc-4.0, pmount', 'gcc-4.0-base, pmount');
556-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (15, 1, '1.0', '2004-09-27 11:57:13', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 2, 1, 9, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
557-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (16, 1, '1.0-1', '2005-03-10 16:30:00', 1, NULL, 1, NULL, NULL, NULL, 'any', NULL, 3, 1, 10, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
558-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (17, 1, '0.99.6-1', '2005-03-14 18:00:00', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 2, 1, 10, 1, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
559-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (20, 1, '0.1-1', '2005-03-24 20:59:31.439579', 1, NULL, 1, 'pmount (0.1-1) hoary; urgency=low
560+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (14, 1, '0.9', '2004-09-27 11:57:13', 1, NULL, 1, 'Mozilla dummy Changelog......', 'gcc-3.4-base, libc6 (>= 2.3.2.ds1-4), gcc-3.4 (>= 3.4.1-4sarge1), gcc-3.4 (<< 3.4.2), libstdc++6-dev (>= 3.4.1-4sarge1), pmount', 'bacula-common (= 1.34.6-2), bacula-director-common (= 1.34.6-2), postgresql-client (>= 7.4), pmount', 'any', NULL, 1, 1, 1, 1, 1, 'Mark Shuttleworth <mark@canonical.com>', '3.6.2', '1.0', 'mozilla-firefox', 1, NULL, 'gcc-4.0, pmount', 'gcc-4.0-base, pmount', NULL);
561+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (15, 1, '1.0', '2004-09-27 11:57:13', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 2, 1, 9, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
562+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (16, 1, '1.0-1', '2005-03-10 16:30:00', 1, NULL, 1, NULL, NULL, NULL, 'any', NULL, 3, 1, 10, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
563+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (17, 1, '0.99.6-1', '2005-03-14 18:00:00', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 2, 1, 10, 1, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
564+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (20, 1, '0.1-1', '2005-03-24 20:59:31.439579', 1, NULL, 1, 'pmount (0.1-1) hoary; urgency=low
565
566 * Fix description (Malone #1)
567 * Fix debian (Debian #2000)
568 * Fix warty (Warty Ubuntu #1)
569
570- -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'all', NULL, 2, 1, 14, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
571-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (21, 1, '0.1-2', '2005-06-24 20:59:31.439579', 1, NULL, 1, 'This is a placeholder changelog for pmount 0.1-2', NULL, NULL, 'powerpc', NULL, 1, 1, 14, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
572-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (23, 1, '1.0.8-1ubuntu1', '2005-02-03 08:50:00', 1, NULL, 1, 'alsa-utils (1.0.8-1ubuntu1) warty; urgency=low
573-
574- * Placeholder
575-
576- -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'all', NULL, 1, 1, 19, 1, 1, 'Mark Shuttleworth <mark@example.com>', '3.6.2', '1.0', 'alsa-mixer', 1, NULL, NULL, NULL);
577-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (24, 1, '1.0.9a-4', '2005-07-01 22:47:00', 1, NULL, 1, 'alsa-utils (1.0.9a-4) warty; urgency=low
578-
579- * Placeholder
580-
581- -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'any', NULL, 2, 1, 19, 8, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
582-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (25, 1, '1.0.9a-4ubuntu1', '2005-08-01 14:10:00', 1, NULL, 1, 'alsa-utils (1.0.9a-4ubuntu1) hoary; urgency=low
583+ -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'all', NULL, 2, 1, 14, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
584+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (21, 1, '0.1-2', '2005-06-24 20:59:31.439579', 1, NULL, 1, 'This is a placeholder changelog for pmount 0.1-2', NULL, NULL, 'powerpc', NULL, 1, 1, 14, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
585+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (23, 1, '1.0.8-1ubuntu1', '2005-02-03 08:50:00', 1, NULL, 1, 'alsa-utils (1.0.8-1ubuntu1) warty; urgency=low
586+
587+ * Placeholder
588+
589+ -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'all', NULL, 1, 1, 19, 1, 1, 'Mark Shuttleworth <mark@example.com>', '3.6.2', '1.0', 'alsa-mixer', 1, NULL, NULL, NULL, NULL);
590+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (24, 1, '1.0.9a-4', '2005-07-01 22:47:00', 1, NULL, 1, 'alsa-utils (1.0.9a-4) warty; urgency=low
591+
592+ * Placeholder
593+
594+ -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'any', NULL, 2, 1, 19, 8, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
595+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (25, 1, '1.0.9a-4ubuntu1', '2005-08-01 14:10:00', 1, NULL, 1, 'alsa-utils (1.0.9a-4ubuntu1) hoary; urgency=low
596
597 * Placeholder
598 LP: #10
599@@ -9046,22 +9124,22 @@
600 LP: #7, #8,
601 #11
602
603- -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'all', NULL, 1, 16, 19, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
604-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (26, 1, 'cr.g7-37', '2005-12-22 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 1, 16, 20, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
605-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (27, 1, 'b8p', '2006-02-10 11:19:00', 1, NULL, 1, 'libstdc++ (9.9-1) hoary; urgency=high
606+ -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'all', NULL, 1, 16, 19, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
607+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (26, 1, 'cr.g7-37', '2005-12-22 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 1, 16, 20, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
608+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (27, 1, 'b8p', '2006-02-10 11:19:00', 1, NULL, 1, 'libstdc++ (9.9-1) hoary; urgency=high
609
610 * Placeholder
611
612- -- Sample Person <test@canonical.com> Tue, 10 Feb 2006 10:10:08 +0300', NULL, NULL, 'powerpc i386', NULL, 1, 16, 21, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
613-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (28, 1, '2.6.15.3', '2005-12-22 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'any', NULL, 1, 16, 22, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
614-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (29, 1, '0.00', '2005-12-22 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 17, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
615-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (30, 1, '1.0', '2006-09-28 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 20, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
616-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (31, 1, '1.0', '2006-09-28 18:19:01', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 20, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
617-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (32, 1, '1.0', '2006-12-01 13:19:01', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 23, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
618-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (33, 1, '1.0', '2006-12-01 13:19:01', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 24, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
619-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (34, 1, '1.0', '2007-02-15 14:19:01', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 29, 16, 25, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
620-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (35, 1, '1.0', '2006-04-11 11:19:01', 1, NULL, 1, NULL, NULL, NULL, 'any', NULL, 1, 16, 26, 1, 1, NULL, NULL, '1.0', NULL, 10, NULL, NULL, NULL);
621-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (36, 243606, '1.0-1', '2007-08-09 21:25:37.832976', 1, NULL, 5, 'commercialpackage (1.0-1) breezy; urgency=low
622+ -- Sample Person <test@canonical.com> Tue, 10 Feb 2006 10:10:08 +0300', NULL, NULL, 'powerpc i386', NULL, 1, 16, 21, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
623+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (28, 1, '2.6.15.3', '2005-12-22 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'any', NULL, 1, 16, 22, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
624+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (29, 1, '0.00', '2005-12-22 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 17, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
625+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (30, 1, '1.0', '2006-09-28 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 20, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
626+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (31, 1, '1.0', '2006-09-28 18:19:01', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 20, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
627+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (32, 1, '1.0', '2006-12-01 13:19:01', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 23, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
628+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (33, 1, '1.0', '2006-12-01 13:19:01', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 24, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
629+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (34, 1, '1.0', '2007-02-15 14:19:01', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 29, 16, 25, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
630+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (35, 1, '1.0', '2006-04-11 11:19:01', 1, NULL, 1, NULL, NULL, NULL, 'any', NULL, 1, 16, 26, 1, 1, NULL, NULL, '1.0', NULL, 10, NULL, NULL, NULL, NULL);
631+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (36, 243606, '1.0-1', '2007-08-09 21:25:37.832976', 1, NULL, 5, 'commercialpackage (1.0-1) breezy; urgency=low
632
633 * Initial version
634 Address for testing linkification: Foo Bar <foo.bar@canonical.com>
635@@ -9085,8 +9163,8 @@
636 iD8DBQFGtzTjWhGlTF8G/HcRAtFsAJ4hHyKhOnsUOQDI+SAk000DmFAnUgCcC84J
637 3F4bEPeRcnUjCFI/hjR0kxg=
638 =Tjln
639-', 7, 243606, 27, 10, 1, 'Julian Edwards <launchpad@julian-edwards.com>', '3.6.2', '1.0', 'commercialpackage', 12, NULL, NULL, NULL);
640-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (37, 1, '1.0', '2006-04-11 11:19:01', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 1, 16, 26, 1, 1, NULL, NULL, '1.0', NULL, 11, NULL, NULL, NULL);
641+', 7, 243606, 27, 10, 1, 'Julian Edwards <launchpad@julian-edwards.com>', '3.6.2', '1.0', 'commercialpackage', 12, NULL, NULL, NULL, NULL);
642+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (37, 1, '1.0', '2006-04-11 11:19:01', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 1, 16, 26, 1, 1, NULL, NULL, '1.0', NULL, 11, NULL, NULL, NULL, NULL);
643
644
645 ALTER TABLE sourcepackagerelease ENABLE TRIGGER ALL;
646
647=== modified file 'database/sampledata/current.sql'
648--- database/sampledata/current.sql 2010-01-20 22:09:26 +0000
649+++ database/sampledata/current.sql 2010-03-04 20:06:42 +0000
650@@ -754,6 +754,27 @@
651
652
653
654+
655+
656+
657+
658+
659+
660+
661+
662+
663+
664+
665+
666+
667+
668+
669+
670+
671+
672+
673+
674+
675 ALTER TABLE account DISABLE TRIGGER ALL;
676
677 INSERT INTO account (id, date_created, creation_rationale, status, date_status_set, displayname, openid_identifier, status_comment, old_openid_identifier) VALUES (11, '2005-06-06 08:59:51.591618', 8, 20, '2005-06-06 08:59:51.591618', 'Mark Shuttleworth', 'mark_oid', NULL, '123/mark');
678@@ -956,6 +977,13 @@
679 ALTER TABLE answercontact ENABLE TRIGGER ALL;
680
681
682+ALTER TABLE apportjob DISABLE TRIGGER ALL;
683+
684+
685+
686+ALTER TABLE apportjob ENABLE TRIGGER ALL;
687+
688+
689 ALTER TABLE archive DISABLE TRIGGER ALL;
690
691 INSERT INTO archive (id, owner, description, enabled, authorized_size, distribution, purpose, private, sources_cached, binaries_cached, package_description_cache, fti, buildd_secret, require_virtualized, name, publish, date_updated, total_count, pending_count, succeeded_count, failed_count, building_count, date_created, signing_key, removed_binary_retention_days, num_old_versions_published, displayname, relative_build_score, external_dependencies) VALUES (1, 17, NULL, true, NULL, 1, 1, false, NULL, NULL, NULL, NULL, NULL, false, 'primary', true, '2008-05-27 18:15:12.241774', 15, 1, 8, 5, 1, '2008-09-23 17:29:03.442606', NULL, NULL, NULL, 'Primary Archive for Ubuntu Linux', 0, NULL);
692@@ -1068,6 +1096,39 @@
693 ALTER TABLE binarypackagename ENABLE TRIGGER ALL;
694
695
696+ALTER TABLE binarypackagepublishinghistory DISABLE TRIGGER ALL;
697+
698+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (9, 12, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
699+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (11, 15, 6, 3, 1, 3, 40, '2005-05-05 00:00:00', '2005-05-05 00:01:00', '2006-01-25 00:00:00', 7, NULL, NULL, NULL, 0, 1, NULL, NULL);
700+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (12, 15, 6, 2, 3, 3, 40, '2006-01-25 00:00:00', '2006-01-25 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
701+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (13, 15, 1, 3, 3, 3, 40, '2006-01-26 00:00:00', '2006-01-26 00:01:00', '2007-09-13 00:00:01', NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
702+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (14, 15, 7, 3, 3, 3, 40, '2006-01-26 00:00:00', '2006-01-26 00:01:00', '2006-01-28 00:00:00', NULL, NULL, NULL, NULL, 0, 3, NULL, NULL);
703+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (15, 12, 7, 2, 3, 3, 40, '2006-01-26 00:00:00', '2006-01-26 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, 3, NULL, NULL);
704+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (16, 15, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-24 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
705+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (17, 16, 1, 2, 1, 1, 10, '2005-07-06 00:00:00', '2005-08-20 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
706+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (18, 17, 1, 3, 1, 1, 10, '2005-08-07 00:00:00', '2005-08-22 00:00:00', '2005-08-22 00:00:01', NULL, NULL, '2005-08-22 00:00:02', '2005-08-23 00:00:00', 0, 1, NULL, NULL);
707+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (19, 18, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-20 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
708+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (20, 17, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-20 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
709+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (21, 18, 11, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-20 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
710+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (22, 20, 8, 4, 1, 1, 40, '2006-09-13 00:00:00', '2006-09-13 00:00:01', '2006-09-13 00:00:01', NULL, NULL, '2006-09-13 00:00:02', '2006-09-13 00:00:03', 0, 1, 1, 'nah ...');
711+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (23, 6, 1, 4, 1, 1, 40, '2006-12-01 00:00:00', '2006-12-01 00:00:01', '2006-12-01 00:00:01', NULL, NULL, '2006-12-01 00:00:02', '2006-12-01 00:00:03', 0, 1, 28, 'I do not like it either');
712+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (24, 21, 1, 2, 1, 1, 40, '2006-12-01 00:00:00', '2006-12-01 00:00:01', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
713+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (25, 12, 1, 2, 1, 1, 10, '2007-01-19 00:00:00', '2007-02-19 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 8, NULL, NULL);
714+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (26, 22, 1, 2, 1, 1, 40, '2006-04-11 13:00:00', '2006-04-11 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
715+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (27, 22, 1, 2, 1, 1, 40, '2007-07-10 13:00:00', '2007-07-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, 9, NULL, NULL);
716+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (28, 23, 1, 2, 1, 1, 40, '2007-07-10 13:00:00', '2007-07-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, 9, NULL, NULL);
717+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (29, 23, 12, 2, 1, 1, 40, '2007-07-10 13:00:00', '2007-07-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, 9, NULL, NULL);
718+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (30, 24, 12, 2, 1, 1, 40, '2007-08-10 13:00:00', '2007-08-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, 9, NULL, NULL);
719+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (31, 25, 8, 2, 5, 7, 20, '2007-08-09 21:55:39.561526', '2007-08-09 21:56:39.561526', NULL, NULL, NULL, NULL, NULL, 0, 12, NULL, NULL);
720+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (32, 26, 12, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
721+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (33, 27, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
722+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (34, 27, 12, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
723+INSERT INTO binarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (35, 24, 12, 2, 1, 1, 40, '2007-08-10 13:00:00', '2007-08-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, 10, NULL, NULL);
724+
725+
726+ALTER TABLE binarypackagepublishinghistory ENABLE TRIGGER ALL;
727+
728+
729 ALTER TABLE binarypackagerelease DISABLE TRIGGER ALL;
730
731 INSERT INTO binarypackagerelease (id, binarypackagename, version, summary, description, build, binpackageformat, component, section, priority, shlibdeps, depends, recommends, suggests, conflicts, replaces, provides, essential, installedsize, architecturespecific, fti, datecreated, pre_depends, enhances, breaks) VALUES (6, 6, '1.0', 'foobar is bad', 'foobar should be removed', 6, 1, 1, 1, 40, NULL, NULL, NULL, NULL, NULL, NULL, NULL, false, NULL, false, NULL, '2006-12-01 17:50:10.878712', NULL, NULL, NULL);
732@@ -1271,19 +1332,19 @@
733
734 ALTER TABLE bug DISABLE TRIGGER ALL;
735
736-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 (1, '2004-01-01 20:58:04.553583', NULL, 'Firefox does not support SVG', 'Firefox needs to support embedded SVG images, now that the standard has been finalised.
737+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, latest_patch_uploaded) VALUES (1, '2004-01-01 20:58:04.553583', NULL, 'Firefox does not support SVG', 'Firefox needs to support embedded SVG images, now that the standard has been finalised.
738
739-The SVG standard 1.0 is complete, and draft implementations for Firefox exist. One of these implementations needs to be integrated with the base install of Firefox. Ideally, the implementation needs to include support for the manipulation of SVG objects from JavaScript to enable interactive and dynamic SVG drawings.', 12, NULL, NULL, false, false, '2006-05-19 06:37:40.344941', NULL, NULL, NULL, 0, 2, 0, 0, 0, NULL);
740-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 (2, '2004-01-02 20:58:04.572546', 'blackhole', 'Blackhole Trash folder', 'The Trash folder seems to have significant problems! At the moment, dragging an item to the trash results in immediate deletion. The item does not appear in the Trash, it is just deleted from my hard disk. There is no undo or ability to recover the deleted file. Help!', 12, NULL, NULL, false, false, '2006-07-14 08:47:36.124403', NULL, NULL, NULL, 0, 3, 0, 0, 0, NULL);
741-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 (3, '2004-01-03 00:00:00', NULL, 'Bug Title Test', 'Shirtpkdf user@domain.org lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xo
742+The SVG standard 1.0 is complete, and draft implementations for Firefox exist. One of these implementations needs to be integrated with the base install of Firefox. Ideally, the implementation needs to include support for the manipulation of SVG objects from JavaScript to enable interactive and dynamic SVG drawings.', 12, NULL, NULL, false, false, '2006-05-19 06:37:40.344941', NULL, NULL, NULL, 0, 2, 0, 0, 0, NULL, NULL);
743+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, latest_patch_uploaded) VALUES (2, '2004-01-02 20:58:04.572546', 'blackhole', 'Blackhole Trash folder', 'The Trash folder seems to have significant problems! At the moment, dragging an item to the trash results in immediate deletion. The item does not appear in the Trash, it is just deleted from my hard disk. There is no undo or ability to recover the deleted file. Help!', 12, NULL, NULL, false, false, '2006-07-14 08:47:36.124403', NULL, NULL, NULL, 0, 3, 0, 0, 0, NULL, NULL);
744+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, latest_patch_uploaded) VALUES (3, '2004-01-03 00:00:00', NULL, 'Bug Title Test', 'Shirtpkdf user@domain.org lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xo
745
746 y idu yifdxhfgffxShirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xoShirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xo
747 Shirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xoShirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xo
748
749-Shirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xoShirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xo', 16, NULL, NULL, false, false, '2006-07-14 08:48:52.922462', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
750-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 (4, '2004-01-04 00:00:00', NULL, 'Reflow problems with complex page layouts', 'Malone pages that use more complex layouts with portlets and fancy CSS are sometimes not getting properly reflowed after rendering.', 12, NULL, NULL, false, false, '2006-07-14 08:49:17.124885', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
751-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 (5, '2004-01-05 00:00:00', NULL, 'Firefox install instructions should be complete', 'All ways of downloading firefox should provide complete install instructions. At present, they are only visible on the Release Notes page.', 12, NULL, NULL, false, false, '2006-07-14 08:49:40.553212', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
752-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 (6, '2004-01-06 00:00:00', NULL, 'Firefox crashes when Save As dialog for a nonexistent window is closed', 'User-Agent:
753+Shirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xoShirtpkdf jlkdsj;lkd lkjd hlkjfds gkfdsg kfd glkfd gifdsytoxdiytxoiufdytoidxf yxoigfyoigfxuyfxoiug yxoiuy oiugf hyoifxugyoixgfuy xoiuyxoiyxoifuy xo', 16, NULL, NULL, false, false, '2006-07-14 08:48:52.922462', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL, NULL);
754+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, latest_patch_uploaded) VALUES (4, '2004-01-04 00:00:00', NULL, 'Reflow problems with complex page layouts', 'Malone pages that use more complex layouts with portlets and fancy CSS are sometimes not getting properly reflowed after rendering.', 12, NULL, NULL, false, false, '2006-07-14 08:49:17.124885', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL, NULL);
755+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, latest_patch_uploaded) VALUES (5, '2004-01-05 00:00:00', NULL, 'Firefox install instructions should be complete', 'All ways of downloading firefox should provide complete install instructions. At present, they are only visible on the Release Notes page.', 12, NULL, NULL, false, false, '2006-07-14 08:49:40.553212', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL, NULL);
756+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, latest_patch_uploaded) VALUES (6, '2004-01-06 00:00:00', NULL, 'Firefox crashes when Save As dialog for a nonexistent window is closed', 'User-Agent:
757 Build Identifier: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040207 Firefox/0.8
758
759 If a Save As dialog for a nonexistent window exists, when the dialog is closed Firefox will crash. It''s possible to cause this to happen using the "Open With/Save As" dialog.
760@@ -1302,12 +1363,12 @@
761 Crash!
762
763 Expected Results:
764-Not crashed.', 12, 5, NULL, false, false, '2006-05-19 06:37:40.389193', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
765-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 (7, '2004-01-07 15:12:29.602117', NULL, 'A test bug', 'A test description', 16, NULL, NULL, false, false, '2006-05-19 06:37:40.391822', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
766-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 (8, '2004-01-08 09:10:17.13237', NULL, 'Printing doesn''t work', 'When I press print in Firefox, nothing happens, not even a print dialog comes up.', 12, NULL, NULL, false, false, '2006-05-19 06:37:40.393303', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
767-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 (9, '2004-01-09 16:42:14.080227', NULL, 'Thunderbird crashes', 'Every time I start Thunderbird it crashes.', 16, NULL, NULL, false, false, '2006-07-14 08:45:10.600579', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL);
768-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 (10, '2004-01-10 19:42:21.890299', NULL, 'another test bug', 'test bug', 16, NULL, NULL, false, false, '2006-07-14 08:54:19.453881', NULL, NULL, NULL, 0, 2, 0, 0, 0, NULL);
769-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 (11, '2007-03-15 20:33:56.67893', NULL, 'Make Jokosher use autoaudiosink', 'I''ve had problems when switching from Jokosher to Totem to play an Ogg.
770+Not crashed.', 12, 5, NULL, false, false, '2006-05-19 06:37:40.389193', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL, NULL);
771+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, latest_patch_uploaded) VALUES (7, '2004-01-07 15:12:29.602117', NULL, 'A test bug', 'A test description', 16, NULL, NULL, false, false, '2006-05-19 06:37:40.391822', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL, NULL);
772+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, latest_patch_uploaded) VALUES (8, '2004-01-08 09:10:17.13237', NULL, 'Printing doesn''t work', 'When I press print in Firefox, nothing happens, not even a print dialog comes up.', 12, NULL, NULL, false, false, '2006-05-19 06:37:40.393303', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL, NULL);
773+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, latest_patch_uploaded) VALUES (9, '2004-01-09 16:42:14.080227', NULL, 'Thunderbird crashes', 'Every time I start Thunderbird it crashes.', 16, NULL, NULL, false, false, '2006-07-14 08:45:10.600579', NULL, NULL, NULL, 0, 1, 0, 0, 0, NULL, NULL);
774+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, latest_patch_uploaded) VALUES (10, '2004-01-10 19:42:21.890299', NULL, 'another test bug', 'test bug', 16, NULL, NULL, false, false, '2006-07-14 08:54:19.453881', NULL, NULL, NULL, 0, 2, 0, 0, 0, NULL, NULL);
775+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, latest_patch_uploaded) VALUES (11, '2007-03-15 20:33:56.67893', NULL, 'Make Jokosher use autoaudiosink', 'I''ve had problems when switching from Jokosher to Totem to play an Ogg.
776
777 Totem appears to be playing normally but does not produce any sound.
778 If I close Jokosher then you can hear totem.
779@@ -1333,11 +1394,11 @@
780 Is there some way to reset alsa or the device driver - with out having
781 to restart?
782
783-Running on Ubuntu - with Jokosher 0.2 runscript.', 16, NULL, NULL, false, false, '2007-03-15 20:37:51.603369', NULL, NULL, NULL, 0, 7, 0, 0, 0, NULL);
784-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 (12, '2007-03-15 20:41:18.635493', NULL, 'Copy, Cut and Delete operations should work on selections', 'When trying to copy, cut or delete just a selected portion of an event, the operations affect the event completely. That is, you can''t select a portion and cut that piece. The whole event will be cut. Same goes for the other 2 operations.', 16, NULL, NULL, false, false, '2007-03-15 20:46:49.909153', NULL, NULL, NULL, 0, 5, 0, 0, 0, NULL);
785-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);
786-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);
787-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);
788+Running on Ubuntu - with Jokosher 0.2 runscript.', 16, NULL, NULL, false, false, '2007-03-15 20:37:51.603369', NULL, NULL, NULL, 0, 7, 0, 0, 0, NULL, NULL);
789+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, latest_patch_uploaded) VALUES (12, '2007-03-15 20:41:18.635493', NULL, 'Copy, Cut and Delete operations should work on selections', 'When trying to copy, cut or delete just a selected portion of an event, the operations affect the event completely. That is, you can''t select a portion and cut that piece. The whole event will be cut. Same goes for the other 2 operations.', 16, NULL, NULL, false, false, '2007-03-15 20:46:49.909153', NULL, NULL, NULL, 0, 5, 0, 0, 0, NULL, NULL);
790+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, latest_patch_uploaded) 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, NULL);
791+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, latest_patch_uploaded) 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, NULL);
792+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, latest_patch_uploaded) 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, NULL);
793
794
795 ALTER TABLE bug ENABLE TRIGGER ALL;
796@@ -1419,6 +1480,13 @@
797 ALTER TABLE bugcve ENABLE TRIGGER ALL;
798
799
800+ALTER TABLE bugjob DISABLE TRIGGER ALL;
801+
802+
803+
804+ALTER TABLE bugjob ENABLE TRIGGER ALL;
805+
806+
807 ALTER TABLE bugmessage DISABLE TRIGGER ALL;
808
809 INSERT INTO bugmessage (id, bug, message, bugwatch, remote_comment_id, visible) VALUES (1, 2, 1, NULL, NULL, true);
810@@ -1697,8 +1765,8 @@
811
812 ALTER TABLE buildqueue DISABLE TRIGGER ALL;
813
814-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);
815-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);
816+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);
817+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);
818
819
820 ALTER TABLE buildqueue ENABLE TRIGGER ALL;
821@@ -2134,6 +2202,13 @@
822 ALTER TABLE cvereference ENABLE TRIGGER ALL;
823
824
825+ALTER TABLE databasereplicationlag DISABLE TRIGGER ALL;
826+
827+
828+
829+ALTER TABLE databasereplicationlag ENABLE TRIGGER ALL;
830+
831+
832 ALTER TABLE diff DISABLE TRIGGER ALL;
833
834
835@@ -2191,16 +2266,16 @@
836
837 ALTER TABLE distributionmirror DISABLE TRIGGER ALL;
838
839-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (1, 1, 'archive-mirror', 'http://localhost:11375/valid-mirror/', NULL, NULL, NULL, NULL, 1, 10, 75, 1, true, true, '2006-10-16 18:31:43.434567', NULL, 30, NULL, NULL);
840-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (2, 1, 'invalid-mirror', 'http://localhost:11375/invalid-mirror/', NULL, NULL, NULL, NULL, 12, 50, 75, 2, true, true, '2006-10-16 18:31:43.436833', NULL, 20, NULL, NULL);
841-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (3, 1, 'unreachable-mirror', 'http://localhost:11375/timeout/', NULL, NULL, NULL, NULL, 12, 30, 75, 2, true, true, '2006-10-16 18:31:43.437635', NULL, 30, NULL, NULL);
842-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (4, 1, 'archive-404-mirror', 'http://localhost:11375/archive-mirror/', NULL, NULL, NULL, NULL, 12, 30, 75, 1, true, true, '2006-10-16 18:31:43.438573', NULL, 30, NULL, NULL);
843-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (5, 1, 'releases-mirror', 'http://localhost:11375/valid-mirror/releases/', NULL, NULL, NULL, NULL, 12, 50, 75, 2, true, true, '2006-10-16 18:31:43.439336', NULL, 30, NULL, NULL);
844-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (6, 1, 'releases-mirror2', 'http://localhost:11375/valid-mirror/releases2/', NULL, NULL, NULL, NULL, 12, 50, 82, 2, true, true, '2006-10-16 18:31:43.440079', NULL, 30, NULL, NULL);
845-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (7, 1, 'archive-mirror2', 'http://localhost:11375/valid-mirror2/', NULL, NULL, NULL, NULL, 1, 10, 9, 1, true, true, '2006-10-16 18:31:43.440832', NULL, 30, NULL, NULL);
846-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (8, 1, 'canonical-archive', 'http://archive.ubuntu.com/ubuntu/', NULL, NULL, NULL, NULL, 1, 70, 225, 1, true, true, '2006-10-16 18:31:43.434567', NULL, 30, NULL, NULL);
847-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (9, 1, 'canonical-releases', 'http://releases.ubuntu.com/', NULL, NULL, NULL, NULL, 1, 70, 225, 2, true, true, '2006-10-16 18:31:43.434567', NULL, 30, NULL, NULL);
848-INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer) VALUES (10, 1, 'random-releases-mirror', 'http://releases.random.com/', NULL, NULL, NULL, NULL, 1, 70, 225, 2, true, true, '2006-10-16 18:31:43.434567', NULL, 10, NULL, NULL);
849+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (1, 1, 'archive-mirror', 'http://localhost:11375/valid-mirror/', NULL, NULL, NULL, NULL, 1, 10, 75, 1, true, true, '2006-10-16 18:31:43.434567', NULL, 30, NULL, NULL, false);
850+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (2, 1, 'invalid-mirror', 'http://localhost:11375/invalid-mirror/', NULL, NULL, NULL, NULL, 12, 50, 75, 2, true, true, '2006-10-16 18:31:43.436833', NULL, 20, NULL, NULL, false);
851+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (3, 1, 'unreachable-mirror', 'http://localhost:11375/timeout/', NULL, NULL, NULL, NULL, 12, 30, 75, 2, true, true, '2006-10-16 18:31:43.437635', NULL, 30, NULL, NULL, false);
852+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (4, 1, 'archive-404-mirror', 'http://localhost:11375/archive-mirror/', NULL, NULL, NULL, NULL, 12, 30, 75, 1, true, true, '2006-10-16 18:31:43.438573', NULL, 30, NULL, NULL, false);
853+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (5, 1, 'releases-mirror', 'http://localhost:11375/valid-mirror/releases/', NULL, NULL, NULL, NULL, 12, 50, 75, 2, true, true, '2006-10-16 18:31:43.439336', NULL, 30, NULL, NULL, false);
854+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (6, 1, 'releases-mirror2', 'http://localhost:11375/valid-mirror/releases2/', NULL, NULL, NULL, NULL, 12, 50, 82, 2, true, true, '2006-10-16 18:31:43.440079', NULL, 30, NULL, NULL, false);
855+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (7, 1, 'archive-mirror2', 'http://localhost:11375/valid-mirror2/', NULL, NULL, NULL, NULL, 1, 10, 9, 1, true, true, '2006-10-16 18:31:43.440832', NULL, 30, NULL, NULL, false);
856+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (8, 1, 'canonical-archive', 'http://archive.ubuntu.com/ubuntu/', NULL, NULL, NULL, NULL, 1, 70, 225, 1, true, true, '2006-10-16 18:31:43.434567', NULL, 30, NULL, NULL, false);
857+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (9, 1, 'canonical-releases', 'http://releases.ubuntu.com/', NULL, NULL, NULL, NULL, 1, 70, 225, 2, true, true, '2006-10-16 18:31:43.434567', NULL, 30, NULL, NULL, false);
858+INSERT INTO distributionmirror (id, distribution, name, http_base_url, ftp_base_url, rsync_base_url, displayname, description, owner, speed, country, content, official_candidate, enabled, date_created, whiteboard, status, date_reviewed, reviewer, country_dns_mirror) VALUES (10, 1, 'random-releases-mirror', 'http://releases.random.com/', NULL, NULL, NULL, NULL, 1, 70, 225, 2, true, true, '2006-10-16 18:31:43.434567', NULL, 10, NULL, NULL, false);
859
860
861 ALTER TABLE distributionmirror ENABLE TRIGGER ALL;
862@@ -7964,10 +8039,11 @@
863
864 ALTER TABLE processorfamily DISABLE TRIGGER ALL;
865
866-INSERT INTO processorfamily (id, name, title, description) VALUES (1, 'x86', 'Intel 386 compatible chips', 'Bring back the 8086!');
867-INSERT INTO processorfamily (id, name, title, description) VALUES (2, 'powerpc', 'PowerPC compatible systems, G3 G4 etc', 'An architecture conceived by Motorola and developed further in cooperation with IBM. Was used very successfully by Apple for their PowerMac range, until 2007.');
868-INSERT INTO processorfamily (id, name, title, description) VALUES (3, 'amd64', 'AMD64 and Intel EM64T and compatible systems', 'A 64-bit extension to the venerable x86 architecture, pioneered by AMD and later adopted by Intel as well.');
869-INSERT INTO processorfamily (id, name, title, description) VALUES (4, 'hppa', 'PA-RISC Processors', 'The HP PA-RISC and compatible processors');
870+INSERT INTO processorfamily (id, name, title, description, restricted) VALUES (1, 'x86', 'Intel 386 compatible chips', 'Bring back the 8086!', false);
871+INSERT INTO processorfamily (id, name, title, description, restricted) VALUES (2, 'powerpc', 'PowerPC compatible systems, G3 G4 etc', 'An architecture conceived by Motorola and developed further in cooperation with IBM. Was used very successfully by Apple for their PowerMac range, until 2007.', false);
872+INSERT INTO processorfamily (id, name, title, description, restricted) VALUES (3, 'amd64', 'AMD64 and Intel EM64T and compatible systems', 'A 64-bit extension to the venerable x86 architecture, pioneered by AMD and later adopted by Intel as well.', false);
873+INSERT INTO processorfamily (id, name, title, description, restricted) VALUES (4, 'hppa', 'PA-RISC Processors', 'The HP PA-RISC and compatible processors', false);
874+INSERT INTO processorfamily (id, name, title, description, restricted) VALUES (5, 'arm', 'ARM Processors', 'The ARM and compatible processors', true);
875
876
877 ALTER TABLE processorfamily ENABLE TRIGGER ALL;
878@@ -8693,74 +8769,6 @@
879 ALTER TABLE sectionselection ENABLE TRIGGER ALL;
880
881
882-ALTER TABLE securebinarypackagepublishinghistory DISABLE TRIGGER ALL;
883-
884-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (9, 12, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
885-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (11, 15, 6, 3, 1, 3, 40, '2005-05-05 00:00:00', '2005-05-05 00:01:00', '2006-01-25 00:00:00', 7, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
886-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (12, 15, 6, 2, 3, 3, 40, '2006-01-25 00:00:00', '2006-01-25 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
887-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (13, 15, 1, 3, 3, 3, 40, '2006-01-26 00:00:00', '2006-01-26 00:01:00', '2007-09-13 00:00:01', NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
888-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (14, 15, 7, 3, 3, 3, 40, '2006-01-26 00:00:00', '2006-01-26 00:01:00', '2006-01-28 00:00:00', NULL, NULL, NULL, NULL, 0, false, NULL, 3, NULL, NULL);
889-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (15, 12, 7, 2, 3, 3, 40, '2006-01-26 00:00:00', '2006-01-26 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 3, NULL, NULL);
890-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (16, 15, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-24 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
891-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (17, 16, 1, 2, 1, 1, 10, '2005-07-06 00:00:00', '2005-08-20 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
892-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (18, 17, 1, 3, 1, 1, 10, '2005-08-07 00:00:00', '2005-08-22 00:00:00', '2005-08-22 00:00:01', NULL, NULL, '2005-08-22 00:00:02', '2005-08-23 00:00:00', 0, false, NULL, 1, NULL, NULL);
893-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (19, 18, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-20 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
894-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (20, 17, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-20 00:01:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
895-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (21, 18, 11, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-20 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
896-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (22, 20, 8, 4, 1, 1, 40, '2006-09-13 00:00:00', '2006-09-13 00:00:01', '2006-09-13 00:00:01', NULL, NULL, '2006-09-13 00:00:02', '2006-09-13 00:00:03', 0, false, NULL, 1, 1, 'nah ...');
897-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (23, 6, 1, 4, 1, 1, 40, '2006-12-01 00:00:00', '2006-12-01 00:00:01', '2006-12-01 00:00:01', NULL, NULL, '2006-12-01 00:00:02', '2006-12-01 00:00:03', 0, false, NULL, 1, 28, 'I do not like it either');
898-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (24, 21, 1, 2, 1, 1, 40, '2006-12-01 00:00:00', '2006-12-01 00:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
899-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (25, 12, 1, 2, 1, 1, 10, '2007-01-19 00:00:00', '2007-02-19 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 8, NULL, NULL);
900-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (26, 22, 1, 2, 1, 1, 40, '2006-04-11 13:00:00', '2006-04-11 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
901-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (27, 22, 1, 2, 1, 1, 40, '2007-07-10 13:00:00', '2007-07-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 9, NULL, NULL);
902-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (28, 23, 1, 2, 1, 1, 40, '2007-07-10 13:00:00', '2007-07-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 9, NULL, NULL);
903-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (29, 23, 12, 2, 1, 1, 40, '2007-07-10 13:00:00', '2007-07-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 9, NULL, NULL);
904-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (30, 24, 12, 2, 1, 1, 40, '2007-08-10 13:00:00', '2007-08-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 9, NULL, NULL);
905-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (31, 25, 8, 2, 5, 7, 20, '2007-08-09 21:55:39.561526', '2007-08-09 21:56:39.561526', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 12, NULL, NULL);
906-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (32, 26, 12, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
907-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (33, 27, 1, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
908-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (34, 27, 12, 2, 1, 1, 10, '2005-05-05 00:00:00', '2005-06-18 00:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
909-INSERT INTO securebinarypackagepublishinghistory (id, binarypackagerelease, distroarchseries, status, component, section, priority, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (35, 24, 12, 2, 1, 1, 40, '2007-08-10 13:00:00', '2007-08-10 13:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 10, NULL, NULL);
910-
911-
912-ALTER TABLE securebinarypackagepublishinghistory ENABLE TRIGGER ALL;
913-
914-
915-ALTER TABLE securesourcepackagepublishinghistory DISABLE TRIGGER ALL;
916-
917-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (1, 14, 1, 1, 1, 3, '2004-09-27 11:57:13', NULL, NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
918-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (2, 15, 3, 2, 1, 3, '2004-09-27 11:57:13', '2004-09-27 11:57:13', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
919-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (4, 17, 1, 2, 1, 1, '2004-03-14 18:00:00', '2004-03-14 18:00:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
920-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (5, 16, 3, 2, 1, 2, '2004-03-10 16:30:00', '2004-03-10 16:30:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
921-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (8, 20, 3, 3, 1, 1, '2005-04-18 17:34:15.308434', '2005-04-18 17:34:15.308434', '2005-08-24 17:01:15.308434', 21, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
922-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (9, 21, 3, 2, 1, 3, '2005-08-24 17:01:15.308434', '2005-08-24 17:01:15.308434', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
923-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (10, 23, 1, 2, 1, 1, '2005-09-15 11:42:02.870714', '2005-09-15 11:42:02.870714', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
924-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (11, 24, 8, 2, 1, 2, '2005-09-15 11:42:21.070926', '2005-09-15 11:42:21.070926', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 3, NULL, NULL);
925-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (12, 25, 3, 2, 1, 1, '2005-09-15 11:43:00.05741', '2005-09-15 11:43:00.05741', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
926-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (13, 26, 3, 2, 3, 1, '2005-12-22 18:19:00.05741', '2005-12-22 18:20:00.05741', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
927-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (14, 24, 3, 3, 1, 3, '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', 25, '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', 0, false, NULL, 1, NULL, NULL);
928-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (15, 24, 1, 2, 1, 1, '2005-09-16 11:42:02.870714', '2005-09-16 11:42:02.870714', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
929-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (16, 27, 3, 2, 1, 1, '2005-02-10 12:19:00.05741', '2005-02-10 12:20:00.05741', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
930-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (17, 28, 3, 2, 1, 1, '2005-02-10 12:19:00.05741', '2005-02-10 12:20:00.05741', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
931-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (18, 14, 1, 2, 1, 2, '2006-02-13 12:19:00.05741', '2006-02-13 12:19:00.05741', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
932-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (19, 28, 1, 1, 1, 3, '2006-02-15 12:19:00.05741', NULL, NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
933-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (20, 25, 1, 1, 1, 3, '2006-02-15 12:19:00.05741', NULL, NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
934-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (21, 24, 11, 4, 1, 3, '2006-09-14 11:44:00.10654', '2006-09-14 11:44:00', '2006-09-14 11:44:01', 25, '2006-09-14 11:45:00', '2006-09-14 11:45:00', '2006-09-15 11:45:00', 0, false, NULL, 8, 1, 'does anyone like ? I did not think so.');
935-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (22, 32, 1, 4, 1, 3, '2006-12-01 13:44:00.10654', '2006-12-01 11:44:00', NULL, NULL, NULL, NULL, '2006-12-02 11:44:00', 0, false, NULL, 1, 28, 'I do not like it.');
936-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (23, 33, 1, 2, 1, 3, '2006-12-01 13:44:00.10654', '2006-12-01 11:44:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
937-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (24, 14, 1, 2, 1, 2, '2006-02-19 11:57:13', '2007-02-19 11:57:13', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 8, NULL, NULL);
938-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (25, 33, 10, 2, 1, 3, '2007-04-25 13:44:00.10654', '2007-04-25 14:14:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
939-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (26, 35, 1, 2, 1, 3, '2006-04-11 12:00:00', '2006-04-11 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 1, NULL, NULL);
940-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (27, 33, 10, 2, 1, 3, '2007-07-09 13:44:00.10654', '2007-07-09 14:14:00', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 9, NULL, NULL);
941-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (28, 35, 1, 2, 1, 3, '2007-07-09 12:00:00', '2007-07-09 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 9, NULL, NULL);
942-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (29, 20, 1, 2, 1, 3, '2007-07-09 12:00:00', '2007-07-09 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 9, NULL, NULL);
943-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (30, 36, 10, 2, 5, 7, '2007-08-09 21:28:12.106187', NULL, NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 12, NULL, NULL);
944-INSERT INTO securesourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, embargo, embargolifted, archive, removed_by, removal_comment) VALUES (31, 35, 10, 2, 1, 3, '2007-07-09 12:00:00', '2007-07-09 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, false, NULL, 10, NULL, NULL);
945-
946-
947-ALTER TABLE securesourcepackagepublishinghistory ENABLE TRIGGER ALL;
948-
949-
950 ALTER TABLE seriessourcepackagebranch DISABLE TRIGGER ALL;
951
952
953@@ -8899,31 +8907,101 @@
954 ALTER TABLE sourcepackagename ENABLE TRIGGER ALL;
955
956
957+ALTER TABLE sourcepackagepublishinghistory DISABLE TRIGGER ALL;
958+
959+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (1, 14, 1, 1, 1, 3, '2004-09-27 11:57:13', NULL, NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
960+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (2, 15, 3, 2, 1, 3, '2004-09-27 11:57:13', '2004-09-27 11:57:13', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
961+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (4, 17, 1, 2, 1, 1, '2004-03-14 18:00:00', '2004-03-14 18:00:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
962+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (5, 16, 3, 2, 1, 2, '2004-03-10 16:30:00', '2004-03-10 16:30:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
963+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (8, 20, 3, 3, 1, 1, '2005-04-18 17:34:15.308434', '2005-04-18 17:34:15.308434', '2005-08-24 17:01:15.308434', 21, NULL, NULL, NULL, 0, 1, NULL, NULL);
964+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (9, 21, 3, 2, 1, 3, '2005-08-24 17:01:15.308434', '2005-08-24 17:01:15.308434', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
965+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (10, 23, 1, 2, 1, 1, '2005-09-15 11:42:02.870714', '2005-09-15 11:42:02.870714', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
966+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (11, 24, 8, 2, 1, 2, '2005-09-15 11:42:21.070926', '2005-09-15 11:42:21.070926', NULL, NULL, NULL, NULL, NULL, 0, 3, NULL, NULL);
967+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (12, 25, 3, 2, 1, 1, '2005-09-15 11:43:00.05741', '2005-09-15 11:43:00.05741', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
968+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (13, 26, 3, 2, 3, 1, '2005-12-22 18:19:00.05741', '2005-12-22 18:20:00.05741', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
969+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (14, 24, 3, 3, 1, 3, '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', 25, '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', '2005-09-15 11:44:00.10654', 0, 1, NULL, NULL);
970+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (15, 24, 1, 2, 1, 1, '2005-09-16 11:42:02.870714', '2005-09-16 11:42:02.870714', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
971+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (16, 27, 3, 2, 1, 1, '2005-02-10 12:19:00.05741', '2005-02-10 12:20:00.05741', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
972+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (17, 28, 3, 2, 1, 1, '2005-02-10 12:19:00.05741', '2005-02-10 12:20:00.05741', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
973+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (18, 14, 1, 2, 1, 2, '2006-02-13 12:19:00.05741', '2006-02-13 12:19:00.05741', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
974+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (19, 28, 1, 1, 1, 3, '2006-02-15 12:19:00.05741', NULL, NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
975+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (20, 25, 1, 1, 1, 3, '2006-02-15 12:19:00.05741', NULL, NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
976+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (21, 24, 11, 4, 1, 3, '2006-09-14 11:44:00.10654', '2006-09-14 11:44:00', '2006-09-14 11:44:01', 25, '2006-09-14 11:45:00', '2006-09-14 11:45:00', '2006-09-15 11:45:00', 0, 8, 1, 'does anyone like ? I did not think so.');
977+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (22, 32, 1, 4, 1, 3, '2006-12-01 13:44:00.10654', '2006-12-01 11:44:00', NULL, NULL, NULL, NULL, '2006-12-02 11:44:00', 0, 1, 28, 'I do not like it.');
978+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (23, 33, 1, 2, 1, 3, '2006-12-01 13:44:00.10654', '2006-12-01 11:44:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
979+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (24, 14, 1, 2, 1, 2, '2006-02-19 11:57:13', '2007-02-19 11:57:13', NULL, NULL, NULL, NULL, NULL, 0, 8, NULL, NULL);
980+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (25, 33, 10, 2, 1, 3, '2007-04-25 13:44:00.10654', '2007-04-25 14:14:00', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
981+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (26, 35, 1, 2, 1, 3, '2006-04-11 12:00:00', '2006-04-11 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, 1, NULL, NULL);
982+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (27, 33, 10, 2, 1, 3, '2007-07-09 13:44:00.10654', '2007-07-09 14:14:00', NULL, NULL, NULL, NULL, NULL, 0, 9, NULL, NULL);
983+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (28, 35, 1, 2, 1, 3, '2007-07-09 12:00:00', '2007-07-09 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, 9, NULL, NULL);
984+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (29, 20, 1, 2, 1, 3, '2007-07-09 12:00:00', '2007-07-09 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, 9, NULL, NULL);
985+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (30, 36, 10, 2, 5, 7, '2007-08-09 21:28:12.106187', NULL, NULL, NULL, NULL, NULL, NULL, 0, 12, NULL, NULL);
986+INSERT INTO sourcepackagepublishinghistory (id, sourcepackagerelease, distroseries, status, component, section, datecreated, datepublished, datesuperseded, supersededby, datemadepending, scheduleddeletiondate, dateremoved, pocket, archive, removed_by, removal_comment) VALUES (31, 35, 10, 2, 1, 3, '2007-07-09 12:00:00', '2007-07-09 12:00:01', NULL, NULL, NULL, NULL, NULL, 0, 10, NULL, NULL);
987+
988+
989+ALTER TABLE sourcepackagepublishinghistory ENABLE TRIGGER ALL;
990+
991+
992+ALTER TABLE sourcepackagerecipe DISABLE TRIGGER ALL;
993+
994+
995+
996+ALTER TABLE sourcepackagerecipe ENABLE TRIGGER ALL;
997+
998+
999+ALTER TABLE sourcepackagerecipebuild DISABLE TRIGGER ALL;
1000+
1001+
1002+
1003+ALTER TABLE sourcepackagerecipebuild ENABLE TRIGGER ALL;
1004+
1005+
1006+ALTER TABLE sourcepackagerecipebuildjob DISABLE TRIGGER ALL;
1007+
1008+
1009+
1010+ALTER TABLE sourcepackagerecipebuildjob ENABLE TRIGGER ALL;
1011+
1012+
1013+ALTER TABLE sourcepackagerecipedata DISABLE TRIGGER ALL;
1014+
1015+
1016+
1017+ALTER TABLE sourcepackagerecipedata ENABLE TRIGGER ALL;
1018+
1019+
1020+ALTER TABLE sourcepackagerecipedatainstruction DISABLE TRIGGER ALL;
1021+
1022+
1023+
1024+ALTER TABLE sourcepackagerecipedatainstruction ENABLE TRIGGER ALL;
1025+
1026+
1027 ALTER TABLE sourcepackagerelease DISABLE TRIGGER ALL;
1028
1029-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (14, 1, '0.9', '2004-09-27 11:57:13', 1, NULL, 1, 'Mozilla dummy Changelog......', 'gcc-3.4-base, libc6 (>= 2.3.2.ds1-4), gcc-3.4 (>= 3.4.1-4sarge1), gcc-3.4 (<< 3.4.2), libstdc++6-dev (>= 3.4.1-4sarge1), pmount', 'bacula-common (= 1.34.6-2), bacula-director-common (= 1.34.6-2), postgresql-client (>= 7.4), pmount', 'any', NULL, 1, 1, 1, 1, 1, 'Mark Shuttleworth <mark@canonical.com>', '3.6.2', '1.0', 'mozilla-firefox', 1, NULL, 'gcc-4.0, pmount', 'gcc-4.0-base, pmount');
1030-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (15, 1, '1.0', '2004-09-27 11:57:13', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 2, 1, 9, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1031-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (16, 1, '1.0-1', '2005-03-10 16:30:00', 1, NULL, 1, NULL, NULL, NULL, 'any', NULL, 3, 1, 10, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1032-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (17, 1, '0.99.6-1', '2005-03-14 18:00:00', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 2, 1, 10, 1, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1033-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (20, 1, '0.1-1', '2005-03-24 20:59:31.439579', 1, NULL, 1, 'pmount (0.1-1) hoary; urgency=low
1034+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (14, 1, '0.9', '2004-09-27 11:57:13', 1, NULL, 1, 'Mozilla dummy Changelog......', 'gcc-3.4-base, libc6 (>= 2.3.2.ds1-4), gcc-3.4 (>= 3.4.1-4sarge1), gcc-3.4 (<< 3.4.2), libstdc++6-dev (>= 3.4.1-4sarge1), pmount', 'bacula-common (= 1.34.6-2), bacula-director-common (= 1.34.6-2), postgresql-client (>= 7.4), pmount', 'any', NULL, 1, 1, 1, 1, 1, 'Mark Shuttleworth <mark@canonical.com>', '3.6.2', '1.0', 'mozilla-firefox', 1, NULL, 'gcc-4.0, pmount', 'gcc-4.0-base, pmount', NULL);
1035+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (15, 1, '1.0', '2004-09-27 11:57:13', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 2, 1, 9, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1036+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (16, 1, '1.0-1', '2005-03-10 16:30:00', 1, NULL, 1, NULL, NULL, NULL, 'any', NULL, 3, 1, 10, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1037+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (17, 1, '0.99.6-1', '2005-03-14 18:00:00', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 2, 1, 10, 1, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1038+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (20, 1, '0.1-1', '2005-03-24 20:59:31.439579', 1, NULL, 1, 'pmount (0.1-1) hoary; urgency=low
1039
1040 * Fix description (Malone #1)
1041 * Fix debian (Debian #2000)
1042 * Fix warty (Warty Ubuntu #1)
1043
1044- -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'all', NULL, 2, 1, 14, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1045-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (21, 1, '0.1-2', '2005-06-24 20:59:31.439579', 1, NULL, 1, 'This is a placeholder changelog for pmount 0.1-2', NULL, NULL, 'powerpc', NULL, 1, 1, 14, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1046-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (23, 1, '1.0.8-1ubuntu1', '2005-02-03 08:50:00', 1, NULL, 1, 'alsa-utils (1.0.8-1ubuntu1) warty; urgency=low
1047-
1048- * Placeholder
1049-
1050- -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'all', NULL, 1, 1, 19, 1, 1, 'Mark Shuttleworth <mark@example.com>', '3.6.2', '1.0', 'alsa-mixer', 1, NULL, NULL, NULL);
1051-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (24, 1, '1.0.9a-4', '2005-07-01 22:47:00', 1, NULL, 1, 'alsa-utils (1.0.9a-4) warty; urgency=low
1052-
1053- * Placeholder
1054-
1055- -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'any', NULL, 2, 1, 19, 8, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1056-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (25, 1, '1.0.9a-4ubuntu1', '2005-08-01 14:10:00', 1, NULL, 1, 'alsa-utils (1.0.9a-4ubuntu1) hoary; urgency=low
1057+ -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'all', NULL, 2, 1, 14, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1058+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (21, 1, '0.1-2', '2005-06-24 20:59:31.439579', 1, NULL, 1, 'This is a placeholder changelog for pmount 0.1-2', NULL, NULL, 'powerpc', NULL, 1, 1, 14, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1059+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (23, 1, '1.0.8-1ubuntu1', '2005-02-03 08:50:00', 1, NULL, 1, 'alsa-utils (1.0.8-1ubuntu1) warty; urgency=low
1060+
1061+ * Placeholder
1062+
1063+ -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'all', NULL, 1, 1, 19, 1, 1, 'Mark Shuttleworth <mark@example.com>', '3.6.2', '1.0', 'alsa-mixer', 1, NULL, NULL, NULL, NULL);
1064+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (24, 1, '1.0.9a-4', '2005-07-01 22:47:00', 1, NULL, 1, 'alsa-utils (1.0.9a-4) warty; urgency=low
1065+
1066+ * Placeholder
1067+
1068+ -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'any', NULL, 2, 1, 19, 8, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1069+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (25, 1, '1.0.9a-4ubuntu1', '2005-08-01 14:10:00', 1, NULL, 1, 'alsa-utils (1.0.9a-4ubuntu1) hoary; urgency=low
1070
1071 * Placeholder
1072 LP: #10
1073@@ -8932,22 +9010,22 @@
1074 LP: #7, #8,
1075 #11
1076
1077- -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'all', NULL, 1, 16, 19, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1078-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (26, 1, 'cr.g7-37', '2005-12-22 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 1, 16, 20, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1079-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (27, 1, 'b8p', '2006-02-10 11:19:00', 1, NULL, 1, 'libstdc++ (9.9-1) hoary; urgency=high
1080+ -- Sample Person <test@canonical.com> Tue, 7 Feb 2006 12:10:08 +0300', NULL, NULL, 'all', NULL, 1, 16, 19, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1081+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (26, 1, 'cr.g7-37', '2005-12-22 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 1, 16, 20, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1082+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (27, 1, 'b8p', '2006-02-10 11:19:00', 1, NULL, 1, 'libstdc++ (9.9-1) hoary; urgency=high
1083
1084 * Placeholder
1085
1086- -- Sample Person <test@canonical.com> Tue, 10 Feb 2006 10:10:08 +0300', NULL, NULL, 'powerpc i386', NULL, 1, 16, 21, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1087-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (28, 1, '2.6.15.3', '2005-12-22 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'any', NULL, 1, 16, 22, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1088-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (29, 1, '0.00', '2005-12-22 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 17, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1089-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (30, 1, '1.0', '2006-09-28 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 20, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1090-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (31, 1, '1.0', '2006-09-28 18:19:01', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 20, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1091-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (32, 1, '1.0', '2006-12-01 13:19:01', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 23, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1092-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (33, 1, '1.0', '2006-12-01 13:19:01', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 24, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1093-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (34, 1, '1.0', '2007-02-15 14:19:01', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 29, 16, 25, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL);
1094-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (35, 1, '1.0', '2006-04-11 11:19:01', 1, NULL, 1, NULL, NULL, NULL, 'any', NULL, 1, 16, 26, 1, 1, NULL, NULL, '1.0', NULL, 10, NULL, NULL, NULL);
1095-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (36, 243606, '1.0-1', '2007-08-09 21:25:37.832976', 1, NULL, 5, 'commercialpackage (1.0-1) breezy; urgency=low
1096+ -- Sample Person <test@canonical.com> Tue, 10 Feb 2006 10:10:08 +0300', NULL, NULL, 'powerpc i386', NULL, 1, 16, 21, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1097+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (28, 1, '2.6.15.3', '2005-12-22 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'any', NULL, 1, 16, 22, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1098+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (29, 1, '0.00', '2005-12-22 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 17, 3, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1099+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (30, 1, '1.0', '2006-09-28 18:19:00', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 20, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1100+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (31, 1, '1.0', '2006-09-28 18:19:01', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 20, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1101+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (32, 1, '1.0', '2006-12-01 13:19:01', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 23, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1102+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (33, 1, '1.0', '2006-12-01 13:19:01', 1, NULL, 1, NULL, NULL, NULL, 'all', NULL, 1, 16, 24, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1103+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (34, 1, '1.0', '2007-02-15 14:19:01', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 29, 16, 25, 10, 1, NULL, NULL, '1.0', NULL, 1, NULL, NULL, NULL, NULL);
1104+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (35, 1, '1.0', '2006-04-11 11:19:01', 1, NULL, 1, NULL, NULL, NULL, 'any', NULL, 1, 16, 26, 1, 1, NULL, NULL, '1.0', NULL, 10, NULL, NULL, NULL, NULL);
1105+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (36, 243606, '1.0-1', '2007-08-09 21:25:37.832976', 1, NULL, 5, 'commercialpackage (1.0-1) breezy; urgency=low
1106
1107 * Initial version
1108 Address for testing linkification: Foo Bar <foo.bar@canonical.com>
1109@@ -8971,8 +9049,8 @@
1110 iD8DBQFGtzTjWhGlTF8G/HcRAtFsAJ4hHyKhOnsUOQDI+SAk000DmFAnUgCcC84J
1111 3F4bEPeRcnUjCFI/hjR0kxg=
1112 =Tjln
1113-', 7, 243606, 27, 10, 1, 'Julian Edwards <launchpad@julian-edwards.com>', '3.6.2', '1.0', 'commercialpackage', 12, NULL, NULL, NULL);
1114-INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep) VALUES (37, 1, '1.0', '2006-04-11 11:19:01', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 1, 16, 26, 1, 1, NULL, NULL, '1.0', NULL, 11, NULL, NULL, NULL);
1115+', 7, 243606, 27, 10, 1, 'Julian Edwards <launchpad@julian-edwards.com>', '3.6.2', '1.0', 'commercialpackage', 12, NULL, NULL, NULL, NULL);
1116+INSERT INTO sourcepackagerelease (id, creator, version, dateuploaded, urgency, dscsigningkey, component, changelog_entry, builddepends, builddependsindep, architecturehintlist, dsc, section, maintainer, sourcepackagename, upload_distroseries, format, dsc_maintainer_rfc822, dsc_standards_version, dsc_format, dsc_binaries, upload_archive, copyright, build_conflicts, build_conflicts_indep, sourcepackage_recipe_build) VALUES (37, 1, '1.0', '2006-04-11 11:19:01', 1, NULL, 1, NULL, NULL, NULL, 'i386', NULL, 1, 16, 26, 1, 1, NULL, NULL, '1.0', NULL, 11, NULL, NULL, NULL, NULL);
1117
1118
1119 ALTER TABLE sourcepackagerelease ENABLE TRIGGER ALL;
1120
1121=== modified file 'database/schema/Makefile'
1122--- database/schema/Makefile 2009-09-23 10:48:06 +0000
1123+++ database/schema/Makefile 2010-03-04 20:06:42 +0000
1124@@ -122,6 +122,8 @@
1125 echo "* Installing PL/PgSQL"; \
1126 createlang -d ${EMPTY_DBNAME} plpgsql; \
1127 fi
1128+ @ echo "* Creating todrop schema"
1129+ @ psql -d ${EMPTY_DBNAME} -q -c "CREATE SCHEMA todrop;"
1130 @ echo "* Creating functions"
1131 @ psql -d ${EMPTY_DBNAME} -f trusted.sql | grep : | cat
1132 @ psql -d ${EMPTY_DBNAME} -f testfuncs.sql | grep : | cat
1133
1134=== modified file 'database/schema/comments.sql'
1135--- database/schema/comments.sql 2010-02-22 13:08:23 +0000
1136+++ database/schema/comments.sql 2010-03-04 20:06:42 +0000
1137@@ -22,6 +22,13 @@
1138 COMMENT ON COLUMN AnswerContact.person IS 'The person or team associated with the question target.';
1139 COMMENT ON COLUMN AnswerContact.date_created IS 'The date the answer contact was submitted.';
1140
1141+-- ApportJob
1142+
1143+COMMENT ON TABLE ApportJob IS 'Contains references to jobs to be run against Apport BLOBs.';
1144+COMMENT ON COLUMN ApportJob.blob IS 'The TemporaryBlobStorage entry on which the job is to be run.';
1145+COMMENT ON COLUMN ApportJob.job_type IS 'The type of job (enumeration value). Allows us to query the database for a given subset of ApportJobs.';
1146+COMMENT ON COLUMN ApportJob.json_data IS 'A JSON struct containing data for the job.';
1147+
1148 -- Branch
1149 COMMENT ON TABLE Branch IS 'Bzr branch';
1150 COMMENT ON COLUMN Branch.registrant IS 'The user that registered the branch.';
1151@@ -155,6 +162,7 @@
1152 COMMENT ON COLUMN Bug.users_affected_count IS 'The number of users affected by this bug, maintained by the set_bug_users_affected_count_t trigger.';
1153 COMMENT ON COLUMN Bug.heat IS 'The relevance of this bug. This value is computed periodically using bug_affects_person and other bug values.';
1154 COMMENT ON COLUMN Bug.heat_last_updated IS 'The time this bug''s heat was last updated, or NULL if the heat has never yet been updated.';
1155+COMMENT ON COLUMN Bug.latest_patch_uploaded IS 'The time when the most recent patch has been attached to this bug or NULL if no patches are attached';
1156
1157 -- BugBranch
1158 COMMENT ON TABLE BugBranch IS 'A branch related to a bug, most likely a branch for fixing the bug.';
1159@@ -453,7 +461,7 @@
1160
1161 COMMENT ON TABLE DistributionSourcePackage IS 'Representing a sourcepackage in a distribution across all distribution series.';
1162 COMMENT ON COLUMN DistributionSourcePackage.bug_reporting_guidelines IS 'Guidelines to the end user for reporting bugs on a particular a source package in a distribution.';
1163-
1164+COMMENT ON COLUMN DistributionSourcePackage.max_bug_heat IS 'The highest heat value across bugs for this source package.';
1165
1166 -- DistributionSourcePackageCache
1167
1168@@ -467,7 +475,6 @@
1169 COMMENT ON COLUMN DistributionSourcePackageCache.changelog IS 'A concatenation of the source package release changelogs for this source package, where the status is not REMOVED.';
1170 COMMENT ON COLUMN DistributionSourcePackageCache.archive IS 'The archive where the source is published.';
1171
1172-
1173 -- DistroSeriesPackageCache
1174
1175 COMMENT ON TABLE DistroSeriesPackageCache IS 'A cache of the text associated with binary packages in the distroseries. This table allows for fast queries to find a binary packagename that matches a given text.';
1176@@ -604,6 +611,7 @@
1177 COMMENT ON COLUMN Product.reviewer_whiteboard IS 'A whiteboard for Launchpad admins, registry experts and the project owners to capture the state of current issues with the project.';
1178 COMMENT ON COLUMN Product.license_approved IS 'The Other/Open Source license has been approved by an administrator.';
1179 COMMENT ON COLUMN Product.remote_product IS 'The ID of this product on its remote bug tracker.';
1180+COMMENT ON COLUMN Product.max_bug_heat IS 'The highest heat value across bugs for this product.';
1181
1182 -- ProductLicense
1183 COMMENT ON TABLE ProductLicense IS 'The licenses that cover the software for a product.';
1184@@ -695,6 +703,7 @@
1185 COMMENT ON COLUMN Project.logo IS 'The library file alias of a smaller version of this product''s mugshot.';
1186 COMMENT ON COLUMN Project.bug_reporting_guidelines IS 'Guidelines to the end user for reporting bugs on products in this project.';
1187 COMMENT ON COLUMN Project.reviewer_whiteboard IS 'A whiteboard for Launchpad admins, registry experts and the project owners to capture the state of current issues with the project.';
1188+COMMENT ON COLUMN Project.max_bug_heat IS 'The highest heat value across bugs for products in this project.';
1189
1190 -- ProjectRelationship
1191 COMMENT ON TABLE ProjectRelationship IS 'Project Relationships. This table stores information about the way projects are related to one another in the open source world. The actual nature of the relationship is stored in the ''label'' field, and possible values are given by the ProjectRelationship enum in dbschema.py. Examples are AGGREGATES ("the Gnome Project AGGREGATES EOG and Evolution and Gnumeric and AbiWord") and SIMILAR ("the Evolution project is SIMILAR to the Mutt project").';
1192@@ -958,6 +967,7 @@
1193 COMMENT ON COLUMN Distribution.enable_bug_expiration IS 'Indicates whether automatic bug expiration is enabled.';
1194 COMMENT ON COLUMN Distribution.bug_reporting_guidelines IS 'Guidelines to the end user for reporting bugs on this distribution.';
1195 COMMENT ON COLUMN Distribution.reviewer_whiteboard IS 'A whiteboard for Launchpad admins, registry experts and the project owners to capture the state of current issues with the project.';
1196+COMMENT ON COLUMN Distribution.max_bug_heat IS 'The highest heat value across bugs for this distribution.';
1197
1198 -- DistroSeries
1199
1200@@ -1032,31 +1042,27 @@
1201 COMMENT ON COLUMN BinaryPackageName.name IS
1202 'A lowercase name identifying one or more binarypackages';
1203
1204--- SecureBinaryPackagePublishingHistory
1205-COMMENT ON TABLE SecureBinaryPackagePublishingHistory IS 'PackagePublishingHistory: The history of a BinaryPackagePublishing record. This table represents the lifetime of a publishing record from inception to deletion. Records are never removed from here and in time the publishing table may become a view onto this table. A column being NULL indicates there''s no data for that state transition. E.g. a package which is removed without being superseded won''t have datesuperseded or supersededby filled in.';
1206-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.binarypackagerelease IS 'The binarypackage being published.';
1207-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.distroarchseries IS 'The distroarchseries into which the binarypackage is being published.';
1208-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.status IS 'The current status of the publishing.';
1209-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.component IS 'The component into which the publishing takes place.';
1210-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.section IS 'The section into which the publishing takes place.';
1211-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.priority IS 'The priority at which the publishing takes place.';
1212-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.datecreated IS 'The date/time on which the publishing record was created.';
1213-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.datepublished IS 'The date/time on which the source was actually published into an archive.';
1214-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.datesuperseded IS 'The date/time on which the source was superseded by a new source.';
1215-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.supersededby IS 'The build which superseded this package. This seems odd but it is important because a new build may not actually build a given binarypackage and we need to supersede it appropriately';
1216-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.datemadepending IS 'The date/time on which this publishing record was made to be pending removal from the archive.';
1217-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.scheduleddeletiondate IS 'The date/time at which the package is/was scheduled to be deleted.';
1218-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.dateremoved IS 'The date/time at which the package was actually deleted.';
1219-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.pocket IS 'The pocket into which this record is published. The RELEASE pocket (zero) provides behaviour as normal. Other pockets may append things to the distroseries name such as the UPDATES pocket (-updates) or the SECURITY pocket (-security).';
1220-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.embargo IS 'The publishing record is embargoed from publication if this is set to TRUE. When TRUE, this column prevents the publication record from even showing up in the publishing tables.';
1221-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.embargolifted IS 'The date and time when we lifted the embargo on this publishing record. I.E. when embargo was set to FALSE having previously been set to TRUE.';
1222-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.archive IS 'Target archive for this publishing record.';
1223-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.removed_by IS 'Person responsible for the removal.';
1224-COMMENT ON COLUMN SecureBinaryPackagePublishingHistory.removal_comment IS 'Reason why the publication was removed.';
1225-
1226--- BinaryPackagePublishingHistory and PublishedPackage Views
1227-
1228-COMMENT ON VIEW BinaryPackagePublishingHistory IS 'View on SecureBinaryPackagePublishingHistory that restricts access to embargoed entries';
1229+-- BinaryPackagePublishingHistory
1230+COMMENT ON TABLE BinaryPackagePublishingHistory IS 'PackagePublishingHistory: The history of a BinaryPackagePublishing record. This table represents the lifetime of a publishing record from inception to deletion. Records are never removed from here and in time the publishing table may become a view onto this table. A column being NULL indicates there''s no data for that state transition. E.g. a package which is removed without being superseded won''t have datesuperseded or supersededby filled in.';
1231+COMMENT ON COLUMN BinaryPackagePublishingHistory.binarypackagerelease IS 'The binarypackage being published.';
1232+COMMENT ON COLUMN BinaryPackagePublishingHistory.distroarchseries IS 'The distroarchseries into which the binarypackage is being published.';
1233+COMMENT ON COLUMN BinaryPackagePublishingHistory.status IS 'The current status of the publishing.';
1234+COMMENT ON COLUMN BinaryPackagePublishingHistory.component IS 'The component into which the publishing takes place.';
1235+COMMENT ON COLUMN BinaryPackagePublishingHistory.section IS 'The section into which the publishing takes place.';
1236+COMMENT ON COLUMN BinaryPackagePublishingHistory.priority IS 'The priority at which the publishing takes place.';
1237+COMMENT ON COLUMN BinaryPackagePublishingHistory.datecreated IS 'The date/time on which the publishing record was created.';
1238+COMMENT ON COLUMN BinaryPackagePublishingHistory.datepublished IS 'The date/time on which the source was actually published into an archive.';
1239+COMMENT ON COLUMN BinaryPackagePublishingHistory.datesuperseded IS 'The date/time on which the source was superseded by a new source.';
1240+COMMENT ON COLUMN BinaryPackagePublishingHistory.supersededby IS 'The build which superseded this package. This seems odd but it is important because a new build may not actually build a given binarypackage and we need to supersede it appropriately';
1241+COMMENT ON COLUMN BinaryPackagePublishingHistory.datemadepending IS 'The date/time on which this publishing record was made to be pending removal from the archive.';
1242+COMMENT ON COLUMN BinaryPackagePublishingHistory.scheduleddeletiondate IS 'The date/time at which the package is/was scheduled to be deleted.';
1243+COMMENT ON COLUMN BinaryPackagePublishingHistory.dateremoved IS 'The date/time at which the package was actually deleted.';
1244+COMMENT ON COLUMN BinaryPackagePublishingHistory.pocket IS 'The pocket into which this record is published. The RELEASE pocket (zero) provides behaviour as normal. Other pockets may append things to the distroseries name such as the UPDATES pocket (-updates) or the SECURITY pocket (-security).';
1245+COMMENT ON COLUMN BinaryPackagePublishingHistory.archive IS 'Target archive for this publishing record.';
1246+COMMENT ON COLUMN BinaryPackagePublishingHistory.removed_by IS 'Person responsible for the removal.';
1247+COMMENT ON COLUMN BinaryPackagePublishingHistory.removal_comment IS 'Reason why the publication was removed.';
1248+
1249+-- PublishedPackage View
1250
1251 COMMENT ON VIEW PublishedPackage IS
1252 'A very large view that brings together all the information about
1253@@ -1340,16 +1346,10 @@
1254 COMMENT ON COLUMN SourcePackageRecipeBuild.date_first_dispatched IS 'The instant the build was dispatched the first time. This value will not get overridden if the build is retried.';
1255 COMMENT ON COLUMN SourcePackageRecipeBuild.requester IS 'Who requested the build.';
1256 COMMENT ON COLUMN SourcePackageRecipeBuild.recipe IS 'The recipe being processed.';
1257-COMMENT ON COLUMN SourcePackageRecipeBuild.archive IS 'The archive the source package will be uploaded to.';
1258-
1259--- SourcePackageRecipeBuildUpload
1260-
1261-COMMENT ON TABLE SourcePackageRecipeBuildUpload IS 'The record of uploading the source package built by a SourcePackageRecipeBuild to an archive.';
1262-COMMENT ON COLUMN SourcePackageRecipeBuildUpload.registrant IS 'Who requested the upload.';
1263-COMMENT ON COLUMN SourcePackageRecipeBuildUpload.sourcepackage_recipe_build IS 'Upload the output of this build.';
1264-COMMENT ON COLUMN SourcePackageRecipeBuildUpload.archive IS 'The archive to upload to.';
1265-COMMENT ON COLUMN SourcePackageRecipeBuildUpload.upload_log IS 'The output from uploading the source package to the archive.';
1266-COMMENT ON COLUMN SourcePackageRecipeBuildUpload.state IS 'The state of the upload.';
1267+COMMENT ON COLUMN SourcePackageRecipeBuild.archive IS 'The archive the source package will be built in and uploaded to.';
1268+COMMENT ON COLUMN SourcePackageRecipeBuild.pocket IS 'The pocket the source package will be built in and uploaded to.';
1269+COMMENT ON COLUMN SourcePackageRecipeBuild.dependencies IS 'The missing build dependencies, if any.';
1270+COMMENT ON COLUMN SourcePackageRecipeBuild.upload_log IS 'The output from uploading the source package to the archive.';
1271
1272 -- SourcePackageRecipeBuildJob
1273
1274@@ -1628,31 +1628,25 @@
1275 COMMENT ON COLUMN MirrorSourceContent.distroseries IS 'A distroseries that this mirror contains.';
1276 COMMENT ON COLUMN MirrorSourceContent.component IS 'What component of the distroseries that this sourcepackage mirror contains.';
1277
1278--- SecureSourcePackagePublishingHistory
1279-
1280-COMMENT ON TABLE SecureSourcePackagePublishingHistory IS 'SourcePackagePublishingHistory: The history of a SourcePackagePublishing record. This table represents the lifetime of a publishing record from inception to deletion. Records are never removed from here and in time the publishing table may become a view onto this table. A column being NULL indicates there''s no data for that state transition. E.g. a package which is removed without being superseded won''t have datesuperseded or supersededby filled in.';
1281-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.sourcepackagerelease IS 'The sourcepackagerelease being published.';
1282-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.distroseries IS 'The distroseries into which the sourcepackagerelease is being published.';
1283-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.status IS 'The current status of the publishing.';
1284-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.component IS 'The component into which the publishing takes place.';
1285-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.section IS 'The section into which the publishing takes place.';
1286-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.datecreated IS 'The date/time on which the publishing record was created.';
1287-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.datepublished IS 'The date/time on which the source was actually published into an archive.';
1288-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.datesuperseded IS 'The date/time on which the source was superseded by a new source.';
1289-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.supersededby IS 'The source which superseded this one.';
1290-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.datemadepending IS 'The date/time on which this publishing record was made to be pending removal from the archive.';
1291-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.scheduleddeletiondate IS 'The date/time at which the source is/was scheduled to be deleted.';
1292-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.dateremoved IS 'The date/time at which the source was actually deleted.';
1293-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.pocket IS 'The pocket into which this record is published. The RELEASE pocket (zero) provides behaviour as normal. Other pockets may append things to the distroseries name such as the UPDATES pocket (-updates), the SECURITY pocket (-security) and the PROPOSED pocket (-proposed)';
1294-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.embargo IS 'The publishing record is embargoed from publication if this is set to TRUE. When TRUE, this column prevents the publication record from even showing up in the publishing tables.';
1295-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.embargolifted IS 'The date and time when we lifted the embargo on this publishing record. I.E. when embargo was set to FALSE having previously been set to TRUE.';
1296-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.removed_by IS 'Person responsible for the removal.';
1297-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.removal_comment IS 'Reason why the publication was removed.';
1298-
1299--- SourcePackagePublishingHistory View
1300-
1301-COMMENT ON VIEW SourcePackagePublishingHistory IS 'A view on SecureSourcePackagePublishingHistory that restricts access to embargoed entries';
1302-COMMENT ON COLUMN SecureSourcePackagePublishingHistory.archive IS 'The target archive for thi publishing record.';
1303+-- SourcePackagePublishingHistory
1304+
1305+COMMENT ON TABLE SourcePackagePublishingHistory IS 'SourcePackagePublishingHistory: The history of a SourcePackagePublishing record. This table represents the lifetime of a publishing record from inception to deletion. Records are never removed from here and in time the publishing table may become a view onto this table. A column being NULL indicates there''s no data for that state transition. E.g. a package which is removed without being superseded won''t have datesuperseded or supersededby filled in.';
1306+COMMENT ON COLUMN SourcePackagePublishingHistory.sourcepackagerelease IS 'The sourcepackagerelease being published.';
1307+COMMENT ON COLUMN SourcePackagePublishingHistory.distroseries IS 'The distroseries into which the sourcepackagerelease is being published.';
1308+COMMENT ON COLUMN SourcePackagePublishingHistory.status IS 'The current status of the publishing.';
1309+COMMENT ON COLUMN SourcePackagePublishingHistory.component IS 'The component into which the publishing takes place.';
1310+COMMENT ON COLUMN SourcePackagePublishingHistory.section IS 'The section into which the publishing takes place.';
1311+COMMENT ON COLUMN SourcePackagePublishingHistory.datecreated IS 'The date/time on which the publishing record was created.';
1312+COMMENT ON COLUMN SourcePackagePublishingHistory.datepublished IS 'The date/time on which the source was actually published into an archive.';
1313+COMMENT ON COLUMN SourcePackagePublishingHistory.datesuperseded IS 'The date/time on which the source was superseded by a new source.';
1314+COMMENT ON COLUMN SourcePackagePublishingHistory.supersededby IS 'The source which superseded this one.';
1315+COMMENT ON COLUMN SourcePackagePublishingHistory.datemadepending IS 'The date/time on which this publishing record was made to be pending removal from the archive.';
1316+COMMENT ON COLUMN SourcePackagePublishingHistory.scheduleddeletiondate IS 'The date/time at which the source is/was scheduled to be deleted.';
1317+COMMENT ON COLUMN SourcePackagePublishingHistory.dateremoved IS 'The date/time at which the source was actually deleted.';
1318+COMMENT ON COLUMN SourcePackagePublishingHistory.pocket IS 'The pocket into which this record is published. The RELEASE pocket (zero) provides behaviour as normal. Other pockets may append things to the distroseries name such as the UPDATES pocket (-updates), the SECURITY pocket (-security) and the PROPOSED pocket (-proposed)';
1319+COMMENT ON COLUMN SourcePackagePublishingHistory.removed_by IS 'Person responsible for the removal.';
1320+COMMENT ON COLUMN SourcePackagePublishingHistory.removal_comment IS 'Reason why the publication was removed.';
1321+COMMENT ON COLUMN SourcePackagePublishingHistory.archive IS 'The target archive for thi publishing record.';
1322
1323 -- Packaging
1324 COMMENT ON TABLE Packaging IS 'DO NOT JOIN THROUGH THIS TABLE. This is a set
1325@@ -1865,6 +1859,7 @@
1326 COMMENT ON COLUMN DistributionMirror.whiteboard IS 'Notes on the current status of the mirror';
1327 COMMENT ON COLUMN DistributionMirror.date_created IS 'The date and time the mirror was created.';
1328 COMMENT ON COLUMN DistributionMirror.date_reviewed IS 'The date and time the mirror was reviewed.';
1329+COMMENT ON COLUMN DistributionMirror.country_dns_mirror IS 'Is the mirror a country DNS mirror?';
1330
1331 -- MirrorDistroArchSeries
1332 COMMENT ON TABLE MirrorDistroArchSeries IS 'The mirror of the packages of a given Distro Arch Release.';
1333@@ -2344,3 +2339,7 @@
1334 COMMENT ON COLUMN SourcePackageFormatSelection.distroseries IS 'Refers to the distroseries in question.';
1335 COMMENT ON COLUMN SourcePackageFormatSelection.format IS 'The SourcePackageFormat to allow.';
1336
1337+COMMENT ON TABLE DatabaseReplicationLag IS 'A cached snapshot of database replication lag between our master Slony node and its slaves.';
1338+COMMENT ON COLUMN DatabaseReplicationLag.node IS 'The Slony node number identifying the slave database.';
1339+COMMENT ON COLUMN DatabaseReplicationLag.lag IS 'lag time.';
1340+COMMENT ON COLUMN DatabaseReplicationLag.updated IS 'When this value was updated.';
1341
1342=== modified file 'database/schema/diagram.py'
1343--- database/schema/diagram.py 2009-10-17 14:06:03 +0000
1344+++ database/schema/diagram.py 2010-03-04 20:06:42 +0000
1345@@ -9,7 +9,6 @@
1346 import _pythonpath
1347
1348 import psycopg, sys, os, re
1349-from sets import Set
1350 from security import DbSchema, CursorWrapper
1351 from ConfigParser import SafeConfigParser, NoOptionError
1352
1353@@ -51,8 +50,8 @@
1354 '''The universe contains everything'''
1355 return True
1356
1357-all_tables = Set()
1358-graphed_tables = Set()
1359+all_tables = set()
1360+graphed_tables = set()
1361
1362 def tartup(filename, outfile, section):
1363 dot = open(filename).read()
1364
1365=== renamed file 'database/schema/patch-2207-09.0.sql' => 'database/schema/patch-2207-09-0.sql'
1366=== added file 'database/schema/patch-2207-23-0.sql'
1367--- database/schema/patch-2207-23-0.sql 1970-01-01 00:00:00 +0000
1368+++ database/schema/patch-2207-23-0.sql 2010-03-04 20:06:42 +0000
1369@@ -0,0 +1,19 @@
1370+-- Copyright 2010 Canonical Ltd. This software is licensed under the
1371+-- GNU Affero General Public License version 3 (see the file LICENSE).
1372+
1373+SET client_min_messages=ERROR;
1374+
1375+ALTER TABLE DistributionMirror
1376+ ADD COLUMN country_dns_mirror boolean DEFAULT FALSE NOT NULL;
1377+
1378+--- Index for country archive mirrors, one per country.
1379+CREATE UNIQUE INDEX distributionmirror__archive__distribution__country__key
1380+ ON DistributionMirror(distribution, country, content)
1381+ WHERE country_dns_mirror IS TRUE AND content = 1;
1382+
1383+--- Index for country CD image mirrors, one per country.
1384+CREATE UNIQUE INDEX distributionmirror__releases__distribution__country__key
1385+ ON DistributionMirror(distribution, country, content)
1386+ WHERE country_dns_mirror IS TRUE AND content = 2;
1387+
1388+INSERT INTO LaunchpadDatabaseRevision VALUES (2207, 23, 0);
1389
1390=== added file 'database/schema/patch-2207-28-1.sql'
1391--- database/schema/patch-2207-28-1.sql 1970-01-01 00:00:00 +0000
1392+++ database/schema/patch-2207-28-1.sql 2010-03-04 20:06:42 +0000
1393@@ -0,0 +1,9 @@
1394+SET client_min_messages = ERROR;
1395+
1396+CREATE TABLE DatabaseReplicationLag (
1397+ node integer PRIMARY KEY,
1398+ lag interval NOT NULL,
1399+ updated timestamp without time zone
1400+ DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'));
1401+
1402+INSERT INTO LaunchpadDatabaseRevision VALUES (2207, 28, 1);
1403
1404=== added file 'database/schema/patch-2207-29-0.sql'
1405--- database/schema/patch-2207-29-0.sql 1970-01-01 00:00:00 +0000
1406+++ database/schema/patch-2207-29-0.sql 2010-03-04 20:06:42 +0000
1407@@ -0,0 +1,34 @@
1408+-- Copyright 2010 Canonical Ltd. This software is licensed under the
1409+-- GNU Affero General Public License version 3 (see the file LICENSE).
1410+
1411+SET client_min_messages=ERROR;
1412+
1413+ALTER TABLE bug
1414+ ADD COLUMN latest_patch_uploaded timestamp without time zone
1415+ DEFAULT NULL;
1416+
1417+CREATE INDEX bug__latest_patch_uploaded__idx
1418+ ON bug(latest_patch_uploaded);
1419+
1420+CREATE TRIGGER bug_latest_patch_uploaded_on_insert_update_t
1421+AFTER INSERT OR UPDATE ON bugattachment
1422+FOR EACH ROW EXECUTE PROCEDURE bug_update_latest_patch_uploaded_on_insert_update();
1423+
1424+CREATE TRIGGER bug_latest_patch_uploaded_on_delete_t
1425+AFTER DELETE ON bugattachment
1426+FOR EACH ROW EXECUTE PROCEDURE bug_update_latest_patch_uploaded_on_delete();
1427+
1428+CREATE INDEX bugattachment__bug__idx ON BugAttachment(bug);
1429+
1430+UPDATE Bug
1431+SET latest_patch_uploaded = LatestPatch.datecreated
1432+FROM (
1433+ SELECT BugAttachment.bug, max(Message.datecreated) AS datecreated
1434+ FROM BugAttachment, Message
1435+ WHERE BugAttachment.message = Message.id
1436+ AND BugAttachment.type = 1
1437+ GROUP BY BugAttachment.bug
1438+ ) AS LatestPatch
1439+WHERE LatestPatch.bug = Bug.id;
1440+
1441+INSERT INTO LaunchpadDatabaseRevision VALUES (2207, 29, 0);
1442
1443=== added file 'database/schema/patch-2207-30-0.sql'
1444--- database/schema/patch-2207-30-0.sql 1970-01-01 00:00:00 +0000
1445+++ database/schema/patch-2207-30-0.sql 2010-03-04 20:06:42 +0000
1446@@ -0,0 +1,14 @@
1447+SET client_min_messages=ERROR;
1448+
1449+CREATE TABLE ApportJob(
1450+ id serial NOT NULL PRIMARY KEY,
1451+ job integer NOT NULL REFERENCES Job(id),
1452+ blob integer NOT NULL REFERENCES TemporaryBlobStorage(id),
1453+ job_type integer NOT NULL,
1454+ json_data text
1455+);
1456+
1457+ALTER TABLE ApportJob ADD CONSTRAINT apportjob__job__key UNIQUE (job);
1458+CREATE INDEX apportjob__blob__idx ON ApportJob(blob);
1459+
1460+INSERT INTO LaunchpadDatabaseRevision VALUES (2207, 30, 0)
1461
1462=== added file 'database/schema/patch-2207-31-0.sql'
1463--- database/schema/patch-2207-31-0.sql 1970-01-01 00:00:00 +0000
1464+++ database/schema/patch-2207-31-0.sql 2010-03-04 20:06:42 +0000
1465@@ -0,0 +1,27 @@
1466+
1467+SET client_min_messages=ERROR;
1468+
1469+DROP VIEW SourcePackagePublishingHistory;
1470+DROP VIEW BinaryPackagePublishingHistory;
1471+
1472+ALTER TABLE SecureSourcePackagePublishingHistory
1473+ RENAME TO SourcePackagePublishingHistory;
1474+ALTER TABLE SecureBinaryPackagePublishingHistory
1475+ RENAME TO BinaryPackagePublishingHistory;
1476+
1477+ALTER SEQUENCE securesourcepackagepublishinghistory_id_seq
1478+ RENAME TO sourcepackagepublishinghistory_id_seq;
1479+ALTER SEQUENCE securebinarypackagepublishinghistory_id_seq
1480+ RENAME TO binarypackagepublishinghistory_id_seq;
1481+
1482+ALTER TABLE SourcePackagePublishingHistory
1483+ DROP COLUMN embargolifted;
1484+ALTER TABLE SourcePackagePublishingHistory
1485+ DROP COLUMN embargo;
1486+ALTER TABLE BinaryPackagePublishingHistory
1487+ DROP COLUMN embargolifted;
1488+ALTER TABLE BinaryPackagePublishingHistory
1489+ DROP COLUMN embargo;
1490+
1491+INSERT INTO LaunchpadDatabaseRevision VALUES (2207, 31, 0);
1492+
1493
1494=== added file 'database/schema/patch-2207-32-0.sql'
1495--- database/schema/patch-2207-32-0.sql 1970-01-01 00:00:00 +0000
1496+++ database/schema/patch-2207-32-0.sql 2010-03-04 20:06:42 +0000
1497@@ -0,0 +1,24 @@
1498+SET client_min_messages=ERROR;
1499+
1500+ALTER TABLE SourcePackageRecipeBuild ADD COLUMN dependencies text;
1501+ALTER TABLE SourcePackageRecipeBuild ADD COLUMN pocket integer
1502+ DEFAULT 0 NOT NULL;
1503+ALTER TABLE SourcePackageRecipeBuild ADD COLUMN upload_log integer
1504+ CONSTRAINT sourcepackagerecipebuild__upload_log__fk
1505+ REFERENCES LibraryFileAlias;
1506+
1507+CREATE INDEX sourcepackagerecipebuild__upload_log__idx
1508+ ON SourcePackageRecipeBuild(upload_log) WHERE upload_log IS NOT NULL;
1509+
1510+-- We can't drop tables in DB patches due to Slony-I limitations, so
1511+-- we give them a magic name for database/schema/upgrade.py to deal
1512+-- with correctly.
1513+-- Drop the constraint right now so the person privacy checker doesn't
1514+-- look at this table at all.
1515+ALTER TABLE SourcePackageRecipeBuildUpload DROP CONSTRAINT sourcepackagerecipebuildupload_archive_fkey;
1516+ALTER TABLE SourcePackageRecipeBuildUpload DROP CONSTRAINT sourcepackagerecipebuildupload_registrant_fkey;
1517+ALTER TABLE SourcePackageRecipeBuildUpload DROP CONSTRAINT sourcepackagerecipebuildupload_sourcepackage_recipe_build_fkey;
1518+ALTER TABLE SourcePackageRecipeBuildUpload DROP CONSTRAINT sourcepackagerecipebuildupload_upload_log_fkey;
1519+ALTER TABLE SourcePackageRecipeBuildUpload SET SCHEMA todrop;
1520+
1521+INSERT INTO LaunchpadDatabaseRevision VALUES (2207, 32, 0);
1522
1523=== added file 'database/schema/patch-2207-33-0.sql'
1524--- database/schema/patch-2207-33-0.sql 1970-01-01 00:00:00 +0000
1525+++ database/schema/patch-2207-33-0.sql 2010-03-04 20:06:42 +0000
1526@@ -0,0 +1,9 @@
1527+-- Copyright 2010 Canonical Ltd. This software is licensed under the
1528+-- GNU Affero General Public License version 3 (see the file LICENSE).
1529+
1530+SET client_min_messages=ERROR;
1531+
1532+ALTER TABLE BranchMergeProposal
1533+ ADD COLUMN description TEXT;
1534+
1535+INSERT INTO LaunchpadDatabaseRevision VALUES (2207, 33, 0);
1536
1537=== added file 'database/schema/patch-2207-34-0.sql'
1538--- database/schema/patch-2207-34-0.sql 1970-01-01 00:00:00 +0000
1539+++ database/schema/patch-2207-34-0.sql 2010-03-04 20:06:42 +0000
1540@@ -0,0 +1,11 @@
1541+-- Copyright 2010 Canonical Ltd. This software is licensed under the
1542+-- GNU Affero General Public License version 3 (see the file LICENSE).
1543+
1544+SET client_min_messages=ERROR;
1545+
1546+ALTER TABLE product ADD COLUMN max_bug_heat integer;
1547+ALTER TABLE project ADD COLUMN max_bug_heat integer;
1548+ALTER TABLE distribution ADD COLUMN max_bug_heat integer;
1549+ALTER TABLE distributionsourcepackage ADD COLUMN max_bug_heat integer;
1550+
1551+INSERT INTO LaunchpadDatabaseRevision VALUES (2207, 34, 0);
1552
1553=== added file 'database/schema/patch-2207-35-0.sql'
1554--- database/schema/patch-2207-35-0.sql 1970-01-01 00:00:00 +0000
1555+++ database/schema/patch-2207-35-0.sql 2010-03-04 20:06:42 +0000
1556@@ -0,0 +1,8 @@
1557+-- Copyright 2010 Canonical Ltd. This software is licensed under the
1558+-- GNU Affero General Public License version 3 (see the file LICENSE).
1559+
1560+SET client_min_messages=ERROR;
1561+
1562+ALTER TABLE processorfamily ADD COLUMN restricted boolean DEFAULT FALSE NOT NULL;
1563+
1564+INSERT INTO LaunchpadDatabaseRevision VALUES (2207, 35, 0);
1565
1566=== modified file 'database/schema/security.cfg'
1567--- database/schema/security.cfg 2010-01-29 17:15:31 +0000
1568+++ database/schema/security.cfg 2010-03-04 20:06:42 +0000
1569@@ -121,10 +121,11 @@
1570 public.account = SELECT
1571 public.announcement = SELECT, INSERT, UPDATE, DELETE
1572 public.answercontact = SELECT, INSERT, UPDATE, DELETE
1573+public.apportjob = SELECT, INSERT, UPDATE, DELETE
1574 public.archive = SELECT, INSERT, UPDATE
1575 public.archiveauthtoken = SELECT, INSERT, UPDATE
1576 public.archivesubscriber = SELECT, INSERT, UPDATE
1577-public.archivearch = SELECT, INSERT, UPDATE
1578+public.archivearch = SELECT, INSERT, UPDATE, DELETE
1579 public.archivedependency = SELECT, INSERT, DELETE
1580 public.archivepermission = SELECT, INSERT, UPDATE, DELETE
1581 public.authtoken = SELECT, INSERT, UPDATE, DELETE
1582@@ -165,6 +166,7 @@
1583 public.cvereference = SELECT, INSERT
1584 public.cve = SELECT, INSERT, UPDATE
1585 public.customlanguagecode = SELECT, INSERT, UPDATE, DELETE
1586+public.databasereplicationlag = SELECT
1587 public.diff = SELECT, INSERT, UPDATE
1588 public.distributionbounty = SELECT, INSERT, UPDATE
1589 public.distributionmirror = SELECT, INSERT, UPDATE, DELETE
1590@@ -279,7 +281,6 @@
1591 public.sourcepackagerecipe = SELECT, INSERT, UPDATE, DELETE
1592 public.sourcepackagerecipebuild = SELECT, INSERT, UPDATE, DELETE
1593 public.sourcepackagerecipebuildjob = SELECT, INSERT, UPDATE
1594-public.sourcepackagerecipebuildupload = SELECT, INSERT, UPDATE, DELETE
1595 public.sourcepackagerecipedata = SELECT, INSERT, UPDATE, DELETE
1596 public.sourcepackagerecipedatainstruction = SELECT, INSERT, UPDATE, DELETE
1597 public.specificationbranch = SELECT, INSERT, UPDATE, DELETE
1598@@ -411,7 +412,6 @@
1599 public.sprint = SELECT
1600 public.sourcepackagereleasefile = SELECT
1601 public.sourcepackagerecipebuild = SELECT
1602-public.sourcepackagerecipebuildupload = SELECT
1603 public.temporaryblobstorage = SELECT, DELETE
1604 public.translationimportqueueentry = SELECT
1605
1606@@ -546,6 +546,7 @@
1607 public.bugactivity = SELECT, INSERT
1608 public.bugaffectsperson = SELECT, INSERT, UPDATE, DELETE
1609 public.bugcve = SELECT, INSERT
1610+public.bugjob = SELECT, INSERT
1611 public.bugmessage = SELECT, INSERT, UPDATE
1612 public.bugnomination = SELECT
1613 public.bugnotification = SELECT, INSERT
1614@@ -561,6 +562,7 @@
1615 public.distribution = SELECT
1616 public.distroseries = SELECT
1617 public.emailaddress = SELECT, INSERT
1618+public.job = SELECT, INSERT, UPDATE
1619 public.language = SELECT
1620 public.libraryfilealias = SELECT, INSERT
1621 public.libraryfilecontent = SELECT, INSERT
1622@@ -703,8 +705,8 @@
1623 public.mirrorproberecord = SELECT, INSERT
1624 public.person = SELECT
1625 public.processorfamily = SELECT
1626-public.securesourcepackagepublishinghistory = SELECT
1627-public.securebinarypackagepublishinghistory = SELECT
1628+public.sourcepackagepublishinghistory = SELECT
1629+public.binarypackagepublishinghistory = SELECT
1630 public.sourcepackagerelease = SELECT
1631 public.sourcepackagereleasefile = SELECT
1632 public.sourcepackagename = SELECT
1633@@ -770,8 +772,8 @@
1634 public.archivearch = SELECT, UPDATE
1635 public.distribution = SELECT
1636 public.packagediff = SELECT, INSERT, UPDATE
1637-public.securebinarypackagepublishinghistory = SELECT, INSERT, UPDATE, DELETE
1638-public.securesourcepackagepublishinghistory = SELECT, INSERT, UPDATE, DELETE
1639+public.binarypackagepublishinghistory = SELECT, INSERT, UPDATE, DELETE
1640+public.sourcepackagepublishinghistory = SELECT, INSERT, UPDATE, DELETE
1641
1642 [lucille]
1643 # Soyuz archive publisher.
1644@@ -790,8 +792,8 @@
1645 public.packagesetsources = SELECT, INSERT, UPDATE, DELETE
1646 public.packagesetinclusion = SELECT, INSERT, UPDATE, DELETE
1647 public.flatpackagesetinclusion = SELECT, INSERT, UPDATE, DELETE
1648-public.securebinarypackagepublishinghistory = SELECT, INSERT, UPDATE, DELETE
1649-public.securesourcepackagepublishinghistory = SELECT, INSERT, UPDATE, DELETE
1650+public.binarypackagepublishinghistory = SELECT, INSERT, UPDATE, DELETE
1651+public.sourcepackagepublishinghistory = SELECT, INSERT, UPDATE, DELETE
1652 public.sourcepackagepublishinghistory = SELECT
1653
1654 # Closing bugs for publication copies.
1655@@ -845,12 +847,12 @@
1656 public.distroseries = SELECT, UPDATE
1657 public.distroarchseries = SELECT, UPDATE
1658 public.sourcepackagepublishinghistory = SELECT
1659-public.securesourcepackagepublishinghistory = SELECT
1660+public.sourcepackagepublishinghistory = SELECT
1661 public.sourcepackagerelease = SELECT
1662 public.sourcepackagereleasefile = SELECT
1663 public.sourcepackagename = SELECT
1664 public.binarypackagepublishinghistory = SELECT
1665-public.securebinarypackagepublishinghistory = SELECT
1666+public.binarypackagepublishinghistory = SELECT
1667 public.binarypackagerelease = SELECT
1668 public.binarypackagefile = SELECT
1669 public.binarypackagename = SELECT
1670@@ -914,7 +916,7 @@
1671 # certain processes, such as the librarian tables. This group is deprecated -
1672 # access should be explicitly granted to users.
1673 public.archive = SELECT, INSERT, UPDATE
1674-public.archivearch = SELECT, INSERT, UPDATE
1675+public.archivearch = SELECT, INSERT, UPDATE, DELETE
1676 public.binarypackagerelease = SELECT, INSERT, UPDATE
1677 public.binarypackagefile = SELECT, INSERT, UPDATE
1678 public.binarypackagefilepublishing = SELECT, INSERT, UPDATE
1679@@ -925,6 +927,7 @@
1680 public.bug = SELECT, INSERT, UPDATE
1681 public.bugactivity = SELECT, INSERT, UPDATE
1682 public.bugattachment = SELECT, INSERT, UPDATE
1683+public.bugjob = SELECT, INSERT
1684 public.bugmessage = SELECT, INSERT, UPDATE
1685 public.bugnomination = SELECT, INSERT, UPDATE
1686 public.bugpackageinfestation = SELECT, INSERT, UPDATE
1687@@ -966,8 +969,7 @@
1688 public.teammembership = SELECT, INSERT, UPDATE, DELETE
1689 public.message = SELECT, INSERT, UPDATE
1690 public.milestone = SELECT, INSERT, UPDATE
1691-public.binarypackagepublishinghistory = SELECT
1692-public.securebinarypackagepublishinghistory = SELECT, INSERT, UPDATE, DELETE
1693+public.binarypackagepublishinghistory = SELECT, INSERT, UPDATE, DELETE
1694 public.packageselection = SELECT, INSERT, UPDATE
1695 public.packaging = SELECT, INSERT, UPDATE
1696 public.person = SELECT, INSERT, UPDATE
1697@@ -1000,8 +1002,7 @@
1698 public.sourcepackagefilepublishing = SELECT, INSERT, UPDATE
1699 public.sourcepackageformatselection = SELECT, INSERT
1700 public.sourcepackagename = SELECT, INSERT, UPDATE
1701-public.sourcepackagepublishinghistory = SELECT
1702-public.securesourcepackagepublishinghistory = SELECT, INSERT, UPDATE
1703+public.sourcepackagepublishinghistory = SELECT, INSERT, UPDATE
1704 public.sourcepackagerelease = SELECT, INSERT, UPDATE
1705 public.sourcepackagereleasefile = SELECT, INSERT, UPDATE
1706 public.spokenin = SELECT, INSERT, UPDATE
1707@@ -1126,6 +1127,7 @@
1708 public.binarypackagefile = SELECT, INSERT
1709 public.pocketchroot = SELECT
1710 public.build = SELECT, INSERT, UPDATE
1711+public.sourcepackagerecipebuild = SELECT, UPDATE
1712 public.buildqueue = SELECT, INSERT, UPDATE
1713 public.job = SELECT, INSERT, UPDATE
1714 public.buildpackagejob = SELECT, INSERT, UPDATE
1715@@ -1141,12 +1143,13 @@
1716 public.packageuploadcustom = SELECT, INSERT
1717
1718 # For premature source-only publication
1719-public.securesourcepackagepublishinghistory = SELECT, INSERT
1720+public.sourcepackagepublishinghistory = SELECT, INSERT
1721
1722 # Closing bugs for premature source-only publication
1723 public.bug = SELECT, UPDATE
1724 public.bugactivity = SELECT, INSERT
1725 public.bugaffectsperson = SELECT, INSERT, UPDATE, DELETE
1726+public.bugjob = SELECT, INSERT
1727 public.bugsubscription = SELECT
1728 public.bugnotification = SELECT, INSERT
1729 public.bugnotificationrecipient = SELECT, INSERT
1730@@ -1219,12 +1222,10 @@
1731 public.binarypackagefile = SELECT, UPDATE
1732 public.sourcepackagename = SELECT
1733 public.binarypackagename = SELECT
1734-public.binarypackagepublishinghistory = SELECT
1735-public.sourcepackagepublishinghistory = SELECT
1736 public.sourcepackagefilepublishing = SELECT
1737 public.binarypackagefilepublishing = SELECT
1738-public.securesourcepackagepublishinghistory = SELECT, INSERT, UPDATE
1739-public.securebinarypackagepublishinghistory = SELECT, INSERT, UPDATE
1740+public.sourcepackagepublishinghistory = SELECT, INSERT, UPDATE
1741+public.binarypackagepublishinghistory = SELECT, INSERT, UPDATE
1742 public.sourcepackagerecipebuildjob = SELECT, INSERT, UPDATE
1743 public.component = SELECT
1744 public.section = SELECT
1745@@ -1246,6 +1247,7 @@
1746 public.bug = SELECT, UPDATE
1747 public.bugactivity = SELECT, INSERT
1748 public.bugaffectsperson = SELECT, INSERT, UPDATE, DELETE
1749+public.bugjob = SELECT, INSERT
1750 public.bugsubscription = SELECT
1751 public.bugnotification = SELECT, INSERT
1752 public.bugnotificationrecipient = SELECT, INSERT
1753@@ -1315,10 +1317,12 @@
1754 public.bug = SELECT, INSERT, UPDATE
1755 public.bugactivity = SELECT, INSERT
1756 public.bugaffectsperson = SELECT, INSERT, UPDATE, DELETE
1757+public.bugjob = SELECT, INSERT
1758 public.bugmessage = SELECT, INSERT
1759 public.bugtag = SELECT
1760 public.bugtask = SELECT, INSERT, UPDATE
1761 public.bugwatch = SELECT
1762+public.job = SELECT, INSERT, UPDATE
1763 public.component = SELECT
1764 public.packagebugsupervisor = SELECT
1765 public.person = SELECT
1766@@ -1515,6 +1519,7 @@
1767 public.bug = SELECT, INSERT, UPDATE
1768 public.bugactivity = SELECT, INSERT
1769 public.bugaffectsperson = SELECT, INSERT, UPDATE, DELETE
1770+public.bugjob = SELECT, INSERT
1771 public.bugsubscription = SELECT, INSERT
1772 public.bugnotification = SELECT, INSERT
1773 public.bugnotificationattachment = SELECT
1774@@ -1632,7 +1637,6 @@
1775 public.distribution = SELECT
1776 public.person = SELECT
1777 public.libraryfilealias = SELECT, UPDATE
1778-public.securebinarypackagepublishinghistory = SELECT
1779 public.sourcepackagereleasefile = SELECT
1780 public.sourcepackagepublishinghistory = SELECT
1781 public.sourcepackagerelease = SELECT
1782@@ -1783,6 +1787,7 @@
1783 public.bugtracker = SELECT, INSERT
1784 public.bugwatch = SELECT, INSERT
1785 public.bug = SELECT, INSERT, UPDATE
1786+public.bugjob = SELECT, INSERT
1787 public.bugaffectsperson = SELECT, INSERT, UPDATE, DELETE
1788 public.bugtask = SELECT, INSERT, UPDATE
1789 public.accountpassword = SELECT, INSERT
1790@@ -1796,6 +1801,7 @@
1791 public.bugsubscription = SELECT, INSERT
1792 public.bugmessage = SELECT, INSERT
1793 public.sourcepackagename = SELECT
1794+public.job = SELECT, INSERT, UPDATE
1795
1796 [updatesourceforgeremoteproduct]
1797 # Updates Product.remote_product using SourceForge project data.
1798@@ -1886,3 +1892,16 @@
1799 public.bug = SELECT, UPDATE
1800 public.job = SELECT, UPDATE, DELETE
1801 public.bugjob = SELECT, DELETE
1802+
1803+[lagmon]
1804+# cache-database-replication-lag.py
1805+type=user
1806+public.update_replication_lag_cache() = EXECUTE
1807+
1808+[process-apport-blobs]
1809+type=user
1810+groups=script,read
1811+public.job = SELECT, UPDATE, DELETE
1812+public.apportjob = SELECT, INSERT, UPDATE, DELETE
1813+public.libraryfilealias = SELECT, INSERT, UPDATE
1814+public.libraryfilecontent = SELECT, INSERT, UPDATE
1815
1816=== modified file 'database/schema/security.py'
1817--- database/schema/security.py 2010-01-06 12:34:40 +0000
1818+++ database/schema/security.py 2010-03-04 20:06:42 +0000
1819@@ -10,7 +10,6 @@
1820
1821 from itertools import chain
1822 import os
1823-import sets
1824 import sys
1825
1826 import psycopg2
1827@@ -291,7 +290,7 @@
1828 # Set of all tables we have granted permissions on. After we have assigned
1829 # permissions, we can use this to determine what tables have been
1830 # forgotten about.
1831- found = sets.Set()
1832+ found = set()
1833
1834 # Set permissions as per config file
1835 for username in config.sections():
1836@@ -383,7 +382,7 @@
1837
1838 # Raise an error if we have database objects lying around that have not
1839 # had permissions assigned.
1840- forgotten = sets.Set()
1841+ forgotten = set()
1842 for obj in schema.values():
1843 if obj not in found:
1844 forgotten.add(obj)
1845
1846=== modified file 'database/schema/trusted.sql'
1847--- database/schema/trusted.sql 2009-11-30 11:48:01 +0000
1848+++ database/schema/trusted.sql 2010-03-04 20:06:42 +0000
1849@@ -94,6 +94,28 @@
1850 'Returns the lag time of the lpmain replication set to the given node, or NULL if not a replicated installation. The node id parameter can be obtained by calling getlocalnodeid() on the relevant database. This function only returns meaningful results on the lpmain replication set master.';
1851
1852
1853+CREATE OR REPLACE FUNCTION update_replication_lag_cache() RETURNS boolean
1854+LANGUAGE plpgsql VOLATILE SECURITY DEFINER AS
1855+$$
1856+ BEGIN
1857+ DELETE FROM DatabaseReplicationLag;
1858+ INSERT INTO DatabaseReplicationLag (node, lag)
1859+ SELECT st_received, st_lag_time FROM _sl.sl_status
1860+ WHERE st_origin = _sl.getlocalnodeid('_sl');
1861+ RETURN TRUE;
1862+ -- Slony-I not installed here - non-replicated setup.
1863+ EXCEPTION
1864+ WHEN invalid_schema_name THEN
1865+ RETURN FALSE;
1866+ WHEN undefined_table THEN
1867+ RETURN FALSE;
1868+ END;
1869+$$;
1870+
1871+COMMENT ON FUNCTION update_replication_lag_cache() IS
1872+'Updates the DatabaseReplicationLag materialized view.';
1873+
1874+
1875 CREATE OR REPLACE FUNCTION getlocalnodeid() RETURNS integer
1876 LANGUAGE plpgsql STABLE SECURITY DEFINER AS
1877 $$
1878@@ -1423,3 +1445,38 @@
1879 $$;
1880
1881
1882+-- Update the (redundant) column bug.latest_patch_uploaded when a
1883+-- a bug attachment is added or removed or if its type is changed.
1884+CREATE OR REPLACE FUNCTION bug_update_latest_patch_uploaded(integer) RETURNS VOID
1885+ SECURITY DEFINER LANGUAGE plpgsql AS
1886+ $$
1887+ BEGIN
1888+ UPDATE bug SET latest_patch_uploaded =
1889+ (SELECT max(message.datecreated)
1890+ FROM message, bugattachment
1891+ WHERE bugattachment.message=message.id AND
1892+ bugattachment.bug=$1 AND
1893+ bugattachment.type=1)
1894+ WHERE bug.id=$1;
1895+ END;
1896+ $$;
1897+
1898+
1899+CREATE OR REPLACE FUNCTION bug_update_latest_patch_uploaded_on_insert_update() RETURNS trigger
1900+ SECURITY DEFINER LANGUAGE plpgsql AS
1901+ $$
1902+ BEGIN
1903+ PERFORM bug_update_latest_patch_uploaded(NEW.bug);
1904+ RETURN NULL; -- Ignored - this is an AFTER trigger
1905+ END;
1906+ $$;
1907+
1908+
1909+CREATE OR REPLACE FUNCTION bug_update_latest_patch_uploaded_on_delete() RETURNS trigger
1910+ SECURITY DEFINER LANGUAGE plpgsql AS
1911+ $$
1912+ BEGIN
1913+ PERFORM bug_update_latest_patch_uploaded(OLD.bug);
1914+ RETURN NULL; -- Ignored - this is an AFTER trigger
1915+ END;
1916+ $$;
1917
1918=== modified file 'lib/canonical/config/schema-lazr.conf'
1919--- lib/canonical/config/schema-lazr.conf 2010-02-23 11:53:24 +0000
1920+++ lib/canonical/config/schema-lazr.conf 2010-03-04 20:06:42 +0000
1921@@ -29,7 +29,6 @@
1922 base_url: http://ftpmaster.internal/
1923 copy_base_url: http://rebuild-test.internal/
1924
1925-
1926 [calculate_bug_heat]
1927 # The database user which will be used by this process.
1928 # datatype: string
1929@@ -38,6 +37,13 @@
1930 error_dir: none
1931 copy_to_zlog: false
1932
1933+[process_apport_blobs]
1934+# The database user which will be used by this process.
1935+# datatype: string
1936+dbuser: process-apport-blobs
1937+oops_prefix: APPORTBLOB
1938+error_dir: none
1939+copy_to_zlog: false
1940
1941 [branchscanner]
1942 # The database user which will be used by this process.
1943
1944=== modified file 'lib/canonical/launchpad/browser/launchpad.py'
1945--- lib/canonical/launchpad/browser/launchpad.py 2010-03-01 19:35:48 +0000
1946+++ lib/canonical/launchpad/browser/launchpad.py 2010-03-04 20:06:42 +0000
1947@@ -53,38 +53,56 @@
1948 from canonical.lazr import ExportedFolder, ExportedImageFolder
1949 from canonical.launchpad.helpers import intOrZero
1950 from canonical.launchpad.layers import WebServiceLayer
1951+from canonical.launchpad.interfaces.account import AccountStatus
1952+from canonical.launchpad.interfaces.launchpad import (
1953+ IAppFrontPageSearchForm, IBazaarApplication, ILaunchpadCelebrities,
1954+ IRosettaApplication, IStructuralHeaderPresentation,
1955+ IStructuralObjectPresentation)
1956+from canonical.launchpad.interfaces.launchpadstatistic import (
1957+ ILaunchpadStatisticSet)
1958+from canonical.launchpad.interfaces.logintoken import ILoginTokenSet
1959+from canonical.launchpad.interfaces.temporaryblobstorage import (
1960+ ITemporaryStorageManager)
1961+from canonical.launchpad.webapp import (
1962+ LaunchpadFormView, LaunchpadView, Link, Navigation,
1963+ StandardLaunchpadFacets, canonical_name, canonical_url, custom_widget,
1964+ stepto)
1965+from canonical.launchpad.webapp.breadcrumb import Breadcrumb
1966+from canonical.launchpad.webapp.interfaces import (
1967+ GoneError, IBreadcrumb, ILaunchBag, ILaunchpadRoot, INavigationMenu,
1968+ NotFoundError, POSTToNonCanonicalURL)
1969+from canonical.launchpad.webapp.publisher import RedirectionView
1970+from canonical.launchpad.webapp.authorization import check_permission
1971+from canonical.launchpad.webapp.tales import PageTemplateContextsAPI
1972+from canonical.launchpad.webapp.url import urlappend
1973+from canonical.launchpad.webapp.vhosts import allvhosts
1974+from canonical.widgets.project import ProjectScopeWidget
1975+
1976+from lazr.uri import URI
1977
1978 from lp.app.interfaces.headings import IMajorHeadingView
1979 from lp.registry.interfaces.announcement import IAnnouncementSet
1980 from lp.soyuz.interfaces.binarypackagename import (
1981 IBinaryPackageNameSet)
1982+from lp.bugs.interfaces.bug import IBugSet
1983+from lp.bugs.interfaces.malone import IMaloneApplication
1984+from lp.buildmaster.interfaces.builder import IBuilderSet
1985 from lp.code.interfaces.branch import IBranchSet
1986 from lp.code.interfaces.branchlookup import IBranchLookup
1987 from lp.code.interfaces.branchnamespace import InvalidNamespace
1988+from lp.code.interfaces.codeimport import ICodeImportSet
1989 from lp.code.interfaces.linkedbranch import (
1990 CannotHaveLinkedBranch, NoLinkedBranch)
1991-from lp.bugs.interfaces.bug import IBugSet
1992-from lp.buildmaster.interfaces.builder import IBuilderSet
1993-from lp.soyuz.interfaces.packageset import IPackagesetSet
1994-from lp.code.interfaces.codeimport import ICodeImportSet
1995+from lp.hardwaredb.interfaces.hwdb import IHWDBApplication
1996 from lp.registry.interfaces.codeofconduct import ICodeOfConductSet
1997 from lp.registry.interfaces.distribution import IDistributionSet
1998 from lp.registry.interfaces.karma import IKarmaActionSet
1999-from canonical.launchpad.interfaces.account import AccountStatus
2000-from lp.hardwaredb.interfaces.hwdb import IHWDBApplication
2001-from lp.services.worlddata.interfaces.language import ILanguageSet
2002-from canonical.launchpad.interfaces.launchpad import (
2003- IAppFrontPageSearchForm, IBazaarApplication, ILaunchpadCelebrities,
2004- IRosettaApplication, IStructuralHeaderPresentation,
2005- IStructuralObjectPresentation)
2006-from canonical.launchpad.interfaces.launchpadstatistic import (
2007- ILaunchpadStatisticSet)
2008-from canonical.launchpad.interfaces.logintoken import ILoginTokenSet
2009-from lp.bugs.interfaces.malone import IMaloneApplication
2010 from lp.registry.interfaces.mentoringoffer import IMentoringOfferSet
2011-from lp.services.openid.interfaces.openidrpconfig import IOpenIDRPConfigSet
2012 from lp.registry.interfaces.person import IPersonSet
2013 from lp.registry.interfaces.pillar import IPillarNameSet
2014+from lp.services.openid.interfaces.openidrpconfig import IOpenIDRPConfigSet
2015+from lp.services.worlddata.interfaces.language import ILanguageSet
2016+from lp.soyuz.interfaces.packageset import IPackagesetSet
2017 from lp.registry.interfaces.product import (
2018 InvalidProductName, IProductSet)
2019 from lp.registry.interfaces.projectgroup import IProjectGroupSet
2020@@ -99,22 +117,6 @@
2021 ITranslationImportQueue)
2022 from lp.testopenid.interfaces.server import ITestOpenIDApplication
2023
2024-from canonical.launchpad.webapp import (
2025- LaunchpadFormView, LaunchpadView, Link, Navigation,
2026- StandardLaunchpadFacets, canonical_name, canonical_url, custom_widget,
2027- stepto)
2028-from canonical.launchpad.webapp.breadcrumb import Breadcrumb
2029-from canonical.launchpad.webapp.interfaces import (
2030- GoneError, IBreadcrumb, ILaunchBag, ILaunchpadRoot, INavigationMenu,
2031- NotFoundError, POSTToNonCanonicalURL)
2032-from canonical.launchpad.webapp.publisher import RedirectionView
2033-from canonical.launchpad.webapp.authorization import check_permission
2034-from lazr.uri import URI
2035-from canonical.launchpad.webapp.tales import PageTemplateContextsAPI
2036-from canonical.launchpad.webapp.url import urlappend
2037-from canonical.launchpad.webapp.vhosts import allvhosts
2038-from canonical.widgets.project import ProjectScopeWidget
2039-
2040
2041 # XXX SteveAlexander 2005-09-22: this is imported here because there is no
2042 # general timedelta to duration format adapter available. This should
2043@@ -577,6 +579,7 @@
2044 'testopenid': ITestOpenIDApplication,
2045 'questions': IQuestionSet,
2046 '+rpconfig': IOpenIDRPConfigSet,
2047+ 'temporary-blobs': ITemporaryStorageManager,
2048 # These three have been renamed, and no redirects done, as the old
2049 # urls now point to the product pages.
2050 #'bazaar': IBazaarApplication,
2051
2052=== modified file 'lib/canonical/launchpad/browser/temporaryblobstorage.py'
2053--- lib/canonical/launchpad/browser/temporaryblobstorage.py 2009-09-18 13:24:29 +0000
2054+++ lib/canonical/launchpad/browser/temporaryblobstorage.py 2010-03-04 20:06:42 +0000
2055@@ -6,16 +6,23 @@
2056 __metaclass__ = type
2057 __all__ = [
2058 'TemporaryBlobStorageAddView',
2059+ 'TemporaryBlobStorageNavigation',
2060+ 'TemporaryBlobStorageURL',
2061 ]
2062
2063 from zope.component import getUtility
2064+from zope.interface import implements
2065
2066 from canonical.launchpad.webapp.launchpadform import action, LaunchpadFormView
2067
2068 from canonical.launchpad.interfaces.temporaryblobstorage import (
2069 BlobTooLarge, ITemporaryBlobStorage, ITemporaryStorageManager)
2070+from canonical.launchpad.webapp import GetitemNavigation
2071+from canonical.launchpad.webapp.interfaces import ICanonicalUrlData
2072 from canonical.librarian.interfaces import UploadFailed
2073
2074+from lp.bugs.interfaces.apportjob import IProcessApportBlobJobSource
2075+
2076
2077 class TemporaryBlobStorageAddView(LaunchpadFormView):
2078 # XXX: gary 2009-09-18 bug=31358
2079@@ -40,13 +47,50 @@
2080 # being named like that.
2081 @action('Continue', name='FORM_SUBMIT')
2082 def continue_action(self, action, data):
2083- try:
2084- uuid = getUtility(ITemporaryStorageManager).new(data['blob'])
2085+ uuid = self.store_blob(data['blob'])
2086+ if uuid is not None:
2087 self.request.response.setHeader('X-Launchpad-Blob-Token', uuid)
2088 self.request.response.addInfoNotification(
2089 'Your ticket is "%s"' % uuid)
2090+
2091+ def store_blob(self, blob):
2092+ """Store a blob and return its UUID."""
2093+ try:
2094+ uuid = getUtility(ITemporaryStorageManager).new(blob)
2095 except BlobTooLarge:
2096 self.addError('Uploaded file was too large.')
2097- except UploadFailed:
2098+ return None
2099+ except UploadFailed, e:
2100+ import pdb; pdb.set_trace()
2101 self.addError('File storage unavailable - try again later.')
2102-
2103+ return None
2104+ else:
2105+ # Create ProcessApportBlobJob for the BLOB.
2106+ blob = getUtility(ITemporaryStorageManager).fetch(uuid)
2107+ getUtility(IProcessApportBlobJobSource).create(blob)
2108+ return uuid
2109+
2110+
2111+class TemporaryBlobStorageURL:
2112+ """Bug URL creation rules."""
2113+ implements(ICanonicalUrlData)
2114+
2115+ inside = None
2116+ rootsite = None
2117+
2118+ def __init__(self, context):
2119+ self.context = context
2120+
2121+ @property
2122+ def path(self):
2123+ """Return the path component of the URL."""
2124+ return u'temporary-blobs/%s' % self.context.uuid
2125+
2126+
2127+class TemporaryBlobStorageNavigation(GetitemNavigation):
2128+ """Navigation for temporary blobs."""
2129+
2130+ usedfor = ITemporaryStorageManager
2131+
2132+ def traverse(self, name):
2133+ return getUtility(ITemporaryStorageManager).fetch(name)
2134
2135=== modified file 'lib/canonical/launchpad/database/account.py'
2136--- lib/canonical/launchpad/database/account.py 2010-02-25 10:40:35 +0000
2137+++ lib/canonical/launchpad/database/account.py 2010-03-04 20:06:42 +0000
2138@@ -47,6 +47,10 @@
2139 openid_identifier = StringCol(
2140 dbName='openid_identifier', notNull=True, default=DEFAULT)
2141
2142+ def __repr__(self):
2143+ return "<%s '%s' (%s)>" % (
2144+ self.__class__.__name__, self.displayname, self.status)
2145+
2146 def _getEmails(self, status):
2147 """Get related `EmailAddress` objects with the given status."""
2148 result = IStore(EmailAddress).find(
2149
2150=== modified file 'lib/canonical/launchpad/database/temporaryblobstorage.py'
2151--- lib/canonical/launchpad/database/temporaryblobstorage.py 2010-02-09 00:17:40 +0000
2152+++ lib/canonical/launchpad/database/temporaryblobstorage.py 2010-03-04 20:06:42 +0000
2153@@ -11,21 +11,17 @@
2154 ]
2155
2156
2157-import random
2158-import time
2159-import thread
2160-
2161 from cStringIO import StringIO
2162 from datetime import timedelta, datetime
2163
2164 from pytz import utc
2165-from sqlobject import StringCol, ForeignKey
2166+from sqlobject import StringCol, ForeignKey, SQLObjectNotFound
2167 from zope.component import getUtility
2168 from zope.interface import implements
2169
2170 from canonical import uuid
2171 from canonical.config import config
2172-from canonical.database.sqlbase import SQLBase, sqlvalues
2173+from canonical.database.sqlbase import SQLBase
2174 from canonical.database.constants import DEFAULT
2175 from canonical.database.datetimecol import UtcDateTimeCol
2176 from canonical.launchpad.interfaces import (
2177@@ -34,6 +30,10 @@
2178 ILibraryFileAliasSet,
2179 BlobTooLarge,
2180 )
2181+from canonical.launchpad.interfaces.lpstorm import IStore
2182+from canonical.launchpad.database.librarian import LibraryFileAlias
2183+
2184+from lp.services.job.interfaces.job import JobStatus
2185
2186
2187 class TemporaryBlobStorage(SQLBase):
2188@@ -58,6 +58,18 @@
2189 finally:
2190 self.file_alias.close()
2191
2192+ def hasBeenProcessed(self):
2193+ """See `ITemporaryBlobStorage`."""
2194+ # Imported here to avoid circular imports
2195+ from lp.bugs.interfaces.apportjob import IProcessApportBlobJobSource
2196+ try:
2197+ job_for_blob = getUtility(
2198+ IProcessApportBlobJobSource).getByBlobUUID(self.uuid)
2199+ except SQLObjectNotFound:
2200+ return False
2201+
2202+ return (job_for_blob.job.status == JobStatus.COMPLETED)
2203+
2204
2205 class TemporaryStorageManager:
2206 """A tool to create temporary BLOB's in Launchpad."""
2207@@ -115,3 +127,12 @@
2208 if blob is not None:
2209 TemporaryBlobStorage.delete(blob.id)
2210
2211+ def default_temporary_blob_storage_list(self):
2212+ """See `ITemporaryStorageManager`."""
2213+ # Return the 50 most recent blobs.
2214+ store = IStore(TemporaryBlobStorage)
2215+ return store.find(
2216+ TemporaryBlobStorage,
2217+ TemporaryBlobStorage.file_alias == LibraryFileAlias.id,
2218+ LibraryFileAlias.expires > datetime.utcnow().replace(tzinfo=utc)
2219+ ).order_by(TemporaryBlobStorage.date_created)
2220
2221=== modified file 'lib/canonical/launchpad/doc/account.txt'
2222--- lib/canonical/launchpad/doc/account.txt 2009-12-24 12:05:52 +0000
2223+++ lib/canonical/launchpad/doc/account.txt 2010-03-04 20:06:42 +0000
2224@@ -1,24 +1,28 @@
2225-= Account and AccountSet =
2226+======================
2227+Account and AccountSet
2228+======================
2229
2230 An Account is used by someone to Authenticate with the Launchpad login
2231 service.
2232
2233
2234-= AccountSet =
2235+AccountSet
2236+==========
2237
2238 The AccountSet object provides methods to retrieve `IAccount`s. It
2239-implements the IAccountSet.
2240+implements the IAccountSet interface.
2241
2242 >>> from zope.interface.verify import verifyObject
2243- >>> from canonical.launchpad.interfaces import (
2244- ... IAccount, IAccountSet, IPerson)
2245+ >>> from lp.registry.interfaces.person import IPerson
2246+ >>> from canonical.launchpad.interfaces import IAccount, IAccountSet
2247
2248 >>> account_set = getUtility(IAccountSet)
2249 >>> verifyObject(IAccountSet, account_set)
2250 True
2251
2252
2253-== Looking up accounts by email address ==
2254+Looking up accounts by email address
2255+------------------------------------
2256
2257 Accounts are generally looked up by email address.
2258
2259@@ -49,7 +53,8 @@
2260 >>> del stub_account
2261
2262
2263-== Looking up accounts by their database ID ==
2264+Looking up accounts by their database ID
2265+----------------------------------------
2266
2267 If we know the ID of an account we can use the get() method.
2268
2269@@ -64,7 +69,8 @@
2270 LookupError:...
2271
2272
2273-== Looking up accounts by OpenID identifier ==
2274+Looking up accounts by OpenID identifier
2275+----------------------------------------
2276
2277 Each Launchpad user is assigned an permanent OpenID identity URL. The
2278 last component of this URL is specific to the user, and can be used to
2279@@ -84,12 +90,13 @@
2280 LookupError: no-such-identifier
2281
2282
2283-= The Account object =
2284+The Account object
2285+==================
2286
2287 The account implements the IAccount interface but not all attributes are
2288 accessible for the owner.
2289
2290- >>> login('foo.bar@canonical.com')
2291+ >>> login('admin@canonical.com')
2292 >>> verifyObject(IAccount, account)
2293 True
2294 >>> login('no-priv@canonical.com')
2295@@ -101,9 +108,14 @@
2296 >>> print account.preferredemail.email
2297 no-priv@canonical.com
2298
2299+Account objects have a useful string representation.
2300+
2301+ >>> account
2302+ <Account 'No Privileges Person' (Active account)>
2303+
2304 The account can have additional validated and guessed email
2305 addresses. This will be empty if the user has only a single validated
2306-email address:
2307+email address.
2308
2309 >>> [email.email for email in account.validated_emails]
2310 []
2311@@ -111,7 +123,7 @@
2312 []
2313
2314 If we add a new guessed email address, it will be included in the
2315-guessed list:
2316+guessed list.
2317
2318 >>> from canonical.launchpad.interfaces import (
2319 ... EmailAddressStatus, IEmailAddressSet)
2320@@ -122,7 +134,7 @@
2321 [u'guessed-email@example.com']
2322
2323 If we add a validated email address, it will show up in the validated
2324-list:
2325+list.
2326
2327 >>> email = getUtility(IEmailAddressSet).new(
2328 ... "validated-email@example.com", account=account,
2329@@ -132,8 +144,8 @@
2330
2331 It also has an encrypted password.
2332
2333- >>> account.password
2334- u'K7Qmeansl6RbuPfulfcmyDQOzp70OxVh5Fcf'
2335+ >>> print account.password
2336+ K7Qmeansl6RbuPfulfcmyDQOzp70OxVh5Fcf
2337
2338 Ensure the password changes are sticky, as this is a property hiding the
2339 AccountPassword table.
2340@@ -143,10 +155,10 @@
2341 None
2342
2343 >>> account.password = u'K7Qmeansl6RbuPfulfcmyDQOzp70OxVh5Fcf'
2344- >>> account.password
2345- u'K7Qmeansl6RbuPfulfcmyDQOzp70OxVh5Fcf'
2346+ >>> print account.password
2347+ K7Qmeansl6RbuPfulfcmyDQOzp70OxVh5Fcf
2348
2349-And other account metadata.
2350+The account has other metadata.
2351
2352 >>> account.date_created
2353 datetime.datetime(...)
2354@@ -163,8 +175,8 @@
2355 >>> print account.status_comment
2356 None
2357
2358- >>> account.displayname
2359- u'No Privileges Person'
2360+ >>> print account.displayname
2361+ No Privileges Person
2362
2363 When the status is changed, the date_status_set is updated in the
2364 database. Only an admin can change the status.
2365@@ -172,7 +184,7 @@
2366 >>> from canonical.launchpad.interfaces.account import AccountStatus
2367
2368 >>> original_date_status_set = account.date_status_set
2369- >>> login('foo.bar@canonical.com')
2370+ >>> login('admin@canonical.com')
2371 >>> account.status = AccountStatus.SUSPENDED
2372
2373 # Shouldn't be necessary with Storm!
2374@@ -193,8 +205,8 @@
2375 >>> personset = getUtility(IPersonSet)
2376 >>> person = personset.getByEmail('no-priv@canonical.com')
2377 >>> person.displayname = 'Something New'
2378- >>> account.displayname
2379- u'Something New'
2380+ >>> print account.displayname
2381+ Something New
2382
2383 However, the reverse is not true. If we change the Account.displayname,
2384 the linked Person.displayname (if there is one) is not updated
2385@@ -203,21 +215,22 @@
2386 unavailable.
2387
2388 >>> account.displayname = 'No Privileges Account'
2389- >>> person.displayname
2390- u'Something New'
2391+ >>> print person.displayname
2392+ Something New
2393
2394 >>> person.displayname = 'No Privileges Person'
2395- >>> account.displayname
2396- u'No Privileges Person'
2397+ >>> print account.displayname
2398+ No Privileges Person
2399
2400 An Account has an OpenID identifier used to generate the OpenID identity
2401 URL.
2402
2403- >>> account.openid_identifier
2404- u'no-priv_oid'
2405-
2406-
2407-= Creating new accounts =
2408+ >>> print account.openid_identifier
2409+ no-priv_oid
2410+
2411+
2412+Creating new accounts
2413+=====================
2414
2415 New Accounts are created using the AccountSet.new() method. The account
2416 rationale and displayname are required.
2417@@ -226,15 +239,13 @@
2418 >>> from canonical.launchpad.interfaces.account import (
2419 ... AccountCreationRationale)
2420
2421- # Login as a user that may see the accounts of other users.
2422- >>> login('foo.bar@canonical.com')
2423+ >>> login('admin@canonical.com')
2424 >>> passwordless_account = account_set.new(
2425 ... AccountCreationRationale.USER_CREATED, 'Passwordless')
2426- >>> syncUpdate(passwordless_account)
2427- >>> passwordless_account.creation_rationale.name
2428- 'USER_CREATED'
2429- >>> passwordless_account.displayname
2430- u'Passwordless'
2431+ >>> print passwordless_account.creation_rationale.name
2432+ USER_CREATED
2433+ >>> print passwordless_account.displayname
2434+ Passwordless
2435 >>> print passwordless_account.password
2436 None
2437 >>> print passwordless_account.preferredemail
2438@@ -258,15 +269,16 @@
2439 ... AccountCreationRationale.OWNER_CREATED_LAUNCHPAD , 'Clear',
2440 ... password=u'clear_password', password_is_encrypted=True)
2441 >>> syncUpdate(clear_account)
2442- >>> clear_account.password
2443- u'clear_password'
2444-
2445-
2446-== Valid Accounts ==
2447+ >>> print clear_account.password
2448+ clear_password
2449+
2450+
2451+Valid Accounts
2452+--------------
2453
2454 Like person objects, an account is considered valid if it is in the
2455 active state and has a preferred email address. So a newly created
2456-account with no email address is not valid:
2457+account with no email address is not valid.
2458
2459 >>> account = account_set.new(
2460 ... AccountCreationRationale.USER_CREATED,
2461@@ -276,7 +288,7 @@
2462 >>> account.is_valid
2463 False
2464
2465-Lets add a new email address to the account:
2466+Let's add a new email address to the account.
2467
2468 >>> email = getUtility(IEmailAddressSet).new(
2469 ... "valid-account-test@example.com", account=account)
2470@@ -284,7 +296,7 @@
2471 False
2472
2473 The account is still not valid because it has no preferred email.
2474-Setting the email to preferred fixes this:
2475+Setting the email to preferred fixes this.
2476
2477 >>> from canonical.launchpad.interfaces import EmailAddressStatus
2478 >>> email.status = EmailAddressStatus.PREFERRED
2479@@ -298,20 +310,19 @@
2480 False
2481
2482
2483-== Creating an IPerson for an Account ==
2484-
2485-From a newly created account which has no person associated with, it is
2486-possible to create a new person that will be associated with it.
2487-
2488-We need to change database policy here again, as the SSO Server cannot
2489-modify tables in the lpmain replication set.
2490-
2491+Creating an IPerson for an Account
2492+----------------------------------
2493+
2494+Newly created accounts without an associated Person can be 'promoted' to full
2495+Launchpad accounts with an attached Person.
2496+
2497+ # We need to change database policy here again, as the SSO Server cannot
2498+ # modify tables in the lpmain replication set.
2499 >>> from canonical.launchpad.webapp.interfaces import IStoreSelector
2500 >>> from canonical.launchpad.webapp.dbpolicy import MasterDatabasePolicy
2501 >>> getUtility(IStoreSelector).push(MasterDatabasePolicy())
2502
2503- >>> from lp.registry.interfaces.person import (
2504- ... PersonCreationRationale)
2505+ >>> from lp.registry.interfaces.person import PersonCreationRationale
2506 >>> fresh_account, email = account_set.createAccountAndEmail(
2507 ... 'foo@example.com',
2508 ... AccountCreationRationale.OWNER_CREATED_UBUNTU_SHOP,
2509@@ -323,7 +334,6 @@
2510
2511 >>> person = fresh_account.createPerson(
2512 ... PersonCreationRationale.OWNER_CREATED_LAUNCHPAD)
2513- >>> import transaction
2514 >>> transaction.commit()
2515 >>> person.account == fresh_account
2516 True
2517@@ -355,10 +365,11 @@
2518 >>> db_policy = getUtility(IStoreSelector).pop()
2519
2520
2521-== OpenID identifiers ==
2522+OpenID identifiers
2523+------------------
2524
2525-The account is given an openid identifier. The identifier is created
2526-directly in the database; it not available until the account object is synced.
2527+The account is given an openid identifier. The identifier is created directly
2528+in the database; it not available until the account object is synced.
2529
2530 >>> new_account = account_set.new(
2531 ... AccountCreationRationale.OWNER_CREATED_LAUNCHPAD, 'OID Account',
2532
2533=== modified file 'lib/canonical/launchpad/doc/oauth.txt'
2534--- lib/canonical/launchpad/doc/oauth.txt 2010-02-24 23:02:56 +0000
2535+++ lib/canonical/launchpad/doc/oauth.txt 2010-03-04 20:06:42 +0000
2536@@ -1,8 +1,11 @@
2537-= OAuth (http://oauth.net/core/1.0/) =
2538+=====
2539+OAuth
2540+=====
2541
2542 This is a mechanism for allowing a third party application to access
2543 Launchpad on a user's behalf. These applications are identified by a
2544-unique key and are stored as OAuthConsumers.
2545+unique key and are stored as OAuthConsumers. The OAuth specification is
2546+defined in <http://oauth.net/core/1.0/>.
2547
2548 These applications (also called consumers) are managed by the
2549 OAuthConsumerSet utility.
2550@@ -36,16 +39,19 @@
2551 AssertionError: ...
2552
2553
2554-== Request tokens ==
2555+Request tokens
2556+==============
2557
2558 When a consumer wants to access protected resources on Launchpad, it
2559 must first ask for an OAuthRequestToken, which is then used when the
2560 consumer sends the user to the Launchpad authorization page.
2561
2562
2563-=== Creating request tokens ===
2564+Creating request tokens
2565+-----------------------
2566
2567 The request tokens are created using IOAuthConsumer.newRequestToken().
2568+
2569 # XXX EdwinGrubbs 2008-10-03 bug=277756
2570 # Tests could be simplified with helper methods for creating tokens
2571 # in different states.
2572@@ -65,9 +71,8 @@
2573 >>> print request_token.context
2574 None
2575
2576-Initially, a token does not have a person or permission associated with
2577-it as the consumer doesn't know what the user's identity is on
2578-Launchpad.
2579+Initially, a token does not have a person or permission associated with it as
2580+the consumer doesn't know the user's identity on Launchpad.
2581
2582 >>> print request_token.person
2583 None
2584@@ -96,37 +101,42 @@
2585 >>> request_token.is_reviewed
2586 True
2587
2588-When reviewing a token we can also change the context associated with
2589+When reviewing a token, we can also change the context associated with
2590 it, which means the consumer using that token will only have access
2591 to things linked to that context (Product, Project, Distribution,
2592 DistroSourcePackage).
2593
2594- >>> from canonical.launchpad.interfaces import (
2595- ... IDistributionSet, IProductSet, IProjectGroupSet)
2596+ >>> from lp.registry.interfaces.distribution import IDistributionSet
2597+ >>> from lp.registry.interfaces.product import IProductSet
2598+ >>> from lp.registry.interfaces.projectgroup import IProjectGroupSet
2599+
2600 >>> firefox = getUtility(IProductSet)['firefox']
2601 >>> request_token2 = consumer.newRequestToken()
2602 >>> request_token2.review(
2603 ... salgado, OAuthPermission.WRITE_PRIVATE, context=firefox)
2604- >>> request_token2.context.title
2605- u'Mozilla Firefox'
2606+ >>> print request_token2.context.title
2607+ Mozilla Firefox
2608
2609 >>> mozilla = getUtility(IProjectGroupSet)['mozilla']
2610 >>> request_token2 = consumer.newRequestToken()
2611 >>> request_token2.review(
2612 ... salgado, OAuthPermission.WRITE_PRIVATE, context=mozilla)
2613- >>> request_token2.context.title
2614- u'The Mozilla Project'
2615+ >>> print request_token2.context.title
2616+ The Mozilla Project
2617
2618 >>> ubuntu = getUtility(IDistributionSet)['ubuntu']
2619 >>> evolution = ubuntu.getSourcePackage('evolution')
2620 >>> request_token2 = consumer.newRequestToken()
2621 >>> request_token2.review(
2622 ... salgado, OAuthPermission.WRITE_PRIVATE, context=evolution)
2623- >>> request_token2.context.title
2624- u'\u201cevolution\u201d package in Ubuntu'
2625-
2626-
2627-=== Retrieving request tokens ===
2628+
2629+ >>> from canonical.encoding import ascii_smash
2630+ >>> print ascii_smash(request_token2.context.title)
2631+ evolution package in Ubuntu
2632+
2633+
2634+Retrieving request tokens
2635+-------------------------
2636
2637 Any consumer can retrieve its request tokens as long as it knows their
2638 keys.
2639@@ -160,7 +170,8 @@
2640 None
2641
2642
2643-=== Exchanging request tokens for access tokens ===
2644+Exchanging request tokens for access tokens
2645+-------------------------------------------
2646
2647 Once a request token has been reviewed it may be exchanged for an access
2648 token. That may happen only if the user actually granted some sort of
2649@@ -197,8 +208,8 @@
2650 >>> request_token2.review(
2651 ... salgado, OAuthPermission.WRITE_PRIVATE, context=firefox)
2652 >>> access_token2 = request_token2.createAccessToken()
2653- >>> access_token2.context.title
2654- u'Mozilla Firefox'
2655+ >>> print access_token2.context.title
2656+ Mozilla Firefox
2657
2658 If the request token hasn't been reviewed yet, it can't be used to
2659 create an access token.
2660@@ -223,7 +234,8 @@
2661 AssertionError: ...
2662
2663
2664-== Access tokens ==
2665+Access tokens
2666+=============
2667
2668 As shown above, access tokens can be created from any reviewed (and
2669 authorized) request tokens. These tokens are then stored by the consumer
2670@@ -276,7 +288,8 @@
2671 ... datetime.now(pytz.timezone('UTC')) - timedelta(hours=1))
2672
2673
2674-== Nonces and timestamps ==
2675+Nonces and timestamps
2676+=====================
2677
2678 A nonce is a random string, generated by the client for each request.
2679
2680@@ -322,7 +335,7 @@
2681 ...
2682 NonceAlreadyUsed: ...
2683
2684-According to the oauth specification (http://oauth.net/core/1.0/#nonce), for a
2685+According to the oauth specification <http://oauth.net/core/1.0/#nonce>, for a
2686 given client, an application should not accept a timestamp older than the most
2687 recent timestamp received.
2688
2689@@ -337,7 +350,7 @@
2690
2691 Launchpad relaxes the constraint on the timestamp. Rather than accepting any
2692 request within the same second, Launchpad accepts any request within the past
2693-60 seconds (or, as defined by the code, withing the past number of seconds
2694+60 seconds (or, as defined by the code, within the past number of seconds
2695 specified by canonical.launchpad.database.oauth.TIMESTAMP_ACCEPTANCE_WINDOW).
2696
2697 For instance, in Launchpad, if a client sends a timestamp of
2698@@ -376,13 +389,13 @@
2699 http://groups.google.com/group/oauth/msg/387fdafcf0be322a and LP bug 319710
2700 for more background).
2701
2702-The code also raises a ClockSkew error if the timestamp is more
2703-than TIMESTAMP_SKEW_WINDOW seconds away from the server's clock (ahead or
2704+The code also raises a ClockSkew error if the timestamp is more than
2705+TIMESTAMP_SKEW_WINDOW seconds away from the server's clock (ahead or
2706 behind). This number of seconds is currently equal to one hour (60*60). The
2707-primary reason for behavior is so that a clock skew too far in the future does
2708-not essentially make the authentication tokens useless once the client's clock
2709-is corrected. In addition, it gives us a constraint within which we can reason
2710-about clock-related errors reported by customers.
2711+primary reason for this behavior is so that a clock skew too far in the future
2712+does not essentially make the authentication tokens useless once the client's
2713+clock is corrected. In addition, it gives us a constraint within which we can
2714+reason about clock-related errors reported by customers.
2715
2716 Here's a quick demonstration of the behavior.
2717
2718
2719=== modified file 'lib/canonical/launchpad/doc/renamed-view.txt'
2720--- lib/canonical/launchpad/doc/renamed-view.txt 2009-06-11 01:28:55 +0000
2721+++ lib/canonical/launchpad/doc/renamed-view.txt 2010-03-04 20:06:42 +0000
2722@@ -89,7 +89,7 @@
2723 >>> view.publishTraverse(request, u'foo')
2724 Traceback (most recent call last):
2725 ...
2726- NotFound: Object: u'foo', name: <Distribution at...>
2727+ NotFound: Object: u'foo', name: <Distribution 'Ubuntu' (ubuntu)>
2728
2729
2730 == Registering from ZCML ==
2731
2732=== modified file 'lib/canonical/launchpad/doc/temporaryblobstorage.txt'
2733--- lib/canonical/launchpad/doc/temporaryblobstorage.txt 2008-09-24 18:53:11 +0000
2734+++ lib/canonical/launchpad/doc/temporaryblobstorage.txt 2010-03-04 20:06:42 +0000
2735@@ -56,3 +56,48 @@
2736 BlobTooLarge: 7
2737 >>> config_data = config.pop('max_blob_size')
2738
2739+
2740+Checking blob processing status
2741+-------------------------------
2742+
2743+A blob has an hasBeenProcessed() method which returns True if the
2744+ProcessApportBlobJob for the blob has been completed.
2745+
2746+The hasBeenProcessed() of a newly created blob, with no
2747+associated ProcessApportBlobJob, will return False.
2748+
2749+ >>> blob_token = getUtility(ITemporaryStorageManager).new("Blob data")
2750+ >>> blob = getUtility(ITemporaryStorageManager).fetch(blob_token)
2751+ >>> print blob.hasBeenProcessed()
2752+ False
2753+
2754+We'll create a ProcessApportBlobJob for the blob.
2755+
2756+ >>> from lp.bugs.interfaces.apportjob import (
2757+ ... IProcessApportBlobJobSource)
2758+ >>> processing_job = getUtility(IProcessApportBlobJobSource).create(
2759+ ... blob)
2760+
2761+ >>> blob = getUtility(ITemporaryStorageManager).fetch(blob_token)
2762+ >>> processing_job.blob == blob
2763+ True
2764+
2765+Before the job is run, the blob's hasBeenProcessed() method will return
2766+False.
2767+
2768+ >>> print blob.hasBeenProcessed()
2769+ False
2770+
2771+Whilst the job is running, the blob's hasBeenProcessed() method will
2772+return False.
2773+
2774+ >>> processing_job.job.start()
2775+ >>> print blob.hasBeenProcessed()
2776+ False
2777+
2778+Once the job is complete, the blob's hasBeenProcessed() method will
2779+return True.
2780+
2781+ >>> processing_job.job.complete()
2782+ >>> print blob.hasBeenProcessed()
2783+ True
2784
2785=== modified file 'lib/canonical/launchpad/icing/style.css'
2786--- lib/canonical/launchpad/icing/style.css 2010-02-26 07:12:09 +0000
2787+++ lib/canonical/launchpad/icing/style.css 2010-03-04 20:06:42 +0000
2788@@ -1241,6 +1241,10 @@
2789 margin: 0;
2790 }
2791
2792+.patches-view-cell {
2793+ padding-right: 1em;
2794+}
2795+
2796 /* --- Blueprints --- */
2797
2798 body.tab-specifications #actions, body.tab-specifications .results {
2799@@ -1467,7 +1471,7 @@
2800
2801 div.popupTitle {
2802 background: #ffffdc;
2803- padding: 0 1em;
2804+ padding: 0.5em 1em;
2805 border: 1px black solid;
2806 position: absolute;
2807 display: none;
2808
2809=== modified file 'lib/canonical/launchpad/interfaces/_schema_circular_imports.py'
2810--- lib/canonical/launchpad/interfaces/_schema_circular_imports.py 2010-02-27 10:19:18 +0000
2811+++ lib/canonical/launchpad/interfaces/_schema_circular_imports.py 2010-03-04 20:06:42 +0000
2812@@ -46,6 +46,8 @@
2813 from lp.code.interfaces.diff import IPreviewDiff
2814 from lp.code.interfaces.hasbranches import (
2815 IHasBranches, IHasMergeProposals, IHasRequestedReviews)
2816+from lp.code.interfaces.sourcepackagerecipebuild import (
2817+ ISourcePackageRecipeBuild)
2818 from lp.registry.interfaces.distribution import IDistribution
2819 from lp.registry.interfaces.distributionmirror import IDistributionMirror
2820 from lp.registry.interfaces.distributionsourcepackage import (
2821@@ -65,12 +67,12 @@
2822 IArchiveDependency)
2823 from lp.soyuz.interfaces.distroarchseries import IDistroArchSeries
2824 from lp.soyuz.interfaces.publishing import (
2825- IBinaryPackagePublishingHistory, ISecureBinaryPackagePublishingHistory,
2826- ISecureSourcePackagePublishingHistory, ISourcePackagePublishingHistory,
2827+ IBinaryPackagePublishingHistory, ISourcePackagePublishingHistory,
2828 ISourcePackagePublishingHistoryPublic, PackagePublishingStatus)
2829 from lp.soyuz.interfaces.packageset import IPackageset
2830 from lp.soyuz.interfaces.queue import (
2831 IPackageUpload, PackageUploadCustomFormat, PackageUploadStatus)
2832+from lp.soyuz.interfaces.sourcepackagerelease import ISourcePackageRelease
2833 from lp.registry.interfaces.sourcepackage import ISourcePackage
2834 from canonical.launchpad.interfaces.message import (
2835 IIndexedMessage, IMessage, IUserToUserEmail)
2836@@ -188,12 +190,12 @@
2837 LAZR_WEBSERVICE_EXPORTED)[
2838 'return_type'].value_type.schema = IBinaryPackagePublishingHistory
2839 patch_reference_property(
2840- ISecureBinaryPackagePublishingHistory, 'distroarchseries',
2841+ IBinaryPackagePublishingHistory, 'distroarchseries',
2842 IDistroArchSeries)
2843 patch_reference_property(
2844- ISecureBinaryPackagePublishingHistory, 'archive', IArchive)
2845+ IBinaryPackagePublishingHistory, 'archive', IArchive)
2846 patch_reference_property(
2847- ISecureSourcePackagePublishingHistory, 'archive', IArchive)
2848+ ISourcePackagePublishingHistory, 'archive', IArchive)
2849
2850 # IArchive apocalypse.
2851 patch_reference_property(IArchive, 'distribution', IDistribution)
2852@@ -322,6 +324,9 @@
2853
2854 IBuildBase['buildstate'].vocabulary = BuildStatus
2855
2856+patch_reference_property(
2857+ ISourcePackageRelease, 'source_package_recipe_build', ISourcePackageRecipeBuild)
2858+
2859 # IHasBugs
2860 patch_plain_parameter_type(
2861 IHasBugs, 'searchTasks', 'assignee', IPerson)
2862
2863=== modified file 'lib/canonical/launchpad/interfaces/temporaryblobstorage.py'
2864--- lib/canonical/launchpad/interfaces/temporaryblobstorage.py 2009-06-25 05:30:52 +0000
2865+++ lib/canonical/launchpad/interfaces/temporaryblobstorage.py 2010-03-04 20:06:42 +0000
2866@@ -17,6 +17,14 @@
2867 from zope.schema import Datetime, Text, Bytes
2868 from canonical.launchpad import _
2869
2870+from lazr.restful.declarations import (
2871+ collection_default_content, exported,
2872+ export_as_webservice_collection, export_as_webservice_entry,
2873+ export_read_operation, operation_parameters, rename_parameters_as,
2874+ REQUEST_USER)
2875+from lazr.restful.interface import copy_field
2876+
2877+
2878 class BlobTooLarge(Exception):
2879 """Raised if attempting to create a blob larger than the maximum
2880 allowed size.
2881@@ -26,16 +34,25 @@
2882
2883 class ITemporaryBlobStorage(Interface):
2884 """A blob which we will store in the database temporarily."""
2885+ export_as_webservice_entry(
2886+ singular_name='temporary_blob', plural_name='temporary_blobs')
2887
2888- uuid = Text(title=_('UUID'), required=True, readonly=True)
2889+ uuid = exported(
2890+ Text(title=_('UUID'), required=True, readonly=True),
2891+ exported_as='token')
2892 blob = Bytes(title=_('BLOB'), required=True, readonly=True)
2893 date_created = Datetime(title=_('Date created'),
2894 required=True, readonly=True)
2895 file_alias = Attribute("Link to actual storage of blob")
2896
2897+ @export_read_operation()
2898+ def hasBeenProcessed():
2899+ """Return True if this blob has been processed."""
2900+
2901
2902 class ITemporaryStorageManager(Interface):
2903 """A tool to create temporary blobs."""
2904+ export_as_webservice_collection(ITemporaryBlobStorage)
2905
2906 def new(blob, expires=None):
2907 """Create a new blob for storage in the database, returning the
2908@@ -47,9 +64,19 @@
2909 config.launchpad.default_blob_expiry
2910 """
2911
2912+ @rename_parameters_as(uuid='token')
2913+ @operation_parameters(uuid=copy_field(ITemporaryBlobStorage['uuid']))
2914+ @export_read_operation()
2915 def fetch(uuid):
2916 """Retrieve a TemporaryBlobStorage by uuid."""
2917
2918 def delete(uuid):
2919 """Delete a TemporaryBlobStorage by uuid."""
2920
2921+ @collection_default_content()
2922+ def default_temporary_blob_storage_list():
2923+ """Return the default list of `ITemporaryBlobStorage` objects.
2924+
2925+ :returns: All the the `ITemporaryBlobStorage` blobs whose file
2926+ aliases have not expired.
2927+ """
2928
2929=== modified file 'lib/canonical/launchpad/javascript/code/codereview.js'
2930--- lib/canonical/launchpad/javascript/code/codereview.js 2010-01-29 16:00:43 +0000
2931+++ lib/canonical/launchpad/javascript/code/codereview.js 2010-03-04 20:06:42 +0000
2932@@ -39,22 +39,9 @@
2933 */
2934 link.on('click', show_request_review_form);
2935 }
2936- link = Y.one('.menu-link-set_commit_message');
2937- if (Y.Lang.isValue(link)) {
2938- link.addClass('js-action');
2939- link.on('click', edit_commit_message);
2940- }
2941- if (Y.Lang.isValue(Y.lp.widgets)) {
2942- var widget = Y.lp.widgets['edit-commit-message'];
2943- if (Y.Lang.isValue(widget)) {
2944- widget.editor.on('save', function() {
2945- commit_message_listener(this.get('value'), true);
2946- });
2947- widget.editor.on('cancel', function() {
2948- commit_message_listener(this.get('value'), false);
2949- });
2950- }
2951- }
2952+
2953+ link_multiline_editor('commit_message');
2954+ link_multiline_editor('description');
2955 link_scroller('#proposal-summary a.diff-link', '#review-diff');
2956 link_scroller('.menu-link-add_comment', '#add-comment', function() {
2957 Y.one('#add-comment-form textarea').focus();
2958@@ -82,24 +69,54 @@
2959 });
2960 }
2961
2962-/*
2963- * Hide the commit message editor if the value is empty.
2964+
2965+/*
2966+ * Make the edit link a javascript link (green).
2967+ * Link the listener to the save and cancel events of the multiline editor.
2968+ */
2969+function link_multiline_editor(name) {
2970+ var link = Y.one('.menu-link-set_' + name);
2971+ if (Y.Lang.isValue(link)) {
2972+ link.addClass('js-action');
2973+ link.on('click', function(e) {
2974+ hide_link_show_multiline_edit(e, name);}
2975+ );
2976+ var parent = link.ancestor();
2977+ if (parent.hasClass('unseen')) {
2978+ link.addClass('unseen');
2979+ parent.removeClass('unseen');
2980+ }
2981+ }
2982+ if (Y.Lang.isValue(Y.lp.widgets)) {
2983+ var widget = Y.lp.widgets['edit-' + name];
2984+ if (Y.Lang.isValue(widget)) {
2985+ widget.editor.on('save', function() {
2986+ multiline_edit_message_listener(name, this.get('value'), true);
2987+ });
2988+ widget.editor.on('cancel', function() {
2989+ multiline_edit_message_listener(name, this.get('value'), false);
2990+ });
2991+ }
2992+ }
2993+}
2994+
2995+
2996+/*
2997+ * Hide the editor if the value is empty.
2998 *
2999- * If the commit message is empty, we want to show the
3000- * 'Set commit message' link again. For consistency with
3001- * page updates we want to flash this link so the user can
3002- * see what we are doing. If the commit message was saved
3003- * and is empty, then we flash green as all is good. If the
3004- * user has cancelled the edit, and the commit message is
3005- * empty, then we flash the link red.
3006+ * If the value is empty, we want to show the 'Set commit message' link again.
3007+ * For consistency with page updates we want to flash this link so the user
3008+ * can see what we are doing. If the commit message was saved and is empty,
3009+ * then we flash green as all is good. If the user has cancelled the edit,
3010+ * and the commit message is empty, then we flash the link red.
3011 */
3012-function commit_message_listener(message, saved)
3013+function multiline_edit_message_listener(name, message, saved)
3014 {
3015 if (message === '') {
3016 // Hide the multiline editor
3017- Y.one('#edit-commit-message').addClass('unseen');
3018+ Y.one('#edit-' + name).addClass('unseen');
3019 // Show the link again
3020- var link = Y.one('.menu-link-set_commit_message');
3021+ var link = Y.one('.menu-link-set_' + name);
3022 link.removeClass('unseen');
3023 if (saved) {
3024 // Flash green.
3025@@ -113,19 +130,17 @@
3026 }
3027
3028 /*
3029- * Edit the commit message.
3030- *
3031 * Hide the link, show the multi-line editor, and set it to edit.
3032 */
3033-function edit_commit_message(e) {
3034+function hide_link_show_multiline_edit(e, name) {
3035 // We are handling this click event.
3036 e.halt();
3037 // Make the edit button unseen.
3038- Y.one('#edit-commit-message').removeClass('unseen');
3039+ Y.one('#edit-' + name).removeClass('unseen');
3040 // Remove the unseen class from the commit message.
3041- Y.one('.menu-link-set_commit_message').addClass('unseen');
3042+ Y.one('.menu-link-set_' + name).addClass('unseen');
3043 // Trigger the edit on the multiline editor.
3044- Y.lp.widgets['edit-commit-message']._triggerEdit(e);
3045+ Y.lp.widgets['edit-' + name]._triggerEdit(e);
3046 }
3047
3048 /*
3049
3050=== added file 'lib/canonical/launchpad/pagetests/webservice/xx-temporary-blob-storage.txt'
3051--- lib/canonical/launchpad/pagetests/webservice/xx-temporary-blob-storage.txt 1970-01-01 00:00:00 +0000
3052+++ lib/canonical/launchpad/pagetests/webservice/xx-temporary-blob-storage.txt 2010-03-04 20:06:42 +0000
3053@@ -0,0 +1,81 @@
3054+The set of temporary blobs
3055+==========================
3056+
3057+The set of temporary blobs in Launchpad is represented by the collection
3058+found at /temporary-blobs. The collection contains all the temporary
3059+blobs whose file aliases have not expired.
3060+
3061+ >>> temporary_blobs = webservice.get('/temporary-blobs').jsonBody()
3062+ >>> len(temporary_blobs['entries'])
3063+ 0
3064+
3065+If we add a new blob, it will show up in the temporary_blobs entries
3066+set.
3067+
3068+ >>> login('foo.bar@canonical.com')
3069+ >>> from zope.component import getUtility
3070+ >>> from canonical.launchpad.interfaces.temporaryblobstorage import (
3071+ ... ITemporaryStorageManager)
3072+
3073+ >>> blob_token = getUtility(ITemporaryStorageManager).new("some data")
3074+ >>> logout()
3075+
3076+ >>> temporary_blobs = webservice.get('/temporary-blobs').jsonBody()
3077+ >>> len(temporary_blobs['entries'])
3078+ 1
3079+
3080+Each of the entries in the temporary_blobs entries set is an
3081+ITemporaryBlobStorage instance. A blob is identified by its UUID, which
3082+is exported via the webservice as 'token', in keeping with how it's
3083+referred to in the UI.
3084+
3085+ >>> blob = temporary_blobs['entries'][0]
3086+ >>> blob['token'] == blob_token
3087+ True
3088+
3089+It's possible to fetch a blob directly using its token.
3090+
3091+ >>> blob_link = '/temporary-blobs/' + blob_token
3092+ >>> blob = webservice.get(blob_link).jsonBody()
3093+ >>> blob['token'] == blob_token
3094+ True
3095+
3096+It's also possible to fetch the blob by calling temporary_blobs.fetch()
3097+and passing it a token.
3098+
3099+ >>> blob = webservice.named_get(
3100+ ... '/temporary-blobs', 'fetch', token=blob_token).jsonBody()
3101+ >>> blob['token'] == blob_token
3102+ True
3103+
3104+
3105+Checking whether a blob has been processed
3106+------------------------------------------
3107+
3108+Launchpad processes blobs after they've been uploaded, so that any data
3109+that can be used whilst filing a bug (or in any other operation,
3110+ostensibly) can be extracted from the blob without affecting the
3111+processing time of web requests.
3112+
3113+It's possible to see whether a blob has been processed by calling its
3114+hasBeenProcessed() method. In the case of the blob we created above, it
3115+hasn't been processed because no job was created to process it.
3116+
3117+ >>> print webservice.named_get(
3118+ ... blob['self_link'], 'hasBeenProcessed').jsonBody()
3119+ False
3120+
3121+Once the blob has been processed, its hasBeenProcessed() method will
3122+return True.
3123+
3124+ >>> from lp.bugs.interfaces.apportjob import IProcessApportBlobJobSource
3125+ >>> login('foo.bar@canonical.com')
3126+ >>> job = getUtility(IProcessApportBlobJobSource).create(
3127+ ... getUtility(ITemporaryStorageManager).fetch(blob_token))
3128+ >>> job.job.start()
3129+ >>> job.job.complete()
3130+ >>> logout()
3131+
3132+ >>> print webservice.named_get(
3133+ ... blob['self_link'], 'hasBeenProcessed').jsonBody()
3134+ True
3135
3136=== modified file 'lib/canonical/launchpad/webapp/dbpolicy.py'
3137--- lib/canonical/launchpad/webapp/dbpolicy.py 2010-02-23 11:53:24 +0000
3138+++ lib/canonical/launchpad/webapp/dbpolicy.py 2010-03-04 20:06:42 +0000
3139@@ -304,26 +304,18 @@
3140
3141 # sl_status gives meaningful results only on the origin node.
3142 master_store = self.getStore(MAIN_STORE, MASTER_FLAVOR)
3143- # If it takes more than (by default) 0.25 seconds to query the
3144- # replication lag, assume we are lagged. Normally the query
3145- # takes <20ms. This can happen during heavy updates, as the
3146- # Slony-I tables can get slow with lots of events. We use a
3147- # SAVEPOINT to conveniently reset the statement timeout.
3148- master_store.execute("""
3149- SAVEPOINT lag_check; SET LOCAL statement_timeout TO %d
3150- """ % config.launchpad.lag_check_timeout)
3151- try:
3152- try:
3153- return master_store.execute(
3154- "SELECT replication_lag(%d)" % slave_node_id).get_one()[0]
3155- except TimeoutError:
3156- logging.warn(
3157- 'Gave up querying slave lag after %d ms',
3158- (config.launchpad.lag_check_timeout))
3159- return timedelta(days=999) # A long, long time.
3160- finally:
3161- master_store.execute("ROLLBACK TO lag_check")
3162
3163+ # Retrieve the cached lag.
3164+ lag = master_store.execute("""
3165+ SELECT lag + (CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - updated)
3166+ FROM DatabaseReplicationLag WHERE node=%d
3167+ """ % slave_node_id).get_one()
3168+ if lag is None:
3169+ logging.error(
3170+ "No data in DatabaseReplicationLag for node %d"
3171+ % slave_node_id)
3172+ return timedelta(days=999) # A long, long time.
3173+ return lag[0]
3174
3175
3176 def WebServiceDatabasePolicyFactory(request):
3177
3178=== modified file 'lib/canonical/launchpad/zcml/temporaryblobstorage.zcml'
3179--- lib/canonical/launchpad/zcml/temporaryblobstorage.zcml 2009-07-13 18:15:02 +0000
3180+++ lib/canonical/launchpad/zcml/temporaryblobstorage.zcml 2010-03-04 20:06:42 +0000
3181@@ -36,4 +36,20 @@
3182 interface="canonical.launchpad.interfaces.ITemporaryStorageManager" />
3183 </securedutility>
3184
3185+ <browser:navigation
3186+ module="canonical.launchpad.browser.temporaryblobstorage"
3187+ classes="TemporaryBlobStorageNavigation"
3188+ />
3189+
3190+ <browser:url
3191+ for="canonical.launchpad.interfaces.temporaryblobstorage.ITemporaryBlobStorage"
3192+ urldata="canonical.launchpad.browser.temporaryblobstorage.TemporaryBlobStorageURL"
3193+ parent_utility="canonical.launchpad.interfaces.IWebServiceApplication"/>
3194+ path_expression="string:temporary-blobs/${uuid}"
3195+ />
3196+
3197+ <browser:url
3198+ for="canonical.launchpad.interfaces.temporaryblobstorage.ITemporaryStorageManager"
3199+ path_expression="string:temporary-blobs"
3200+ parent_utility="canonical.launchpad.interfaces.IWebServiceApplication"/>
3201 </configure>
3202
3203=== modified file 'lib/lp/answers/doc/person.txt'
3204--- lib/lp/answers/doc/person.txt 2009-12-24 01:41:54 +0000
3205+++ lib/lp/answers/doc/person.txt 2010-03-04 20:06:42 +0000
3206@@ -1,22 +1,28 @@
3207-= Person and the Answer Tracker =
3208-
3209-== searchQuestions() ==
3210-
3211-IQuestionsPerson defines a searchQuestions() method which can be used to
3212-select all or a subset of the questions in which the person is
3213-involved. This includes questions which the person created, is assigned
3214-to, is subscribed to, commented on, or answered. Various subsets can
3215-be selected by using the following criteria status, search_text and
3216-participation type.
3217-
3218- >>> from canonical.launchpad.interfaces import IPersonSet
3219+=============================
3220+People and the answer tracker
3221+=============================
3222+
3223+Sometimes you want to find out what questions a person is involved with.
3224+
3225+
3226+Searching
3227+=========
3228+
3229+IQuestionsPerson defines a searchQuestions() method which is used to select
3230+all, or a subset of, the questions in which a person is involved. This
3231+includes questions which the person created, is assigned to, is subscribed to,
3232+commented on, or answered. Various subsets can be selected by using the
3233+various search criteria.
3234+
3235+ >>> from lp.registry.interfaces.person import IPersonSet
3236 >>> from lp.answers.interfaces.questionsperson import IQuestionsPerson
3237 >>> personset = getUtility(IPersonSet)
3238 >>> foo_bar_raw = personset.getByEmail('foo.bar@canonical.com')
3239 >>> foo_bar = IQuestionsPerson(foo_bar_raw)
3240
3241
3242-=== search_text ===
3243+Search text
3244+-----------
3245
3246 The search_text parameter will limit the questions to those matching
3247 the query using the regular full text algorithm.
3248@@ -28,13 +34,14 @@
3249 Newly installed plug-in doesn't seem to be used Answered
3250
3251
3252-=== sort ===
3253-
3254-When using the search_text criteria, the default is to sort the results
3255-by relevancy. One can use the sort parameter to change that. It takes
3256-one of the constant defined in the QuestionSort enumeration.
3257-
3258- >>> from canonical.launchpad.interfaces import QuestionSort
3259+Sorting
3260+-------
3261+
3262+When using the search_text criteria, the default is to sort the results by
3263+relevancy. One can use the sort parameter to change that. It takes one of
3264+the constant defined in the QuestionSort enumeration.
3265+
3266+ >>> from lp.answers.interfaces.questionenums import QuestionSort
3267 >>> for question in foo_bar.searchQuestions(
3268 ... search_text='firefox', sort=QuestionSort.OLDEST_FIRST):
3269 ... print question.id, question.title, question.status.title
3270@@ -42,8 +49,7 @@
3271 6 Newly installed plug-in doesn't seem to be used Answered
3272 9 mailto: problem in webpage Solved
3273
3274-When no text search is done, the default sort order is
3275-QuestionSort.NEWEST_FIRST.
3276+When no text search is done, the default sort order is newest first.
3277
3278 >>> for question in foo_bar.searchQuestions():
3279 ... print question.id, question.title, question.status.title
3280@@ -56,13 +62,13 @@
3281 4 Firefox loses focus and gets stuck Open
3282
3283
3284-=== status ===
3285-
3286-The last searches showed that by default, not all statuses are searched
3287-for by default (they excluded expired and invalid questions). The status
3288-parameter can be used to control the list of statuses to select:
3289-
3290- >>> from canonical.launchpad.interfaces import QuestionStatus
3291+Status
3292+------
3293+
3294+As shown above, expired and invalid questions are not returned. The status
3295+parameter can be used to control the list of statuses to select.
3296+
3297+ >>> from lp.answers.interfaces.questionenums import QuestionStatus
3298 >>> for question in foo_bar.searchQuestions(status=QuestionStatus.INVALID):
3299 ... print question.title, question.status.title
3300 Firefox is slow and consumes too much RAM Invalid
3301@@ -70,23 +76,23 @@
3302 The status parameter can also take a list of statuses.
3303
3304 >>> for question in foo_bar.searchQuestions(
3305- ... status=[QuestionStatus.SOLVED, QuestionStatus.INVALID]):
3306+ ... status=(QuestionStatus.SOLVED, QuestionStatus.INVALID)):
3307 ... print question.title, question.status.title
3308 mailto: problem in webpage Solved
3309 Firefox is slow and consumes too much RAM Invalid
3310
3311
3312-=== participation ===
3313+Participation
3314+-------------
3315
3316-By default, any types of relationship to a question is considered by
3317-searchQuestions. This can customized through the participation
3318-parameter. It takes one or a list of constants from the
3319-QuestionParticipation enumeration.
3320+By default, any relationship between a person and a question is considered by
3321+searchQuestions. This can customized through the participation parameter. It
3322+takes one or a list of constants from the QuestionParticipation enumeration.
3323
3324 To select only questions on which the person commented, the
3325-QuestionParticipation.COMMENTER is used:
3326+QuestionParticipation.COMMENTER is used.
3327
3328- >>> from canonical.launchpad.interfaces import QuestionParticipation
3329+ >>> from lp.answers.interfaces.questionenums import QuestionParticipation
3330 >>> for question in foo_bar.searchQuestions(
3331 ... participation=QuestionParticipation.COMMENTER, status=None):
3332 ... print question.title
3333@@ -96,8 +102,8 @@
3334 Installation of Java Runtime Environment for Mozilla
3335 Newly installed plug-in doesn't seem to be used
3336
3337-QuestionParticipation.SUBSCRIBER will only select the questions to which
3338-the person is subscribed to:
3339+QuestionParticipation.SUBSCRIBER will only select the questions to which the
3340+person is subscribed.
3341
3342 >>> for question in foo_bar.searchQuestions(
3343 ... participation=QuestionParticipation.SUBSCRIBER, status=None):
3344@@ -105,7 +111,7 @@
3345 Slow system
3346 Firefox is slow and consumes too much RAM
3347
3348-QuestionParticipation.OWNER selects the questions that the person created:
3349+QuestionParticipation.OWNER selects the questions that the person created.
3350
3351 >>> for question in foo_bar.searchQuestions(
3352 ... participation=QuestionParticipation.OWNER, status=None):
3353@@ -114,8 +120,8 @@
3354 Firefox loses focus and gets stuck
3355 Firefox is slow and consumes too much RAM
3356
3357-QuestionParticipation.ANSWERER selects the questions for which the person
3358-was marked as the answerer:
3359+QuestionParticipation.ANSWERER selects the questions for which the person gave
3360+an answer.
3361
3362 >>> for question in foo_bar.searchQuestions(
3363 ... participation=QuestionParticipation.ANSWERER, status=None):
3364@@ -124,19 +130,18 @@
3365 Firefox is slow and consumes too much RAM
3366
3367 QuestionParticipation.ASSIGNEE selects that questions which are assigned to
3368-the person:
3369+the person.
3370
3371- >>> for question in foo_bar.searchQuestions(
3372- ... participation=QuestionParticipation.ASSIGNEE, status=None):
3373- ... print question.title
3374+ >>> list(foo_bar.searchQuestions(
3375+ ... participation=QuestionParticipation.ASSIGNEE, status=None))
3376+ []
3377
3378 If a list of these constants is used, all of these participation types
3379-will be selected:
3380+will be selected.
3381
3382 >>> for question in foo_bar.searchQuestions(
3383- ... participation=[
3384- ... QuestionParticipation.OWNER,
3385- ... QuestionParticipation.ANSWERER],
3386+ ... participation=(QuestionParticipation.OWNER,
3387+ ... QuestionParticipation.ANSWERER),
3388 ... status=None):
3389 ... print question.title
3390 mailto: problem in webpage
3391@@ -145,40 +150,41 @@
3392 Firefox is slow and consumes too much RAM
3393
3394
3395-=== language ===
3396-
3397-By default, questions in all languages are included in the results.
3398-It is possible to filter questions by the language they were written
3399-in . One or a list of ILanguage object should be passed in the
3400-language parameter to specify the language filter.
3401-
3402- >>> from canonical.launchpad.interfaces import ILanguageSet
3403+Language
3404+--------
3405+
3406+By default, questions in all languages are included in the results. It is
3407+possible to filter questions by the language they were written in. One or a
3408+sequence of ILanguage object can be passed in to specify the language filter.
3409+
3410+ >>> from lp.services.worlddata.interfaces.language import ILanguageSet
3411 >>> spanish = getUtility(ILanguageSet)['es']
3412 >>> english = getUtility(ILanguageSet)['en']
3413
3414 Foo bar doesn't have any questions written in Spanish.
3415
3416- >>> for question in foo_bar.searchQuestions(language=spanish):
3417- ... print question.title
3418-
3419-But carlos has one.
3420-
3421+ >>> list(foo_bar.searchQuestions(language=spanish))
3422+ []
3423+
3424+But Carlos has one.
3425+
3426+ # Because not everyone uses a real editor <wink>
3427+ >>> from canonical.encoding import ascii_smash
3428 >>> carlos_raw = personset.getByName('carlos')
3429 >>> carlos = IQuestionsPerson(carlos_raw)
3430 >>> for question in carlos.searchQuestions(
3431- ... language=[english, spanish]):
3432- ... [question.title, question.language.code]
3433- [u'Problema al recompilar kernel con soporte smp (doble-n\xfacleo)',
3434- u'es']
3435-
3436-
3437-=== needs_attention ===
3438-
3439-The method accept a parameter called needs_attention which only selects
3440-the questions that needs attention from the person. This includes questions
3441-owned by the person in the ANSWERED or NEEDSINFO state. It also includes
3442-questions on which the person requested for more information or gave an
3443-answer and that are back in the OPEN state.
3444+ ... language=(english, spanish)):
3445+ ... print ascii_smash(question.title), question.language.code
3446+ Problema al recompilar kernel con soporte smp (doble-nucleo) es
3447+
3448+
3449+Questions needing attention
3450+---------------------------
3451+
3452+You can select only the questions that needs attention from a person. This
3453+includes questions owned by the person in the ANSWERED or NEEDSINFO state. It
3454+also includes questions on which the person requested more information or gave
3455+an answer and are back in the OPEN state.
3456
3457 >>> for question in foo_bar.searchQuestions(needs_attention=True):
3458 ... print question.status.title, question.owner.displayname, (
3459@@ -187,70 +193,80 @@
3460 Needs information Foo Bar Slow system
3461
3462
3463-=== Combination ===
3464+Search combinations
3465+-------------------
3466
3467-The returned sets of questions is the intersection of the sets delimited
3468-by each criteria:
3469+The results are the intersection of the sets delimited by each criteria.
3470
3471 >>> for question in foo_bar.searchQuestions(
3472- ... search_text='firefox OR Java', status=QuestionStatus.ANSWERED,
3473+ ... search_text='firefox OR Java',
3474+ ... status=QuestionStatus.ANSWERED,
3475 ... participation=QuestionParticipation.COMMENTER):
3476 ... print question.title, question.status.title
3477 Installation of Java Runtime Environment for Mozilla Answered
3478 Newly installed plug-in doesn't seem to be used Answered
3479
3480
3481-== getQuestionLanguages() ==
3482+Question languages
3483+==================
3484
3485 IQuestionsPerson also defines a getQuestionLanguages() attribute which
3486 contains the set of languages used by all of the questions in which this
3487 person is involved.
3488
3489- >>> sorted(language.code for language in foo_bar.getQuestionLanguages())
3490- [u'en']
3491-
3492-This includes questions which the person owns. But also, questions that
3493-the user subscribed to.
3494-
3495- >>> from canonical.launchpad.interfaces import IQuestionSet
3496+ >>> print ', '.join(
3497+ ... sorted(language.code
3498+ ... for language in foo_bar.getQuestionLanguages()))
3499+ en
3500+
3501+This includes questions which the person owns, and questions that the user is
3502+subscribed to...
3503+
3504+ >>> from lp.answers.interfaces.questioncollection import IQuestionSet
3505 >>> pt_BR_question = getUtility(IQuestionSet).get(13)
3506 >>> login('foo.bar@canonical.com')
3507 >>> pt_BR_question.subscribe(foo_bar_raw)
3508 <QuestionSubscription...>
3509
3510- >>> sorted(language.code for language in foo_bar.getQuestionLanguages())
3511- [u'en', u'pt_BR']
3512+ >>> print ', '.join(
3513+ ... sorted(language.code
3514+ ... for language in foo_bar.getQuestionLanguages()))
3515+ en, pt_BR
3516
3517-And also questions for which he's the answerer.
3518+...and questions for which he's the answerer...
3519
3520 >>> es_question = getUtility(IQuestionSet).get(12)
3521 >>> es_question.reject(foo_bar_raw, 'Reject question.')
3522 <QuestionMessage...>
3523
3524- >>> sorted(language.code for language in foo_bar.getQuestionLanguages())
3525- [u'en', u'es', u'pt_BR']
3526+ >>> print ', '.join(
3527+ ... sorted(language.code
3528+ ... for language in foo_bar.getQuestionLanguages()))
3529+ en, es, pt_BR
3530
3531-As well, as question which are assigned to the user.
3532+...as well as questions which are assigned to the user...
3533
3534 >>> pt_BR_question.assignee = carlos_raw
3535- >>> from canonical.database.sqlbase import flush_database_updates
3536- >>> flush_database_updates()
3537-
3538- >>> sorted(language.code for language in carlos.getQuestionLanguages())
3539- [u'es', u'pt_BR']
3540-
3541-And questions on which the user commented:
3542+ >>> print ', '.join(
3543+ ... sorted(language.code
3544+ ... for language in carlos.getQuestionLanguages()))
3545+ es, pt_BR
3546+
3547+...and questions on which the user commented.
3548
3549 >>> en_question = getUtility(IQuestionSet).get(1)
3550 >>> login('carlos@canonical.com')
3551 >>> en_question.addComment(carlos_raw, 'A simple comment.')
3552 <QuestionMessage...>
3553
3554- >>> sorted(language.code for language in carlos.getQuestionLanguages())
3555- [u'en', u'es', u'pt_BR']
3556-
3557-
3558-== getDirectAnswerQuestionTargets() ==
3559+ >>> print ', '.join(
3560+ ... sorted(language.code
3561+ ... for language in carlos.getQuestionLanguages()))
3562+ en, es, pt_BR
3563+
3564+
3565+Direct subscriptions
3566+====================
3567
3568 IQuestionsPerson defines getDirectAnswerQuestionTargets that can be used to
3569 retrieve a list of IQuestionTargets that a person subscribed himself to as an
3570@@ -261,9 +277,10 @@
3571 >>> no_priv.getDirectAnswerQuestionTargets()
3572 []
3573
3574- >>> from canonical.launchpad.interfaces import IProductSet
3575+ >>> from lp.registry.interfaces.product import IProductSet
3576 >>> firefox = getUtility(IProductSet).getByName("firefox")
3577- >>> # Answer contacts must speak a language
3578+
3579+ # Answer contacts must speak a language
3580 >>> no_priv_raw.addLanguage(english)
3581 >>> firefox.addAnswerContact(no_priv_raw)
3582 True
3583@@ -272,7 +289,9 @@
3584 ... print target.name
3585 firefox
3586
3587-== getTeamAnswerQuestionTargets() ==
3588+
3589+Indirect subscriptions
3590+======================
3591
3592 IQuestionsPerson defines getTeamAnswerQuestionTargets that retrieves a list of
3593 IQuestionTargets that the person is subscribed to indirectly as an answer
3594@@ -283,20 +302,21 @@
3595 >>> no_priv_raw.inTeam(landscape_team)
3596 True
3597
3598- >>> from canonical.launchpad.interfaces import IDistributionSet
3599+ >>> from lp.registry.interfaces.distribution import IDistributionSet
3600 >>> ubuntu = getUtility(IDistributionSet).getByName("ubuntu")
3601 >>> landscape_team.addLanguage(english)
3602 >>> ubuntu.addAnswerContact(landscape_team)
3603 True
3604
3605- >>> sorted(target.name
3606- ... for target in no_priv.getTeamAnswerQuestionTargets())
3607- [u'ubuntu']
3608+ >>> print ', '.join(
3609+ ... sorted(target.name
3610+ ... for target in no_priv.getTeamAnswerQuestionTargets()))
3611+ ubuntu
3612
3613-Indirect team membership is also taken in consideration. For example,
3614-the Landscape Team joins the Translator Team. So targets for which the
3615-Translator team is an answer contact will be included in No Privileges
3616-Person's supported IQuestionTargets:
3617+Indirect team membership is also taken in consideration. For example, when
3618+the Landscape Team joins the Translator Team, targets for which the Translator
3619+team is an answer contact will be included in No Privileges Person's supported
3620+IQuestionTargets.
3621
3622 >>> translator_team = personset.getByName('ubuntu-translators')
3623 >>> no_priv_raw.inTeam(translator_team)
3624@@ -315,36 +335,33 @@
3625 >>> translator_team.addLanguage(english)
3626 >>> evolution_package.addAnswerContact(translator_team)
3627 True
3628- >>> sorted(target.name
3629- ... for target in no_priv.getTeamAnswerQuestionTargets())
3630- [u'evolution', u'ubuntu']
3631-
3632-
3633-== Deactivated pillars and *AnswerQuestionTargets() ==
3634-
3635-getDirectAnswerQuestionTargets() and getTeamAnswerQuestionTargets() use
3636-a _getQuestionTargetsFromAnswerContacts() to build a distinct list of
3637-valid IQuestionTargets. It ensures that no deactivated pillars are in
3638-the list.
3639+ >>> print ', '.join(
3640+ ... sorted(target.name
3641+ ... for target in no_priv.getTeamAnswerQuestionTargets()))
3642+ evolution, ubuntu
3643+
3644+
3645+Deactivated pillars
3646+===================
3647+
3648+Only valid IQuestionTargets are returned, ensuring that no deactivated pillars
3649+are in the results.
3650
3651 If the Firefox project is deactivated, it is removed from the list of
3652 supported projects.
3653
3654- >>> from canonical.launchpad.ftests import syncUpdate
3655-
3656 >>> login('foo.bar@canonical.com')
3657 >>> firefox.active = False
3658- >>> syncUpdate(firefox)
3659 >>> sorted(target.name
3660 ... for target in no_priv.getDirectAnswerQuestionTargets())
3661 []
3662
3663-When the Firefox project is reactivated, the answer contact relationship
3664-is visible. It is important to preserve the continuity of the project in
3665-cases were we only want is deactivated for a short period.
3666+When the Firefox project is reactivated, the answer contact relationship is
3667+visible. These relationships are persistent for cases where we only want is
3668+deactivated for a short period.
3669
3670 >>> firefox.active = True
3671- >>> syncUpdate(firefox)
3672- >>> sorted(target.name
3673- ... for target in no_priv.getDirectAnswerQuestionTargets())
3674- [u'firefox']
3675+ >>> print ', '.join(
3676+ ... sorted(target.name
3677+ ... for target in no_priv.getDirectAnswerQuestionTargets()))
3678+ firefox
3679
3680=== renamed file 'lib/lp/answers/doc/project.txt' => 'lib/lp/answers/doc/projectgroup.txt'
3681--- lib/lp/answers/doc/project.txt 2010-02-17 14:42:16 +0000
3682+++ lib/lp/answers/doc/projectgroup.txt 2010-03-04 20:06:42 +0000
3683@@ -1,12 +1,15 @@
3684-= Project and the Answer Tracker =
3685+===============================
3686+Projects and the answer tracker
3687+===============================
3688
3689-Although question cannot be filed directly against projects, IProjectGroup in
3690-Launchpad also provides the IQuestionCollection and
3691+Although question cannot be filed directly against project groups,
3692+IProjectGroup in Launchpad also provides the IQuestionCollection and
3693 ISearchableByQuestionOwner interfaces.
3694
3695 >>> from canonical.launchpad.webapp.testing import verifyObject
3696- >>> from canonical.launchpad.interfaces import (
3697- ... IProjectGroupSet, ISearchableByQuestionOwner, IQuestionCollection)
3698+ >>> from lp.registry.interfaces.projectgroup import IProjectGroupSet
3699+ >>> from lp.answers.interfaces.questioncollection import (
3700+ ... ISearchableByQuestionOwner, IQuestionCollection)
3701
3702 >>> mozilla_project = getUtility(IProjectGroupSet).getByName('mozilla')
3703 >>> verifyObject(IQuestionCollection, mozilla_project)
3704@@ -14,38 +17,41 @@
3705 >>> verifyObject(ISearchableByQuestionOwner, mozilla_project)
3706 True
3707
3708-== searchQuestions() ==
3709-
3710-This means that it is possible to search for all questions filed against
3711-products in a project using the project searchQuestions() method.
3712-
3713- # Add a question to thunderbird.
3714- >>> from canonical.launchpad.interfaces import ILaunchBag, IProductSet
3715+
3716+Questions filed against project in a project group
3717+==================================================
3718+
3719+You can search for all questions filed against projects in a project using the
3720+project group's searchQuestions() method.
3721+
3722+ >>> from lp.registry.interfaces.person import IPersonSet
3723+ >>> from lp.registry.interfaces.product import IProductSet
3724+
3725 >>> login('test@canonical.com')
3726 >>> thunderbird = getUtility(IProductSet).getByName('thunderbird')
3727- >>> sample_person = getUtility(ILaunchBag).user
3728+ >>> sample_person = getUtility(IPersonSet).getByName('name12')
3729 >>> question = thunderbird.newQuestion(
3730- ... sample_person, "SVG attachments aren't displayed",
3731+ ... sample_person,
3732+ ... "SVG attachments aren't displayed ",
3733 ... "It would be a nice feature if SVG attachments could be displayed"
3734- ... "inlined.")
3735+ ... " inlined.")
3736
3737 >>> for question in mozilla_project.searchQuestions(search_text='svg'):
3738 ... print question.title, question.target.displayname
3739 SVG attachments aren't displayed Mozilla Thunderbird
3740 Problem showing the SVG demo on W3C site Mozilla Firefox
3741
3742-In the case were a Project has no Products, then we can expect no
3743-possible questions.
3744+In the case where a project group has no projects, there are no results.
3745
3746 >>> aaa_project = getUtility(IProjectGroupSet).getByName('aaa')
3747- >>> [q for question in aaa_project.searchQuestions()]
3748+ >>> list(aaa_project.searchQuestions())
3749 []
3750
3751-Questions can be searched by all the standard searchQuestions() parameters
3752-(consult questiontarget.txt for the full details.)
3753+Questions can be searched by all the standard searchQuestions() parameters.
3754+See questiontarget.txt for the full details.
3755
3756- >>> from canonical.launchpad.interfaces import (
3757- ... QuestionStatus, QuestionSort)
3758+ >>> from lp.answers.interfaces.questionenums import (
3759+ ... QuestionSort, QuestionStatus)
3760 >>> for question in mozilla_project.searchQuestions(
3761 ... owner=sample_person, status=QuestionStatus.OPEN,
3762 ... sort=QuestionSort.OLDEST_FIRST):
3763@@ -53,20 +59,21 @@
3764 Problem showing the SVG demo on W3C site Mozilla Firefox
3765 SVG attachments aren't displayed Mozilla Thunderbird
3766
3767-== getQuestionLanguages() ==
3768-
3769-The getQuestionLanguages() returns the set of languages that is used by
3770-all the questions in the project products.
3771-
3772- >>> sorted(language.code
3773- ... for language in mozilla_project.getQuestionLanguages())
3774- [u'en', u'pt_BR']
3775-
3776-(The firefox product has one question created in Brazilian Portuguese.)
3777-
3778-In the case where a Project has no Products, language questions will
3779-still return and empty set.
3780-
3781- >>> [language.code for language in aaa_project.getQuestionLanguages()]
3782+
3783+Languages
3784+=========
3785+
3786+getQuestionLanguages() returns the set of languages that is used by all the
3787+questions in the project group's projects.
3788+
3789+ # The Firefox project group has one question created in Brazilian
3790+ # Portuguese.
3791+ >>> print ', '.join(
3792+ ... sorted(language.code
3793+ ... for language in mozilla_project.getQuestionLanguages()))
3794+ en, pt_BR
3795+
3796+In the case where a project group has no projects, there are no results.
3797+
3798+ >>> list(aaa_project.getQuestionLanguages())
3799 []
3800-
3801
3802=== modified file 'lib/lp/answers/doc/question.txt'
3803--- lib/lp/answers/doc/question.txt 2009-03-24 12:43:49 +0000
3804+++ lib/lp/answers/doc/question.txt 2010-03-04 20:06:42 +0000
3805@@ -1,21 +1,24 @@
3806-= Launchpad Answer Tracker =
3807+========================
3808+Launchpad Answer Tracker
3809+========================
3810
3811-Launchpad includes an Answer Tracker where users can post questions
3812-(usually about problems they encounter with projects) and other can
3813-answer them.) Questions are created and accessed using the
3814-IQuestionTarget interface. This interface is available on Products,
3815-Distributions and DistributionSourcePackages.
3816+Launchpad includes an Answer Tracker where users can post questions, usually
3817+about problems they encounter with projects, and other people can answer them.
3818+Questions are created and accessed using the IQuestionTarget interface. This
3819+interface is available on Products, Distributions and
3820+DistributionSourcePackages.
3821
3822 >>> login('test@canonical.com')
3823
3824 >>> from canonical.launchpad.webapp.testing import verifyObject
3825- >>> from canonical.launchpad.interfaces import (
3826- ... IDistributionSet, IProductSet, IPersonSet, IQuestionTarget)
3827+ >>> from lp.answers.interfaces.questiontarget import IQuestionTarget
3828+ >>> from lp.registry.interfaces.product import IProductSet
3829
3830 >>> firefox = getUtility(IProductSet)['firefox']
3831 >>> verifyObject(IQuestionTarget, firefox)
3832 True
3833
3834+ >>> from lp.registry.interfaces.distribution import IDistributionSet
3835 >>> ubuntu = getUtility(IDistributionSet).getByName('ubuntu')
3836 >>> verifyObject(IQuestionTarget, ubuntu)
3837 True
3838@@ -24,9 +27,9 @@
3839 >>> verifyObject(IQuestionTarget, evolution_in_ubuntu)
3840 True
3841
3842-Although Distribution series do not implement the IQuestionTarget
3843-interface, it is possible to adapt one to it. (The adapter is actually
3844-the distroseries's distribution.)
3845+Although distribution series do not implement the IQuestionTarget interface,
3846+it is possible to adapt one to it. The adapter is actually the distroseries's
3847+distribution.
3848
3849 >>> ubuntu_warty = ubuntu.getSeries('warty')
3850 >>> IQuestionTarget.providedBy(ubuntu_warty)
3851@@ -56,29 +59,33 @@
3852 You create a new question by calling the newQuestion() method of an
3853 IQuestionTarget attribute.
3854
3855+ >>> from lp.registry.interfaces.person import IPersonSet
3856 >>> sample_person = getUtility(IPersonSet).getByEmail('test@canonical.com')
3857 >>> firefox_question = firefox.newQuestion(
3858 ... sample_person, "Firefox question", "Unable to use Firefox")
3859
3860-(The complete IQuestionTarget interface is documented in
3861-../interfaces/ftests/questiontarget.txt.)
3862-
3863-== Official usage ==
3864-
3865-A product or distribution may be offically supported by the community
3866-using the Answer Tracker. This status is set by the official_answers
3867-attribute on the IProduct and IDistribution.
3868+The complete IQuestionTarget interface is documented in questiontarget.txt.
3869+
3870+
3871+Official usage
3872+==============
3873+
3874+A product or distribution may be officially supported by the community using
3875+the Answer Tracker. This status is set by the official_answers attribute on
3876+the IProduct and IDistribution.
3877
3878 >>> ubuntu.official_answers
3879 True
3880 >>> firefox.official_answers
3881 True
3882
3883-== IQuestion ==
3884-
3885-Questions are manipulated through the IQuestion interface:
3886-
3887- >>> from canonical.launchpad.interfaces import IQuestion
3888+
3889+IQuestion interface
3890+===================
3891+
3892+Questions are manipulated through the IQuestion interface.
3893+
3894+ >>> from lp.answers.interfaces.question import IQuestion
3895 >>> from zope.security.proxy import removeSecurityProxy
3896
3897 # The complete interface is not necessarily available to the
3898@@ -88,21 +95,27 @@
3899
3900 The person who submitted the question is available in the owner field.
3901
3902- >>> firefox_question.owner == sample_person
3903- True
3904+ >>> firefox_question.owner
3905+ <Person at ... name12 (Sample Person)>
3906
3907 When the question is created, the owner is added to the question's
3908-subscribers:
3909-
3910- >>> sample_person in [s.person for s in firefox_question.subscriptions]
3911- True
3912-
3913-The question status is 'Open':
3914-
3915- >>> firefox_question.status.title
3916- 'Open'
3917-
3918-And the creation time is recorded in the datecreated attribute:
3919+subscribers.
3920+
3921+ >>> from operator import attrgetter
3922+ >>> def print_subscribers(question):
3923+ ... people = [subscription.person
3924+ ... for subscription in question.subscriptions]
3925+ ... for person in sorted(people, key=attrgetter('name')):
3926+ ... print person.displayname
3927+ >>> print_subscribers(firefox_question)
3928+ Sample Person
3929+
3930+The question status is 'Open'.
3931+
3932+ >>> print firefox_question.status.title
3933+ Open
3934+
3935+The question has a creation time.
3936
3937 >>> from datetime import datetime, timedelta
3938 >>> from pytz import UTC
3939@@ -110,11 +123,10 @@
3940 >>> now - firefox_question.datecreated < timedelta(seconds=5)
3941 True
3942
3943-The target onto which the question was created is available through the
3944-'target' attribute:
3945+The target onto which the question was created is also available.
3946
3947- >>> firefox_question.target == firefox
3948- True
3949+ >>> print firefox_question.target.displayname
3950+ Mozilla Firefox
3951
3952 It is also possible to adapt a question to its IQuestionTarget.
3953
3954@@ -163,66 +175,69 @@
3955 firefox
3956
3957
3958-== Subscriptions and Notifications ==
3959+Subscriptions and notifications
3960+===============================
3961
3962 Whenever a question is created or changed, email notifications will be
3963-sent. To receive such notification, one can subscribe to the bug using
3964+sent. To receive such notification, one can subscribe to the bug using
3965 the subscribe() method.
3966
3967 >>> no_priv = getUtility(IPersonSet).getByName('no-priv')
3968 >>> subscription = firefox_question.subscribe(no_priv)
3969
3970-The list of subscriptions is available in the subscriptions attribute.
3971-In the current case, the subscribers will include the owner
3972-('Sample Person') and the newly subscribed person.
3973+The subscribers include the owner and the newly subscribed person.
3974
3975- >>> [s.person.displayname for s in firefox_question.subscriptions]
3976- [u'Sample Person', u'No Privileges Person']
3977+ >>> print_subscribers(firefox_question)
3978+ Sample Person
3979+ No Privileges Person
3980
3981 The getDirectSubscribers() method returns a sorted list of subscribers.
3982 This method iterates like the NotificationRecipientSet returned by the
3983 getDirectRecipients() method.
3984
3985- >>> [person.displayname
3986- ... for person in firefox_question.getDirectSubscribers()]
3987- [u'No Privileges Person', u'Sample Person']
3988+ >>> for person in firefox_question.getDirectSubscribers():
3989+ ... print person.displayname
3990+ No Privileges Person
3991+ Sample Person
3992
3993 To remove a person from the subscriptions list, we use the unsubscribe()
3994 method.
3995
3996 >>> firefox_question.unsubscribe(no_priv)
3997- >>> [s.person.displayname for s in firefox_question.subscriptions]
3998- [u'Sample Person']
3999+ >>> print_subscribers(firefox_question)
4000+ Sample Person
4001
4002-The persons who are on the subscription list are said to be directly
4003-subscribed to the question. They explicitly choose to get notifications
4004-about that particular question. This list of persons is available through
4005-the getDirectRecipients() method.
4006+The people on the subscription list are said to be directly subscribed to the
4007+question. They explicitly chose to get notifications about that particular
4008+question. This list of people is available through the getDirectRecipients()
4009+method.
4010
4011 >>> subscribers = firefox_question.getDirectRecipients()
4012
4013 That method returns an INotificationRecipientSet, containing the direct
4014-subscribers along the rationale for contacting them:
4015+subscribers along with the rationale for contacting them.
4016
4017 >>> from canonical.launchpad.interfaces import INotificationRecipientSet
4018 >>> verifyObject(INotificationRecipientSet, subscribers)
4019 True
4020- >>> [person.displayname for person in subscribers]
4021- [u'Sample Person']
4022- >>> subscribers.getReason(sample_person)
4023- ('You received this question notification because you are a direct
4024- subscriber of the question.', 'Subscriber')
4025+ >>> def print_reason(subscribers):
4026+ ... for person in subscribers:
4027+ ... text, header = subscribers.getReason(person)
4028+ ... print header, person.displayname, text
4029+ >>> print_reason(subscribers)
4030+ Subscriber Sample Person You received this question notification
4031+ because you are a direct subscriber of the question.
4032
4033-There is also a list of 'indirect' subscribers to the question. These
4034-are persons that didn't explicitly subscribed to the question, but that
4035-will receive notifications for other reason. Answer contacts for the
4036-question target are part of the indirect subscribers list.
4037+There is also a list of 'indirect' subscribers to the question. These are
4038+people that didn't explicitly subscribe to the question, but that will receive
4039+notifications for other reasons. Answer contacts for the question target are
4040+part of the indirect subscribers list.
4041
4042 # There are no answer contacts on the firefox product.
4043- >>> [person.displayname
4044- ... for person in firefox_question.getIndirectRecipients()]
4045+ >>> list(firefox_question.getIndirectRecipients())
4046 []
4047- >>> from canonical.launchpad.interfaces import ILanguageSet
4048+
4049+ >>> from lp.services.worlddata.interfaces.language import ILanguageSet
4050 >>> english = getUtility(ILanguageSet)['en']
4051 >>> no_priv.addLanguage(english)
4052 >>> firefox.addAnswerContact(no_priv)
4053@@ -231,16 +246,14 @@
4054 >>> indirect_subscribers = firefox_question.getIndirectRecipients()
4055 >>> verifyObject(INotificationRecipientSet, indirect_subscribers)
4056 True
4057- >>> [person.displayname for person in indirect_subscribers]
4058- [u'No Privileges Person']
4059- >>> indirect_subscribers.getReason(no_priv)
4060- (u'You received this question notification because you are an answer
4061- contact for Mozilla Firefox.',
4062- u'Answer Contact (Mozilla Firefox)')
4063+ >>> print_reason(indirect_subscribers)
4064+ Answer Contact (Mozilla Firefox) No Privileges Person
4065+ You received this question notification because you are an answer
4066+ contact for Mozilla Firefox.
4067
4068-There is a special case for when the question's is associated to a
4069-source package. The answer contacts for both the distribution and the
4070-source package are part of the indirect subscribers list.
4071+There is a special case for when the question is associated with a source
4072+package. The answer contacts for both the distribution and the source package
4073+are part of the indirect subscribers list.
4074
4075 # Let's register some answer contacts for the distribution and
4076 # the package.
4077@@ -257,64 +270,80 @@
4078 >>> package_question = evolution_in_ubuntu.newQuestion(
4079 ... sample_person, 'Upgrading to Evolution 1.4 breaks plug-ins',
4080 ... "The FnordsHighlighter plug-in doesn't work after upgrade.")
4081- >>> [s.person.displayname for s in package_question.subscriptions]
4082- [u'Sample Person']
4083+
4084+ >>> print_subscribers(package_question)
4085+ Sample Person
4086+
4087 >>> indirect_subscribers = package_question.getIndirectRecipients()
4088- >>> [person.displayname for person in indirect_subscribers]
4089- [u'No Privileges Person', u'Ubuntu Team']
4090- >>> indirect_subscribers.getReason(ubuntu_team)
4091- (u'You received this question notification because you are a member of
4092- Ubuntu Team, which is an answer contact for Ubuntu.',
4093- u'Answer Contact (ubuntu) @ubuntu-team')
4094- >>> indirect_subscribers.getReason(no_priv)
4095- (u'You received this question notification because you are an answer
4096- contact for evolution in ubuntu.',
4097- u'Answer Contact (evolution in ubuntu)')
4098+ >>> for person in indirect_subscribers:
4099+ ... print person.displayname
4100+ No Privileges Person
4101+ Ubuntu Team
4102+
4103+ >>> text, header = indirect_subscribers.getReason(ubuntu_team)
4104+ >>> print header, text
4105+ Answer Contact (ubuntu) @ubuntu-team
4106+ You received this question notification because you are a member of
4107+ Ubuntu Team, which is an answer contact for Ubuntu.
4108
4109 The question's assignee is also part of the indirect subscription list:
4110
4111- >>> login('foo.bar@canonical.com')
4112+ >>> login('admin@canonical.com')
4113 >>> package_question.assignee = getUtility(IPersonSet).getByName('name16')
4114 >>> indirect_subscribers = package_question.getIndirectRecipients()
4115- >>> [person.displayname for person in indirect_subscribers]
4116- [u'Foo Bar', u'No Privileges Person', u'Ubuntu Team']
4117- >>> indirect_subscribers.getReason(package_question.assignee)
4118- ('You received this question notification because you are the assignee
4119- for this question.',
4120- 'Assignee')
4121+ >>> for person in indirect_subscribers:
4122+ ... print person.displayname
4123+ Foo Bar
4124+ No Privileges Person
4125+ Ubuntu Team
4126+
4127+ >>> text, header = indirect_subscribers.getReason(
4128+ ... package_question.assignee)
4129+ >>> print header, text
4130+ Assignee
4131+ You received this question notification because you are the assignee for
4132+ this question.
4133
4134 The getIndirectSubscribers() method iterates like the getIndirectRecipients()
4135 method, but it returns a sorted list instead of a NotificationRecipientSet.
4136 It too contains the question assignee.
4137
4138 >>> indirect_subscribers = package_question.getIndirectSubscribers()
4139- >>> [person.displayname for person in indirect_subscribers]
4140- [u'Foo Bar', u'No Privileges Person', u'Ubuntu Team']
4141+ >>> for person in indirect_subscribers:
4142+ ... print person.displayname
4143+ Foo Bar
4144+ No Privileges Person
4145+ Ubuntu Team
4146
4147-Notifications are sent to the list of direct and indirect subscribers.
4148-The notification recipients list can be obtained by using the
4149-getRecipients() method.
4150+Notifications are sent to the list of direct and indirect subscribers. The
4151+notification recipients list can be obtained by using the getRecipients()
4152+method.
4153
4154 >>> login('no-priv@canonical.com')
4155 >>> subscribers = firefox_question.getRecipients()
4156 >>> verifyObject(INotificationRecipientSet, subscribers)
4157 True
4158- >>> [person.displayname for person in subscribers]
4159- [u'No Privileges Person', u'Sample Person']
4160-
4161-(More documentation on the question notifications can be found in
4162-'answer-tracker-notifications.txt'.)
4163-
4164-
4165-== Workflow ==
4166+ >>> for person in subscribers:
4167+ ... print person.displayname
4168+ No Privileges Person
4169+ Sample Person
4170+
4171+More documentation on the question notifications can be found in
4172+`answer-tracker-notifications.txt`.
4173+
4174+
4175+Workflow
4176+========
4177
4178 A question status should not be manipulated directly but through the
4179 workflow methods.
4180
4181 The complete question workflow is documented in
4182-'answer-tracker-workflow.txt'.
4183-
4184-== Bug Linking ==
4185+`answer-tracker-workflow.txt`.
4186+
4187+
4188+Bug linking
4189+===========
4190
4191 Question implements the IBugLinkTarget interface which makes it possible
4192 to link bug report to question.
4193@@ -323,13 +352,13 @@
4194 >>> verifyObject(IBugLinkTarget, firefox_question)
4195 True
4196
4197-(See ../interfaces/ftests/buglinktarget.txt for the documentation and
4198-test of the IBugLinkTarget interface.)
4199-
4200-When a bug is linked to a question, the question's owner is subscribed to
4201-the bug.
4202-
4203- >>> from canonical.launchpad.interfaces import IBugSet
4204+See ../../bugs/tests/buglinktarget.txt for the documentation and test of the
4205+IBugLinkTarget interface.
4206+
4207+When a bug is linked to a question, the question's owner is subscribed to the
4208+bug.
4209+
4210+ >>> from lp.bugs.interfaces.bug import IBugSet
4211 >>> bug7 = getUtility(IBugSet).get(7)
4212 >>> bug7.isSubscribed(firefox_question.owner)
4213 False
4214@@ -338,33 +367,34 @@
4215 >>> bug7.isSubscribed(firefox_question.owner)
4216 True
4217
4218-When the link is removed, the owner is unsubscribed:
4219+When the link is removed, the owner is unsubscribed.
4220
4221 >>> firefox_question.unlinkBug(bug7)
4222 <QuestionBug...>
4223 >>> bug7.isSubscribed(firefox_question.owner)
4224 False
4225
4226-== Unsupported Questions ==
4227-
4228-While a Person may ask questions in his language of choice, that does
4229-not mean that indirect subscribers (Answer Contacts) to an
4230-IQuestionTarget speak that language. IQuestionTarget can return a list
4231-Questions in languages that are not supported
4232+
4233+Unsupported questions
4234+=====================
4235+
4236+While a Person may ask questions in his language of choice, that does not mean
4237+that indirect subscribers (Answer Contacts) to an IQuestionTarget speak that
4238+language. IQuestionTarget can return a list Questions in languages that are
4239+not supported.
4240
4241 >>> unsupported_questions = firefox.searchQuestions(unsupported=True)
4242- >>> sorted([question.title for question in unsupported_questions])
4243+ >>> sorted(question.title for question in unsupported_questions)
4244 [u'Problemas de Impress\xe3o no Firefox']
4245
4246 >>> unsupported_questions = evolution_in_ubuntu.searchQuestions(
4247 ... unsupported=True)
4248- >>> sorted([question.title for question in unsupported_questions])
4249+ >>> sorted(question.title for question in unsupported_questions)
4250 []
4251
4252 >>> warty_question_target = IQuestionTarget(ubuntu_warty)
4253 >>> unsupported_questions = warty_question_target.searchQuestions(
4254 ... unsupported=True)
4255- >>> sorted([question.title for question in unsupported_questions])
4256+ >>> sorted(question.title for question in unsupported_questions)
4257 [u'Problema al recompilar kernel con soporte smp (doble-n\xfacleo)',
4258 u'\u0639\u0643\u0633 \u0627\u0644\u062a\u063a\u064a\u064a\u0631...]
4259-
4260
4261=== renamed file 'lib/lp/answers/doc/utility.txt' => 'lib/lp/answers/doc/questionsets.txt'
4262--- lib/lp/answers/doc/utility.txt 2009-03-24 12:43:49 +0000
4263+++ lib/lp/answers/doc/questionsets.txt 2010-03-04 20:06:42 +0000
4264@@ -1,69 +1,75 @@
4265-= Answer Tracker Utility: IQuestionSet =
4266+====================
4267+Question collections
4268+====================
4269
4270-There is an IQuestionSet utility that can be use to retrieve and search
4271-for question whatever the target they were created in.
4272+The IQuestionSet utility is used to retrieve and search for questions no
4273+matter which question target they were created for.
4274
4275 >>> from canonical.launchpad.webapp.testing import verifyObject
4276- >>> from canonical.launchpad.interfaces import IQuestionSet
4277+ >>> from lp.answers.interfaces.questioncollection import IQuestionSet
4278 >>> question_set = getUtility(IQuestionSet)
4279 >>> verifyObject(IQuestionSet, question_set)
4280 True
4281
4282
4283-== get() ==
4284+Retrieving questions
4285+====================
4286
4287-The get() method can be used to get a question with a specific id:
4288+The get() method can be used to retrieve a question with a specific id.
4289
4290 >>> question_one = question_set.get(1)
4291- >>> question_one.title
4292- u'Firefox cannot render Bank Site'
4293+ >>> print question_one.title
4294+ Firefox cannot render Bank Site
4295
4296-If no question exists, a default value is returned:
4297+If no question exists, a default value is returned.
4298
4299 >>> default = object()
4300 >>> question_nonexistant = question_set.get(123456, default=default)
4301 >>> question_nonexistant is default
4302 True
4303
4304-If no default value is given, None is returned:
4305-
4306- >>> question_set.get(123456) is None
4307- True
4308-
4309-
4310-== searchQuestions() ==
4311-
4312-IQuestionSet also defines a searchQuestions() method that can be used to
4313-search for questions defined in any products or distributions (in fact,
4314-in any context that allows questions to be defined). Two search criteria
4315-are defined search_text and status.
4316-
4317-
4318-=== search_text ===
4319-
4320-The search_text parameter will limit the questions to those matching
4321-the query using the regular full text algorithm.
4322-
4323+If no default value is given, None is returned.
4324+
4325+ >>> print question_set.get(123456)
4326+ None
4327+
4328+
4329+Searching questions
4330+===================
4331+
4332+The IQuestionSet interface defines a searchQuestions() method that is used to
4333+search for questions defined in any question target.
4334+
4335+
4336+Search text
4337+-----------
4338+
4339+The search_text parameter will return questions matching the query using the
4340+regular full text algorithm.
4341+
4342+ # Because not everyone uses a real editor <wink>
4343+ >>> from canonical.encoding import ascii_smash
4344 >>> for question in question_set.searchQuestions(search_text='firefox'):
4345- ... print repr(question.title), question.target.displayname
4346- u'Problemas de Impress\xe3o no Firefox' Mozilla Firefox
4347- u'Firefox loses focus and gets stuck' Mozilla Firefox
4348- u'Firefox cannot render Bank Site' Mozilla Firefox
4349- u'mailto: problem in webpage' mozilla-firefox in ubuntu
4350- u"Newly installed plug-in doesn't seem to be used" Mozilla Firefox
4351- u'Problem showing the SVG demo on W3C site' Mozilla Firefox
4352- u'\u0639\u0643\u0633 ...' Ubuntu
4353-
4354-
4355-=== status ===
4356-
4357-By default, expired and invalid questions are not searched for. The
4358-status parameter can be used to select the questions in the status
4359-you are interested in.
4360-
4361- >>> from canonical.launchpad.interfaces import QuestionStatus
4362+ ... print ascii_smash(question.title), question.target.displayname
4363+ Problemas de Impressao no Firefox Mozilla Firefox
4364+ Firefox loses focus and gets stuck Mozilla Firefox
4365+ Firefox cannot render Bank Site Mozilla Firefox
4366+ mailto: problem in webpage mozilla-firefox in ubuntu
4367+ Newly installed plug-in doesn't seem to be used Mozilla Firefox
4368+ Problem showing the SVG demo on W3C site Mozilla Firefox
4369+ AINKAFSEEN ALEFLAMTEHGHAINYEHYEHREHALEFTEH ... Ubuntu
4370+
4371+
4372+Status
4373+------
4374+
4375+By default, expired and invalid questions are not searched for. The status
4376+parameter can be used to select the questions in the status you are interested
4377+in.
4378+
4379+ >>> from lp.answers.interfaces.questionenums import QuestionStatus
4380 >>> for question in question_set.searchQuestions(
4381- ... status=QuestionStatus.INVALID):
4382+ ... status=QuestionStatus.INVALID):
4383 ... print question.title, question.status.title, (
4384 ... question.target.displayname)
4385 Firefox is slow and consumes too much RAM Invalid mozilla-firefox in ubuntu
4386@@ -78,111 +84,118 @@
4387 Firefox is slow and consumes too much RAM Invalid mozilla-firefox in ubuntu
4388
4389
4390-=== language ===
4391+Language
4392+--------
4393
4394 The language parameter can be used to select only questions written in a
4395 particular language.
4396
4397- >>> from canonical.launchpad.interfaces import ILanguageSet
4398+ >>> from lp.services.worlddata.interfaces.language import ILanguageSet
4399 >>> spanish = getUtility(ILanguageSet)['es']
4400 >>> for t in question_set.searchQuestions(language=spanish):
4401- ... print t.title.encode('us-ascii', 'backslashreplace')
4402- Problema al recompilar kernel con soporte smp (doble-n\xfacleo)
4403-
4404-=== Combination ===
4405-
4406-The returned sets of questions is the intersection of the sets delimited
4407-by each criteria:
4408+ ... print ascii_smash(t.title)
4409+ Problema al recompilar kernel con soporte smp (doble-nucleo)
4410+
4411+
4412+Combinations
4413+------------
4414+
4415+The returned set of questions is the intersection of the sets delimited by
4416+each criteria.
4417
4418 >>> for question in question_set.searchQuestions(
4419 ... search_text='firefox',
4420- ... status=[QuestionStatus.OPEN, QuestionStatus.INVALID]):
4421- ... print repr(question.title), question.status.title, (
4422+ ... status=(QuestionStatus.OPEN, QuestionStatus.INVALID)):
4423+ ... print ascii_smash(question.title), question.status.title, (
4424 ... question.target.displayname)
4425- u'Problemas de Impress\xe3o no Firefox' Open Mozilla Firefox
4426- u'Firefox is slow and consumes too much RAM' Invalid mozilla-firefox in ubuntu
4427- u'Firefox loses focus and gets stuck' Open Mozilla Firefox
4428- u'Firefox cannot render Bank Site' Open Mozilla Firefox
4429- u'Problem showing the SVG demo on W3C site' Open Mozilla Firefox
4430- u'\u0639\u0643\u0633 ...' Open Ubuntu
4431-
4432-
4433-=== Sort Order ===
4434-
4435-When using the search_text criteria, the default is to sort the results
4436-by relevancy. One can use the sort parameter to change that. It takes
4437-one of the constant defined in the QuestionSort enumeration.
4438-
4439- >>> from canonical.launchpad.interfaces import QuestionSort
4440+ Problemas de Impressao no Firefox Open Mozilla Firefox
4441+ Firefox is slow and consumes too much RAM Invalid mozilla-firefox in ubuntu
4442+ Firefox loses focus and gets stuck Open Mozilla Firefox
4443+ Firefox cannot render Bank Site Open Mozilla Firefox
4444+ Problem showing the SVG demo on W3C site Open Mozilla Firefox
4445+ AINKAFSEEN ALEFLAMTEHGHAINYEHYEHREHALEFTEH ... Ubuntu
4446+
4447+
4448+Sort order
4449+----------
4450+
4451+When using the search_text criteria, the default is to sort the results by
4452+relevancy. One can use the sort parameter to change the order. It takes one
4453+of the constant defined in the QuestionSort enumeration.
4454+
4455+ >>> from lp.answers.interfaces.questionenums import QuestionSort
4456 >>> for question in question_set.searchQuestions(
4457 ... search_text='firefox', sort=QuestionSort.OLDEST_FIRST):
4458- ... print question.id, repr(question.title), (
4459+ ... print question.id, ascii_smash(question.title), (
4460 ... question.target.displayname)
4461- 14 u'\u0639\u0643\u0633 ...' Ubuntu
4462- 1 u'Firefox cannot render Bank Site' Mozilla Firefox
4463- 2 u'Problem showing the SVG demo on W3C site' Mozilla Firefox
4464- 4 u'Firefox loses focus and gets stuck' Mozilla Firefox
4465- 6 u"Newly installed plug-in doesn't seem to be used" Mozilla Firefox
4466- 9 u'mailto: problem in webpage' mozilla-firefox in ubuntu
4467- 13 u'Problemas de Impress\xe3o no Firefox' Mozilla Firefox
4468+ 14 AINKAFSEEN ALEFLAMTEHGHAINYEHYEHREHALEFTEH ... Ubuntu
4469+ 1 Firefox cannot render Bank Site Mozilla Firefox
4470+ 2 Problem showing the SVG demo on W3C site Mozilla Firefox
4471+ 4 Firefox loses focus and gets stuck Mozilla Firefox
4472+ 6 Newly installed plug-in doesn't seem to be used Mozilla Firefox
4473+ 9 mailto: problem in webpage mozilla-firefox in ubuntu
4474+ 13 Problemas de Impressao no Firefox Mozilla Firefox
4475
4476-When no text search is done, the default sort order is
4477-QuestionSort.NEWEST_FIRST.
4478+When no text search is done, the default sort order is by newest first.
4479
4480 >>> for question in question_set.searchQuestions(
4481- ... status=QuestionStatus.OPEN)[:5]:
4482- ... print question.id, repr(question.title), (
4483+ ... status=QuestionStatus.OPEN)[:5]:
4484+ ... print question.id, ascii_smash(question.title), (
4485 ... question.target.displayname)
4486- 13 u'Problemas de Impress\xe3o no Firefox' Mozilla Firefox
4487- 12 u'Problema al recompilar kernel con soporte smp (doble-n\xfacleo)' Ubuntu
4488- 11 u'Continue playing after shutdown' Ubuntu
4489- 5 u'Installation failed' Ubuntu
4490- 4 u'Firefox loses focus and gets stuck' Mozilla Firefox
4491-
4492-
4493-== getQuestionLanguages() ==
4494+ 13 Problemas de Impressao no Firefox Mozilla Firefox
4495+ 12 Problema al recompilar kernel con soporte smp (doble-nucleo) Ubuntu
4496+ 11 Continue playing after shutdown Ubuntu
4497+ 5 Installation failed Ubuntu
4498+ 4 Firefox loses focus and gets stuck Mozilla Firefox
4499+
4500+
4501+Question languages
4502+==================
4503
4504 The getQuestionLanguages() method returns the set of languages in which
4505-questions are written in Launchpad.
4506-
4507- >>> sorted([language.code
4508- ... for language in question_set.getQuestionLanguages()])
4509- [u'ar', u'en', u'es', u'pt_BR']
4510-
4511-
4512-== getActiveProjects() ==
4513-
4514-This method can be used to retrieve the projects that are the most
4515-actively using the Answer Tracker in the last 60 days. By active, we
4516-mean that the project is registered as officially using Answers and
4517-had some questions asked in the period. The projects are ordered
4518-by the number of questions asked during the period.
4519-
4520-Sample data should not contain any questions more recent than
4521-two months, so no projects are initially returned:
4522-
4523- >>> for project in question_set.getMostActiveProjects():
4524- ... print project.displayname
4525-
4526-Create recent questions on a number of projects.
4527-
4528- >>> from lp.answers.testing import (
4529- ... QuestionFactory)
4530- >>> from canonical.launchpad.interfaces import (
4531- ... IDistributionSet, ILaunchBag, IProductSet)
4532- >>> ubuntu = getUtility(IDistributionSet).getByName('ubuntu')
4533+questions are written in launchpad.
4534+
4535+ >>> print ', '.join(
4536+ ... sorted(language.code
4537+ ... for language in question_set.getQuestionLanguages()))
4538+ ar, en, es, pt_BR
4539+
4540+
4541+Active projects
4542+===============
4543+
4544+This method can be used to retrieve the projects that are the most actively
4545+using the Answer Tracker in the last 60 days. By active, we mean that the
4546+project is registered as officially using Answers and had some questions asked
4547+in the period. The projects are ordered by the number of questions asked
4548+during the period.
4549+
4550+Initially, no projects are returned.
4551+
4552+ >>> list(question_set.getMostActiveProjects())
4553+ []
4554+
4555+Then some recent questions are created on a number of projects.
4556+
4557+ >>> from lp.answers.testing import QuestionFactory
4558+ >>> from lp.registry.interfaces.distribution import IDistributionSet
4559+ >>> from lp.registry.interfaces.person import IPersonSet
4560+ >>> from lp.registry.interfaces.product import IProductSet
4561+
4562 >>> firefox = getUtility(IProductSet).getByName('firefox')
4563 >>> landscape = getUtility(IProductSet).getByName('landscape')
4564 >>> launchpad = getUtility(IProductSet).getByName('launchpad')
4565+ >>> no_priv = getUtility(IPersonSet).getByName('no-priv')
4566+ >>> ubuntu = getUtility(IDistributionSet).getByName('ubuntu')
4567
4568 >>> login('no-priv@canonical.com')
4569- >>> no_priv = getUtility(ILaunchBag).user
4570- >>> QuestionFactory.createManyByProject([
4571+ >>> QuestionFactory.createManyByProject((
4572 ... ('ubuntu', 3),
4573 ... ('firefox', 2),
4574- ... ('landscape', 1)])
4575+ ... ('landscape', 1),
4576+ ... ))
4577
4578-Create a question just before the time limit on Launchpad.
4579+A question is created just before the time limit on Launchpad.
4580
4581 >>> from datetime import datetime, timedelta
4582 >>> from pytz import UTC
4583@@ -191,9 +204,9 @@
4584 ... datecreated=datetime.now(UTC) - timedelta(days=61))
4585 >>> login(ANONYMOUS)
4586
4587-The method returns only projects which officially use the Answer
4588-Tracker. The order of the returned projects is based on the number of
4589-questions asked during the period.
4590+The method returns only projects which officially use the Answer Tracker. The
4591+order of the returned projects is based on the number of questions asked
4592+during the period.
4593
4594 >>> ubuntu.official_answers
4595 True
4596@@ -204,14 +217,13 @@
4597 >>> launchpad.official_answers
4598 True
4599
4600+ # Launchpad is not returned because the question was not asked in
4601+ # the last 60 days.
4602 >>> for project in question_set.getMostActiveProjects():
4603 ... print project.displayname
4604 Ubuntu
4605 Mozilla Firefox
4606
4607-(Launchpad is not returned because the question was not asked in
4608-the last 60 days.)
4609-
4610 The method accepts an optional limit parameter limiting the number of
4611 project returned:
4612
4613@@ -220,10 +232,11 @@
4614 Ubuntu
4615
4616
4617-== getOpenQuestionCountByPackages() ==
4618+Counting the open questions
4619+===========================
4620
4621-getOpenQuestionCountByPackages() allow you to get the count of open
4622-questions on a set of IDistributionSourcePackage packages.
4623+getOpenQuestionCountByPackages() allow you to get the count of open questions
4624+on a set of IDistributionSourcePackage packages.
4625
4626 >>> question_set.getOpenQuestionCountByPackages([])
4627 {}
4628@@ -246,12 +259,10 @@
4629 >>> closed_question.setStatus(
4630 ... closed_question.owner, QuestionStatus.SOLVED, 'no comment')
4631 <QuestionMessage at ...>
4632- >>> from canonical.launchpad.ftests import syncUpdate
4633- >>> syncUpdate(closed_question)
4634
4635 >>> from operator import itemgetter
4636- >>> packages = [
4637- ... ubuntu_evolution, ubuntu_pmount, debian_evolution, debian_pmount]
4638+ >>> packages = (
4639+ ... ubuntu_evolution, ubuntu_pmount, debian_evolution, debian_pmount)
4640 >>> package_counts = question_set.getOpenQuestionCountByPackages(packages)
4641 >>> len(packages)
4642 4
4643@@ -263,5 +274,3 @@
4644 pmount (Ubuntu): 4
4645 evolution (Debian): 3
4646 pmount (Debian): 0
4647-
4648-
4649
4650=== modified file 'lib/lp/answers/doc/questiontarget.txt'
4651--- lib/lp/answers/doc/questiontarget.txt 2009-03-24 12:43:49 +0000
4652+++ lib/lp/answers/doc/questiontarget.txt 2010-03-04 20:06:42 +0000
4653@@ -1,38 +1,43 @@
4654-= IQuestionTarget Interface =
4655-
4656-Launchpad includes an answer tracker. Questions are associated to
4657-objects implementing IQuestionTarget. This file documents that interface
4658-and can be used to validate implementation of this interface on a
4659-particular object. (This object is made available through the 'target'
4660-variable which is defined outside of this file, usually by a
4661-LaunchpadFunctionalTestCase. This instance shouldn't have any questions
4662-associated with it at the start of the test.)
4663-
4664+=========================
4665+IQuestionTarget interface
4666+=========================
4667+
4668+Launchpad includes an answer tracker. Questions are associated to objects
4669+implementing IQuestionTarget.
4670+
4671+ # An IQuestionTarget object is made available to this test via the
4672+ # 'target' variable by the test framework. It won't have any questions
4673+ # associated with it at the start of the test. This is done because the
4674+ # exact same test applies to all types of question targets: products,
4675+ # distributions, and distribution source packages.
4676+ #
4677 # Some parts of the IQuestionTarget interface are only accessible
4678 # to a registered user.
4679 >>> login('no-priv@canonical.com')
4680
4681 >>> from zope.component import getUtility
4682 >>> from zope.interface.verify import verifyObject
4683- >>> from canonical.launchpad.interfaces import IQuestionTarget
4684+ >>> from lp.answers.interfaces.questiontarget import IQuestionTarget
4685
4686 >>> verifyObject(IQuestionTarget, target)
4687 True
4688
4689-== newQuestion() ==
4690+
4691+New questions
4692+=============
4693
4694 Questions are always owned by a registered user.
4695
4696- >>> from canonical.launchpad.interfaces import IPersonSet
4697+ >>> from lp.registry.interfaces.person import IPersonSet
4698 >>> sample_person = getUtility(IPersonSet).getByEmail(
4699 ... 'test@canonical.com')
4700
4701-The newQuestion() method is used to create question that will be associated
4702-with the target. It takes as parameters the question's owner, title and
4703-description. It also takes an optional parameter 'datecreated' parameter
4704-which defaults to UTC_NOW.
4705+The newQuestion() method is used to create a question that will be associated
4706+with the target. It takes as parameters the question's owner, title and
4707+description. It also takes an optional parameter 'datecreated' which defaults
4708+to UTC_NOW.
4709
4710- # Let's define now to a know value.
4711+ # Initialize 'now' to a known value.
4712 >>> from datetime import datetime, timedelta
4713 >>> from pytz import UTC
4714 >>> now = datetime.now(UTC)
4715@@ -43,8 +48,8 @@
4716 New question
4717 >>> print question.description
4718 Question description
4719- >>> question.owner == sample_person
4720- True
4721+ >>> print question.owner.displayname
4722+ Sample Person
4723 >>> question.datecreated == now
4724 True
4725 >>> question.datelastquery == now
4726@@ -53,41 +58,44 @@
4727 The created question starts in the 'Open' status and should have the owner
4728 subscribed to the question.
4729
4730- >>> question.status.title
4731- 'Open'
4732-
4733- >>> sample_person in [s.person for s in question.subscriptions]
4734- True
4735-
4736-Question can be written in any languages supported in Launchpad. The
4737-language of the request is available in the 'language' attribute. By
4738-default, requests are assumed to be written in English:
4739+ >>> print question.status.title
4740+ Open
4741+
4742+ >>> for subscription in question.subscriptions:
4743+ ... print subscription.person.displayname
4744+ Sample Person
4745+
4746+Questions can be written in any languages supported in Launchpad. The
4747+language of the request is available in the 'language' attribute. By default,
4748+requests are assumed to be written in English.
4749
4750 >>> print question.language.code
4751 en
4752
4753-It is possible to create question in another language than English. One
4754-just need to pass the language in which the question is written in the
4755-language parameter.
4756+It is possible to create questions in another language than English, by
4757+passing in the language that the question is written in.
4758
4759- >>> from canonical.launchpad.interfaces import ILanguageSet
4760+ >>> from lp.services.worlddata.interfaces.language import ILanguageSet
4761 >>> french = getUtility(ILanguageSet)['fr']
4762- >>> question = target.newQuestion(sample_person, "De l'aide S.V.P.",
4763+ >>> question = target.newQuestion(
4764+ ... sample_person, "De l'aide S.V.P.",
4765 ... "Pouvez-vous m'aider?", language=french,
4766 ... datecreated=now + timedelta(seconds=30))
4767 >>> print question.language.code
4768 fr
4769
4770-Anonymous users cannot use newQuestion():
4771+Anonymous users cannot use newQuestion().
4772
4773 >>> login(ANONYMOUS)
4774- >>> question = target.newQuestion(sample_person, 'This will fail',
4775- ... 'Failed?')
4776+ >>> question = target.newQuestion(
4777+ ... sample_person, 'This will fail', 'Failed?')
4778 Traceback (most recent call last):
4779 ...
4780 Unauthorized...
4781
4782-== getQuestion() ==
4783+
4784+Retrieving questions
4785+====================
4786
4787 The getQuestion() method is used to retrieve a question by id for a
4788 particular target.
4789@@ -96,19 +104,19 @@
4790 True
4791
4792 If you pass in a non-existent id or a question for a different target, the
4793-method must return None.
4794-
4795- >>> target.getQuestion(2) is None
4796- True
4797- >>> target.getQuestion(12345) is None
4798- True
4799-
4800-== Creating some additional questions ==
4801-
4802-For the following methods, we will require some more questions. Create five
4803-new questions. Odd questions will be owned by foo_bar and even questions will be
4804-owned by sample_person.
4805-
4806+method returns None.
4807+
4808+ >>> print target.getQuestion(2)
4809+ None
4810+ >>> print target.getQuestion(12345)
4811+ None
4812+
4813+
4814+Searching for questions
4815+=======================
4816+
4817+ # Create new questions for the following tests. Odd questions will be
4818+ # owned by Foo Bar and even questions will be owned by Sample Person.
4819 >>> login('no-priv@canonical.com')
4820 >>> foo_bar = getUtility(IPersonSet).getByEmail('foo.bar@canonical.com')
4821 >>> questions = []
4822@@ -123,9 +131,8 @@
4823 ... owner, 'Question title%d' % num, description,
4824 ... datecreated=now+timedelta(minutes=num+1)))
4825
4826-For more variety, we will set the status of the last to INVALID and the
4827-fourth one to ANSWERED.
4828-
4829+ # For more variety, we will set the status of the last to INVALID and the
4830+ # fourth one to ANSWERED.
4831 >>> login('foo.bar@canonical.com')
4832 >>> foo_bar = getUtility(IPersonSet).getByEmail('foo.bar@canonical.com')
4833 >>> message = questions[-1].reject(
4834@@ -134,48 +141,44 @@
4835 ... sample_person, 'This is your answer.',
4836 ... datecreated=now+timedelta(hours=1))
4837
4838-Also add a reply from the owner on the first of these.
4839-
4840+ # Also add a reply from the owner on the first of these.
4841 >>> login('test@canonical.com')
4842 >>> message = questions[0].giveInfo(
4843 ... 'I think I forgot something.', datecreated=now+timedelta(hours=4))
4844
4845-And create another one that will also have the word 'new' in its
4846-description.
4847-
4848+ # Create another one that will also have the word 'new' in its
4849+ # description.
4850 >>> question = target.newQuestion(sample_person, 'Another question',
4851 ... 'Another new question that is actually very new.',
4852 ... datecreated=now+timedelta(hours=1))
4853 >>> login(ANONYMOUS)
4854
4855- # Flush those changes to the database.
4856- >>> from canonical.database.sqlbase import flush_database_updates
4857- >>> flush_database_updates()
4858-
4859-== searchQuestions() ==
4860-
4861 The searchQuestions() method is used to search for questions.
4862
4863-=== search_text ===
4864+
4865+Search text
4866+-----------
4867
4868 The search_text parameter will select the questions that contain the
4869-passed in text. (The standard text searching algorithm is used, see
4870-textsearching.txt.)
4871+passed in text. The standard text searching algorithm is used; see
4872+../../../canonical/launchpad/doct/textsearching.txt.
4873
4874 >>> for t in target.searchQuestions(search_text='new'):
4875 ... print t.title
4876 New question
4877 Another question
4878
4879-The results here are sorted by relevancy. (In the last questions, 'New'
4880-appeared in the description which makes it less relevant than when the
4881-word appears in the title.)
4882-
4883-=== status ===
4884-
4885-The searchQuestions() method can also filter questions by status:
4886-
4887- >>> from canonical.launchpad.interfaces import QuestionStatus
4888+The results are sorted by relevancy. In the last questions, 'New' appeared in
4889+the description which makes it less relevant than when the word appears in the
4890+title.
4891+
4892+
4893+Status
4894+------
4895+
4896+The searchQuestions() method can also filter questions by status.
4897+
4898+ >>> from lp.answers.interfaces.questionenums import QuestionStatus
4899 >>> for t in target.searchQuestions(status=QuestionStatus.OPEN):
4900 ... print t.title
4901 Another question
4902@@ -192,9 +195,9 @@
4903 ... print t.title
4904 Question title4
4905
4906-You can also pass in a list of status, and you can also use the
4907-search_text and status parameters at the same time. This will search
4908-OPEN and INVALID questions with the word 'index'
4909+You can pass in a list of statuses, and you can also use the search_text and
4910+status parameters at the same time. This will search OPEN and INVALID
4911+questions with the word 'index'.
4912
4913 >>> for t in target.searchQuestions(search_text='request index',
4914 ... status=(QuestionStatus.OPEN, QuestionStatus.INVALID)):
4915@@ -204,29 +207,30 @@
4916 Question title1
4917 Question title0
4918
4919-=== sort ===
4920-
4921-You can control the sort order by passing one of the constants defined
4922-in QuestionSort. (We already saw the NEWEST_FIRST and RELEVANCY sort
4923-order).
4924-
4925-You can sort also from oldest to newest using the OLDEST_FIRST constant:
4926-
4927- >>> from canonical.launchpad.interfaces import QuestionSort
4928-
4929+
4930+Sorting
4931+-------
4932+
4933+You can control the sort order by passing one of the constants defined in
4934+QuestionSort. Previously, we saw the NEWEST_FIRST and RELEVANCY sort order.
4935+
4936+You can sort also from oldest to newest using the OLDEST_FIRST constant.
4937+
4938+ >>> from lp.answers.interfaces.questionenums import QuestionSort
4939 >>> for t in target.searchQuestions(search_text='new',
4940- ... sort=QuestionSort.OLDEST_FIRST):
4941+ ... sort=QuestionSort.OLDEST_FIRST):
4942 ... print t.title
4943 New question
4944 Another question
4945
4946-You can sort by status, (the status order is OPEN, NEEDSINFO, ANSWERED,
4947-SOLVED, EXPIRED, INVALID), this also sorts from newest to oldest as a
4948-secondary key.
4949+You can sort by status (the status order is OPEN, NEEDSINFO, ANSWERED, SOLVED,
4950+EXPIRED, INVALID). This also sorts from newest to oldest as a secondary key.
4951+Here we use status=None to search for all statuses; by default INVALID and
4952+EXPIRED questions are excluded.
4953
4954 >>> for t in target.searchQuestions(search_text='request index',
4955- ... status=None,
4956- ... sort=QuestionSort.STATUS):
4957+ ... status=None,
4958+ ... sort=QuestionSort.STATUS):
4959 ... print t.status.title, t.title
4960 Open Question title2
4961 Open Question title1
4962@@ -234,12 +238,11 @@
4963 Answered Question title3
4964 Invalid Question title4
4965
4966-(In the previous example, we used status=None to search for all
4967-statuses, by default INVALID and EXPIRED questions are excluded.)
4968-
4969 If there is no search_text and the requested sort order is RELEVANCY,
4970 the questions will be sorted NEWEST_FIRST.
4971
4972+ # 'Question title4' is not shown in this case because it has INVALID as
4973+ # its status.
4974 >>> for t in target.searchQuestions(sort=QuestionSort.RELEVANCY):
4975 ... print t.title
4976 Another question
4977@@ -250,14 +253,14 @@
4978 De l'aide S.V.P.
4979 New question
4980
4981-('Question title4' is not shown in this case because it has INVALID as
4982-its status.)
4983-
4984 The RECENT_OWNER_ACTIVITY sort order sorts first questions which recently
4985-received a new message by their owner. (It effectively sorts
4986-descending on the datelastquery attribute.)
4987+received a new message by their owner. It effectively sorts descending on the
4988+datelastquery attribute.
4989
4990- >>> for t in target.searchQuestions(sort=QuestionSort.RECENT_OWNER_ACTIVITY):
4991+ # Question title0 sorts first because it has a message from its owner
4992+ # after the others were created.
4993+ >>> for t in target.searchQuestions(
4994+ ... sort=QuestionSort.RECENT_OWNER_ACTIVITY):
4995 ... print t.title
4996 Question title0
4997 Another question
4998@@ -267,20 +270,20 @@
4999 De l'aide S.V.P.
5000 New question
The diff has been truncated for viewing.