launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #05826
[Merge] lp:~abentley/launchpad/remove-hot-bugs into lp:launchpad
Aaron Bentley has proposed merging lp:~abentley/launchpad/remove-hot-bugs into lp:launchpad.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
For more details, see:
https://code.launchpad.net/~abentley/launchpad/remove-hot-bugs/+merge/84503
= Summary =
Fix bug #887587: hot bugs view does not show the new bug listing
== Proposed fix ==
Default to +bugs view and port nicer aspecects of +bugs-index view to +bugs.
Screenshot: http://people.canonical.com/~abentley/bugs-as-home.png
== Pre-implementation notes ==
Discussed with mrevell
== Implementation details ==
Added "Add Question" to +bugs.
Changed the bug supervisor and security contact style to the style from +bugs-index.
Moved "Configure Bugtracker" link to the same box as the bug supervisor and security contact.
Moved the configuration of default pages to lib/lp/bugs/browser/configure.zcml and changed the default to +bugs.
Changed +bugs-index tests to use the +bugs-index url.
== Tests ==
bin/test -t xx-bugtarget-bugs-page.txt -t xx-distribution-bugs-page.txt -t xx-distrorelease-bugs-page.txt -t xx-front-page-info.txt -t xx-product-bugs-page.txt
== Demo and Q/A ==
Go to https://bugs.qastaging.launchpad.net/nova. It should be the same as https://bugs.qastaging.launchpad.net/nova/+bugs and the portlets should look like the screenshot.
= Launchpad lint =
Checking for conflicts and issues in changed files.
Linting changed files:
lib/lp/bugs/stories/bugs/xx-distrorelease-bugs-page.txt
lib/lp/registry/browser/configure.zcml
lib/lp/bugs/stories/bugs/xx-bugtarget-bugs-page.txt
lib/lp/bugs/stories/bugs/xx-front-page-info.txt
lib/lp/bugs/stories/bugs/xx-distribution-bugs-page.txt
lib/lp/bugs/browser/configure.zcml
lib/lp/bugs/templates/buglisting-default.pt
lib/lp/bugs/browser/bugtask.py
lib/lp/bugs/stories/bugs/xx-product-bugs-page.txt
./lib/lp/bugs/stories/bugs/xx-distrorelease-bugs-page.txt
1: narrative uses a moin header.
7: source exceeds 78 characters.
30: narrative uses a moin header.
50: narrative uses a moin header.
./lib/lp/bugs/stories/bugs/xx-bugtarget-bugs-page.txt
1: narrative uses a moin header.
--
https://code.launchpad.net/~abentley/launchpad/remove-hot-bugs/+merge/84503
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~abentley/launchpad/remove-hot-bugs into lp:launchpad.
=== modified file 'lib/lp/bugs/browser/bugtask.py'
--- lib/lp/bugs/browser/bugtask.py 2011-12-04 23:02:05 +0000
+++ lib/lp/bugs/browser/bugtask.py 2011-12-05 17:14:39 +0000
@@ -2460,8 +2460,6 @@
bug_target = self.context.context
if IDistribution.providedBy(bug_target):
return (
- 'bugsupervisor',
- 'securitycontact',
'cve',
)
elif IDistroSeries.providedBy(bug_target):
@@ -2471,8 +2469,6 @@
)
elif IProduct.providedBy(bug_target):
return (
- 'bugsupervisor',
- 'securitycontact',
'cve',
)
elif IProductSeries.providedBy(bug_target):
@@ -2676,6 +2672,14 @@
cache.objects.update(_getBatchInfo(batch_navigator.batch))
@property
+ def show_config_portlet(self):
+ if (IDistribution.providedBy(self.context) or
+ IProduct.providedBy(self.context)):
+ return True
+ else:
+ return False
+
+ @property
def columns_to_show(self):
"""Returns a sequence of column names to be shown in the listing."""
upstream_context = self._upstreamContext()
=== modified file 'lib/lp/bugs/browser/configure.zcml'
--- lib/lp/bugs/browser/configure.zcml 2011-12-03 16:42:51 +0000
+++ lib/lp/bugs/browser/configure.zcml 2011-12-05 17:14:39 +0000
@@ -1198,4 +1198,36 @@
permission="zope.Public" />
</facet>
+ <browser:defaultView
+ for="lp.registry.interfaces.distribution.IDistribution"
+ layer="lp.bugs.publisher.BugsLayer"
+ name="+bugs"/>
+ <browser:defaultView
+ for="lp.registry.interfaces.distroseries.IDistroSeries"
+ layer="lp.bugs.publisher.BugsLayer"
+ name="+bugs"/>
+ <browser:defaultView
+ for="lp.registry.interfaces.distributionsourcepackage.IDistributionSourcePackage"
+ layer="lp.bugs.publisher.BugsLayer"
+ name="+bugs"/>
+ <browser:defaultView
+ for="lp.registry.interfaces.person.IPerson"
+ layer="lp.bugs.publisher.BugsLayer"
+ name="+bugs"/>
+ <browser:defaultView
+ for="lp.registry.interfaces.product.IProduct"
+ layer="lp.bugs.publisher.BugsLayer"
+ name="+bugs"/>
+ <browser:defaultView
+ for="lp.registry.interfaces.productseries.IProductSeries"
+ layer="lp.bugs.publisher.BugsLayer"
+ name="+bugs"/>
+ <browser:defaultView
+ for="lp.registry.interfaces.projectgroup.IProjectGroup"
+ name="+bugs"
+ layer="lp.bugs.publisher.BugsLayer"/>
+ <browser:defaultView
+ for="lp.registry.interfaces.sourcepackage.ISourcePackage"
+ layer="lp.bugs.publisher.BugsLayer"
+ name="+bugs"/>
</configure>
=== modified file 'lib/lp/bugs/stories/bugs/xx-bugtarget-bugs-page.txt'
--- lib/lp/bugs/stories/bugs/xx-bugtarget-bugs-page.txt 2010-07-08 15:55:05 +0000
+++ lib/lp/bugs/stories/bugs/xx-bugtarget-bugs-page.txt 2011-12-05 17:14:39 +0000
@@ -4,7 +4,7 @@
page to embed all its action links in the main content area, rather
than in an 'Actions' portlet.
- >>> browser.open('http://bugs.launchpad.dev/ubuntu')
+ >>> browser.open('http://bugs.launchpad.dev/ubuntu/+bugs-index')
>>> print find_portlet(browser.contents, 'Actions')
None
=== modified file 'lib/lp/bugs/stories/bugs/xx-distribution-bugs-page.txt'
--- lib/lp/bugs/stories/bugs/xx-distribution-bugs-page.txt 2011-11-25 16:51:29 +0000
+++ lib/lp/bugs/stories/bugs/xx-distribution-bugs-page.txt 2011-12-05 17:14:39 +0000
@@ -4,7 +4,7 @@
The front page for a distribution on the bugs domain presents some basic
information the bugs in it. It doesn't display the list of bugs.
- >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu')
+ >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu/+bugs-index')
>>> anon_browser.title
'Bugs : Ubuntu'
>>> find_tag_by_id(anon_browser.contents, 'buglisting') is None
@@ -20,7 +20,7 @@
It also has a link to subscribe to bug mail.
- >>> user_browser.open('http://bugs.launchpad.dev/ubuntu')
+ >>> user_browser.open('http://bugs.launchpad.dev/ubuntu/+bugs-index')
>>> user_browser.getLink('Subscribe to bug mail').click()
>>> print user_browser.url
http://bugs.launchpad.dev/ubuntu/+subscribe
@@ -32,7 +32,7 @@
The Bugs frontpage for a distribution includes the number of bugs that are
fixed in some other context.
- >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu')
+ >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu/+bugs-index')
>>> fixed_elsewhere_link = anon_browser.getLink('Bugs fixed elsewhere')
The link takes you to the list of the bugs fixed elsewhere.
@@ -52,7 +52,7 @@
It also displays the number of open bugs associated with a CVE.
- >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu')
+ >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu/+bugs-index')
>>> cve_bugs_link = anon_browser.getLink('Open CVE bugs')
The link takes you to the list of bugs with CVEs linked to them.
@@ -76,7 +76,7 @@
The bugs page displays the number of Incomplete, unattended bugs that
can expire when the project has enabled bug expiration.
- >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu')
+ >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu/+bugs-index')
>>> expirable_bugs_link = anon_browser.getLink(
... 'Incomplete bugs')
@@ -90,7 +90,7 @@
Debian does not use Launchpad to track bugs; the anonymous user cannot
see any link reporting that bugs can expire.
- >>> anon_browser.open('http://bugs.launchpad.dev/debian')
+ >>> anon_browser.open('http://bugs.launchpad.dev/debian/+bugs-index')
>>> expirable_bugs_link = anon_browser.getLink('Incomplete bugs')
Traceback (most recent call last):
...
=== modified file 'lib/lp/bugs/stories/bugs/xx-distrorelease-bugs-page.txt'
--- lib/lp/bugs/stories/bugs/xx-distrorelease-bugs-page.txt 2011-11-25 16:51:29 +0000
+++ lib/lp/bugs/stories/bugs/xx-distrorelease-bugs-page.txt 2011-12-05 17:14:39 +0000
@@ -1,10 +1,10 @@
== The Distribution Release Bugs Page ==
-The front page for a distribution release on the bugs domain presents
+The +bugs-index page for a distribution release on the bugs domain presents
some basic information the bugs in it. It doesn't display the list of
bugs.
- >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu/warty')
+ >>> anon_browser.open('http://bugs.launchpad.dev/ubuntu/warty/+bugs-index')
>>> anon_browser.title
'Bugs : Warty'
=== modified file 'lib/lp/bugs/stories/bugs/xx-front-page-info.txt'
--- lib/lp/bugs/stories/bugs/xx-front-page-info.txt 2011-03-23 16:28:51 +0000
+++ lib/lp/bugs/stories/bugs/xx-front-page-info.txt 2011-12-05 17:14:39 +0000
@@ -1,4 +1,4 @@
-A bugs home page for a project shows different information, depending
+A +bugs-index page for a project shows different information, depending
on whether or not the project uses malone for bug tracking.
By default, projects are created without using any bugtracker, malone
@@ -13,10 +13,11 @@
... name='test-project', title='Simple Test Project', owner=foobar)
>>> logout()
-The bugs home page for the project states that the project does
+The +bugs-index page for the project states that the project does
not use Launchpad for bug tracking.
- >>> anon_browser.open('http://bugs.launchpad.dev/test-project')
+ >>> anon_browser.open(
+ ... 'http://bugs.launchpad.dev/test-project/+bugs-index')
>>> uses_malone_p = find_tag_by_id(anon_browser.contents, 'no-malone')
>>> print extract_text(uses_malone_p)
Test-project must be configured in order for Launchpad to forward bugs to
@@ -28,13 +29,14 @@
>>> find_tag_by_id(anon_browser.contents, 'no-malone-edit') is None
True
- >>> admin_browser.open('http://bugs.launchpad.dev/test-project')
+ >>> admin_browser.open(
+ ... 'http://bugs.launchpad.dev/test-project/+bugs-index')
>>> enable_tracker = find_tag_by_id(
... admin_browser.contents, 'no-malone-edit')
>>> print extract_text(enable_tracker)
Configure bug tracker
-The bugs home page for a project using Launchpad for bug tracking
+The +bugs-index page for a project using Launchpad for bug tracking
shows controls for setting bug supervisor and states that no
bugs have been filed.
@@ -44,7 +46,7 @@
... official_malone=True)
>>> logout()
- >>> anon_browser.open('http://bugs.launchpad.dev/uses-malone')
+ >>> anon_browser.open('http://bugs.launchpad.dev/uses-malone/+bugs-index')
>>> bug_supervisor = find_tag_by_id(
... anon_browser.contents, 'bug-supervisor')
>>> print extract_text(bug_supervisor)
@@ -68,7 +70,7 @@
>>> login('foo.bar@xxxxxxxxxxxxx')
>>> bug = factory.makeBug(product=uses_malone)
>>> logout()
- >>> anon_browser.open('http://bugs.launchpad.dev/uses-malone')
+ >>> anon_browser.open('http://bugs.launchpad.dev/uses-malone/+bugs-index')
>>> content = find_main_content(anon_browser.contents)
>>> print extract_text(find_tag_by_id(content, 'simple-bug-search'))
by importance
@@ -94,7 +96,7 @@
... BugTaskStatus.FIXRELEASED, user=bug.owner)
>>> logout()
- >>> anon_browser.open('http://bugs.launchpad.dev/uses-malone')
+ >>> anon_browser.open('http://bugs.launchpad.dev/uses-malone/+bugs-index')
>>> content = find_main_content(anon_browser.contents)
>>> print find_tag_by_id(content, 'hot-bugs')
None
@@ -112,14 +114,15 @@
Advanced search
Projects that use an external bug tracker will list the tracker on a
-bugs home page.
++bugs-index page.
>>> login('foo.bar@xxxxxxxxxxxxx')
>>> some_tracker = factory.makeBugTracker(
... base_url='http://tracker.example.com/')
>>> test_project.bugtracker = some_tracker
>>> logout()
- >>> anon_browser.open('http://bugs.launchpad.dev/test-project')
+ >>> anon_browser.open(
+ ... 'http://bugs.launchpad.dev/test-project/+bugs-index')
>>> tracker_text = find_tag_by_id(anon_browser.contents, 'bugtracker')
>>> print extract_text(tracker_text)
Bugs are tracked in tracker.example.com/.
@@ -134,7 +137,8 @@
... sourcepackagename='test-project-package',
... in_ubuntu=True)
>>> logout()
- >>> anon_browser.open('http://bugs.launchpad.dev/test-project')
+ >>> anon_browser.open(
+ ... 'http://bugs.launchpad.dev/test-project/+bugs-index')
>>> print extract_text(
... find_tag_by_id(anon_browser.contents, 'also-in-ubuntu'))
Ubuntu also tracks bugs for packages derived from this project:
=== modified file 'lib/lp/bugs/stories/bugs/xx-product-bugs-page.txt'
--- lib/lp/bugs/stories/bugs/xx-product-bugs-page.txt 2011-11-24 23:22:16 +0000
+++ lib/lp/bugs/stories/bugs/xx-product-bugs-page.txt 2011-12-05 17:14:39 +0000
@@ -1,10 +1,10 @@
The Product Bugs Page
---------------------
-The front page for a product on the bugs domain presents some basic
+The +bugs-index page for a product on the bugs domain presents some basic
information the bugs in it. It doesn't display the list of bugs.
- >>> anon_browser.open('http://bugs.launchpad.dev/firefox')
+ >>> anon_browser.open('http://bugs.launchpad.dev/firefox/+bugs-index')
>>> anon_browser.title
'Bugs : Mozilla Firefox'
>>> find_tag_by_id(anon_browser.contents, 'buglisting') is None
@@ -21,7 +21,7 @@
It also has a link to subscribe to bug mail (which is implemented in
JavaScript so it doesn't actually go anywhere).
- >>> user_browser.open('http://bugs.launchpad.dev/firefox')
+ >>> user_browser.open('http://bugs.launchpad.dev/firefox/+bugs-index')
>>> user_browser.getLink('Subscribe to bug mail').click()
>>> user_browser.url
'http://bugs.launchpad.dev/firefox/+subscribe'
@@ -31,10 +31,10 @@
It also displays the number of open bugs associated with a CVE.
- >>> anon_browser.open('http://bugs.launchpad.dev/evolution')
+ >>> anon_browser.open('http://bugs.launchpad.dev/evolution/+bugs-index')
>>> cve_bugs_link = anon_browser.getLink('Open CVE bugs')
- >>> anon_browser.open('http://bugs.launchpad.dev/firefox')
+ >>> anon_browser.open('http://bugs.launchpad.dev/firefox/+bugs-index')
>>> cve_bugs_link = anon_browser.getLink('Open CVE bugs')
The link takes you to the list of bugs with CVEs linked to them.
@@ -163,7 +163,7 @@
For each bug we have the number, title, status, importance and the time
since the last update.
- >>> anon_browser.open('http://bugs.launchpad.dev/firefox')
+ >>> anon_browser.open('http://bugs.launchpad.dev/firefox/+bugs-index')
>>> print extract_text(
... find_tag_by_id(anon_browser.contents, 'hot-bugs'))
Summary Status Importance Last changed
@@ -213,6 +213,6 @@
Jokosher does not have more than 10 bugs and does not have a link
to more hot bugs.
- >>> anon_browser.open('http://bugs.launchpad.dev/jokosher')
+ >>> anon_browser.open('http://bugs.launchpad.dev/jokosher/+bugs-index')
>>> find_tag_by_id(anon_browser.contents, 'more-hot-bugs') is None
True
=== modified file 'lib/lp/bugs/templates/buglisting-default.pt'
--- lib/lp/bugs/templates/buglisting-default.pt 2011-12-01 14:36:35 +0000
+++ lib/lp/bugs/templates/buglisting-default.pt 2011-12-05 17:14:39 +0000
@@ -100,14 +100,69 @@
<tal:side metal:fill-slot="side">
<div id="bug-portlets" tal:condition="view/should_show_bug_information">
- <div id="involvement" class="portlet involvement">
- <ul>
+ <div id="involvement" class="portlet">
+ <ul class="involvement">
<li style="border: 0">
<a href="+filebug" class="menu-link-filebug sprite bugs">
Report a bug
</a>
</li>
+ <li tal:define="addquestion_url view/addquestion_url"
+ tal:condition="addquestion_url">
+ <a tal:attributes="href view/addquestion_url"
+ class="menu-link-filebug sprite answers">
+ Ask a question
+ </a>
+ </li>
</ul>
+
+ </div>
+ <div class="portlet" tal:condition="view/show_config_portlet">
+ <tal:bugtracker
+ define="link context/menu:bugs/configure_bugtracker|nothing"
+ condition="link">
+ <ul tal:condition="link/enabled"
+ style="padding-top: 1em">
+ <li>
+ <a tal:replace="structure link/fmt:link" />
+ </li>
+ </ul>
+ </tal:bugtracker>
+ <dl tal:define="bug_supervisor context/bug_supervisor"
+ id="bug-supervisor">
+ <dt>Bug supervisor:</dt>
+ <dd>
+ <tal:none condition="not:bug_supervisor">None set</tal:none>
+ <a tal:condition="bug_supervisor"
+ tal:replace="structure bug_supervisor/fmt:link">Bob Johnson</a>
+ <tal:edit-bug-supervisor
+ condition="context/menu:bugs/bugsupervisor|nothing">
+ <a tal:define="link context/menu:bugs/bugsupervisor"
+ tal:condition="link/enabled"
+ tal:attributes="href link/url; title link/text">
+ <img tal:attributes="alt link/text" src="/@@/edit" />
+ </a>
+ </tal:edit-bug-supervisor>
+ </dd>
+ </dl>
+ <dl tal:define="securitycontact context/security_contact">
+ <dt id="bug-security">Security contact:</dt>
+ <dd>
+ <tal:none condition="not:securitycontact">None set</tal:none>
+ <a tal:condition="securitycontact"
+ tal:replace="structure securitycontact/fmt:link">
+ Billy Anderson
+ </a>
+ <tal:edit-securitycontact
+ condition="context/menu:bugs/securitycontact|nothing">
+ <a tal:define="link context/menu:bugs/securitycontact"
+ tal:condition="link/enabled"
+ tal:attributes="href link/url; title link/text">
+ <img tal:attributes="alt link/text" src="/@@/edit" />
+ </a>
+ </tal:edit-securitycontact>
+ </dd>
+ </dl>
</div>
<tal:menu replace="structure view/@@+related-pages" />
<tal:do_not_show_portlets_advanced_form
=== modified file 'lib/lp/registry/browser/configure.zcml'
--- lib/lp/registry/browser/configure.zcml 2011-11-27 01:31:13 +0000
+++ lib/lp/registry/browser/configure.zcml 2011-12-05 17:14:39 +0000
@@ -71,10 +71,6 @@
<browser:defaultView
for="lp.registry.interfaces.distroseries.IDistroSeries"
name="+index"/>
- <browser:defaultView
- for="lp.registry.interfaces.distroseries.IDistroSeries"
- layer="lp.bugs.publisher.BugsLayer"
- name="+bugs-index"/>
<browser:page
for="lp.registry.interfaces.distroseries.IDistroSeries"
name="+macros"
@@ -329,10 +325,6 @@
name="+index"/>
<browser:defaultView
for="lp.registry.interfaces.projectgroup.IProjectGroup"
- name="+bugs"
- layer="lp.bugs.publisher.BugsLayer"/>
- <browser:defaultView
- for="lp.registry.interfaces.projectgroup.IProjectGroup"
name="+specs"
layer="lp.blueprints.publisher.BlueprintsLayer"/>
<browser:defaultView
@@ -456,10 +448,6 @@
for="lp.registry.interfaces.distributionsourcepackage.IDistributionSourcePackage"
layer="lp.answers.publisher.AnswersLayer"
name="+questions"/>
- <browser:defaultView
- for="lp.registry.interfaces.distributionsourcepackage.IDistributionSourcePackage"
- layer="lp.bugs.publisher.BugsLayer"
- name="+bugs"/>
<browser:url
for="lp.registry.interfaces.distributionsourcepackage.IDistributionSourcePackage"
path_expression="string:+source/${name}"
@@ -787,10 +775,6 @@
for="lp.registry.interfaces.person.IPerson"
layer="lp.blueprints.publisher.BlueprintsLayer"
name="+specs"/>
- <browser:defaultView
- for="lp.registry.interfaces.person.IPerson"
- layer="lp.bugs.publisher.BugsLayer"
- name="+bugs"/>
<adapter
factory="lp.registry.browser.person.PersonXHTMLRepresentation"
name="lazr.restful.EntryResource" />
@@ -1377,10 +1361,6 @@
for="lp.registry.interfaces.product.IProduct"
layer="lp.answers.publisher.AnswersLayer"
name="+questions"/>
- <browser:defaultView
- for="lp.registry.interfaces.product.IProduct"
- layer="lp.bugs.publisher.BugsLayer"
- name="+bugs-index"/>
<browser:navigation
module="lp.registry.browser.product"
classes="
@@ -1646,10 +1626,6 @@
for="lp.registry.interfaces.productseries.IProductSeries"
name="+specs"
layer="lp.blueprints.publisher.BlueprintsLayer"/>
- <browser:defaultView
- for="lp.registry.interfaces.productseries.IProductSeries"
- layer="lp.bugs.publisher.BugsLayer"
- name="+bugs-index"/>
<browser:page
name="+get-involved"
for="lp.registry.interfaces.productseries.IProductSeries"
@@ -1784,10 +1760,6 @@
layer="lp.blueprints.publisher.BlueprintsLayer"/>
<browser:defaultView
for="lp.registry.interfaces.distribution.IDistribution"
- layer="lp.bugs.publisher.BugsLayer"
- name="+bugs-index"/>
- <browser:defaultView
- for="lp.registry.interfaces.distribution.IDistribution"
layer="lp.answers.publisher.AnswersLayer"
name="+questions"/>
<browser:navigation
@@ -1993,10 +1965,6 @@
<browser:defaultView
for="lp.registry.interfaces.sourcepackage.ISourcePackage"
name="+index"/>
- <browser:defaultView
- for="lp.registry.interfaces.sourcepackage.ISourcePackage"
- layer="lp.bugs.publisher.BugsLayer"
- name="+bugs"/>
<browser:navigation
module="lp.registry.browser.sourcepackage"
classes="