launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #10327
[Merge] lp:~stevenk/launchpad/no-implicit-maintainer-sub into lp:launchpad
Steve Kowalik has proposed merging lp:~stevenk/launchpad/no-implicit-maintainer-sub into lp:launchpad.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
For more details, see:
https://code.launchpad.net/~stevenk/launchpad/no-implicit-maintainer-sub/+merge/116991
No longer implicitly notify the maintainer for bugs.
This required a lot of test changes, and I flat out removed tests that no longer made sense.
--
https://code.launchpad.net/~stevenk/launchpad/no-implicit-maintainer-sub/+merge/116991
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~stevenk/launchpad/no-implicit-maintainer-sub into lp:launchpad.
=== modified file 'lib/lp/bugs/browser/tests/bugtarget-filebug-views.txt'
--- lib/lp/bugs/browser/tests/bugtarget-filebug-views.txt 2012-07-19 04:40:03 +0000
+++ lib/lp/bugs/browser/tests/bugtarget-filebug-views.txt 2012-07-27 01:21:32 +0000
@@ -458,7 +458,6 @@
>>> for subscriber in filebug_view.added_bug.getIndirectSubscribers():
... print subscriber.displayname
Foo Bar
- Ubuntu Team
Subscriptions
=== modified file 'lib/lp/bugs/configure.zcml'
--- lib/lp/bugs/configure.zcml 2012-07-20 15:53:52 +0000
+++ lib/lp/bugs/configure.zcml 2012-07-27 01:21:32 +0000
@@ -666,7 +666,6 @@
permission="launchpad.View"
attributes="
all_assignees
- all_pillar_owners_without_bug_supervisors
also_notified_subscribers
direct_subscribers
direct_subscribers_at_all_levels
=== modified file 'lib/lp/bugs/doc/bugnotification-sending.txt'
--- lib/lp/bugs/doc/bugnotification-sending.txt 2012-07-19 03:18:37 +0000
+++ lib/lp/bugs/doc/bugnotification-sending.txt 2012-07-27 01:21:32 +0000
@@ -86,15 +86,6 @@
<BLANKLINE>
...
----------------------------------------------------------------------
- To: support@xxxxxxxxxx
- From: Sample Person <1@xxxxxxxxxxxxxxxxxx>
- Subject: [Bug 1] subject
- X-Launchpad-Message-Rationale: Registrant (Ubuntu) @ubuntu-team
- <BLANKLINE>
- a comment.
- <BLANKLINE>
- ...
- ----------------------------------------------------------------------
To: test@xxxxxxxxxxxxx
From: Sample Person <1@xxxxxxxxxxxxxxxxxx>
Subject: [Bug 1] subject
@@ -159,11 +150,9 @@
To: foo.bar@xxxxxxxxxxxxx
...
To: mark@xxxxxxxxxxx
- ...
- To: support@xxxxxxxxxx
From: Sample Person <1@xxxxxxxxxxxxxxxxxx>
Subject: Re: [Bug 1] subject
- X-Launchpad-Message-Rationale: Registrant (Ubuntu) @ubuntu-team
+ X-Launchpad-Message-Rationale: Assignee
<BLANKLINE>
a new comment.
<BLANKLINE>
@@ -199,11 +188,9 @@
To: foo.bar@xxxxxxxxxxxxx
...
To: mark@xxxxxxxxxxx
- ...
- To: support@xxxxxxxxxx
From: Sample Person <1@xxxxxxxxxxxxxxxxxx>
Subject: [Bug 1] Re: Firefox does not support SVG
- X-Launchpad-Message-Rationale: Registrant (Ubuntu) @ubuntu-team
+ X-Launchpad-Message-Rationale: Assignee
<BLANKLINE>
** Summary changed:
- Old summary
@@ -247,11 +234,9 @@
To: foo.bar@xxxxxxxxxxxxx
...
To: mark@xxxxxxxxxxx
- ...
- To: support@xxxxxxxxxx
From: Sample Person <1@xxxxxxxxxxxxxxxxxx>
Subject: [Bug 1] Re: Firefox does not support SVG
- X-Launchpad-Message-Rationale: Registrant (Ubuntu) @ubuntu-team
+ X-Launchpad-Message-Rationale: Assignee
<BLANKLINE>
a new comment.
<BLANKLINE>
@@ -341,7 +326,6 @@
foo.bar@xxxxxxxxxxxxx
mark@xxxxxxxxxxx
owner@xxxxxxxxxxx
- support@xxxxxxxxxx
test@xxxxxxxxxxxxx
>>> flush_notifications()
@@ -383,15 +367,6 @@
... get_email_notifications(notifications)):
... for message in messages:
... print_notification(message)
- To: support@xxxxxxxxxx
- From: Sample Person <16@xxxxxxxxxxxxxxxxxx>
- Subject: [Bug 16] subject
- X-Launchpad-Message-Rationale: Registrant (Ubuntu) @ubuntu-team
- <BLANKLINE>
- *** This bug is a duplicate of bug 1 ***
- http://bugs.launchpad.dev/bugs/1
- ...
- ----------------------------------------------------------------------
To: test@xxxxxxxxxxxxx
From: Sample Person <16@xxxxxxxxxxxxxxxxxx>
Subject: [Bug 16] subject
@@ -528,8 +503,6 @@
0
>>> print err
DEBUG ...
- INFO Notifying support@xxxxxxxxxx about bug 2.
- ...
INFO Notifying test@xxxxxxxxxxxxx about bug 2.
...
From: Sample Person <...@bugs.launchpad.net>
@@ -554,8 +527,6 @@
...
INFO Notifying owner@xxxxxxxxxxx about bug 1.
...
- INFO Notifying support@xxxxxxxxxx about bug 1.
- ...
INFO Notifying test@xxxxxxxxxxxxx about bug 1.
...
INFO Notifying foo.bar@xxxxxxxxxxxxx about bug 1.
@@ -585,8 +556,6 @@
...
INFO Notifying owner@xxxxxxxxxxx about bug 1.
...
- INFO Notifying support@xxxxxxxxxx about bug 1.
- ...
INFO Notifying test@xxxxxxxxxxxxx about bug 1.
...
@@ -1157,12 +1126,6 @@
Addressless Team, which is subscribed to the bug report.
...
----------------------------------------------------------------------
- To: support@xxxxxxxxxx
- ...
- You received this bug notification because you are a member of Ubuntu
- Team, which is the registrant for Ubuntu.
- ...
- ----------------------------------------------------------------------
To: test@xxxxxxxxxxxxx
...
You received this bug notification because you are subscribed to the bug
@@ -1221,12 +1184,6 @@
Addressless Team, which is subscribed to the bug report.
...
----------------------------------------------------------------------
- To: support@xxxxxxxxxx
- ...
- You received this bug notification because you are a member of Ubuntu
- Team, which is the registrant for Ubuntu.
- ...
- ----------------------------------------------------------------------
To: test@xxxxxxxxxxxxx
...
You received this bug notification because you are subscribed to the bug
@@ -1274,12 +1231,6 @@
Addressless Team, which is subscribed to the bug report.
...
----------------------------------------------------------------------
- To: support@xxxxxxxxxx
- ...
- You received this bug notification because you are a member of Ubuntu
- Team, which is the registrant for Ubuntu.
- ...
- ----------------------------------------------------------------------
To: test@xxxxxxxxxxxxx
...
You received this bug notification because you are subscribed to the bug
@@ -1338,12 +1289,6 @@
Addressless Team, which is subscribed to the bug report.
...
----------------------------------------------------------------------
- To: support@xxxxxxxxxx
- ...
- You received this bug notification because you are a member of Ubuntu
- Team, which is the registrant for Ubuntu.
- ...
- ----------------------------------------------------------------------
To: test@xxxxxxxxxxxxx
...
You received this bug notification because you are subscribed to the bug
@@ -1394,12 +1339,6 @@
http://bugs.launchpad.dev/bugs/1
...
----------------------------------------------------------------------
- To: support@xxxxxxxxxx
- ...
- You received this bug notification because you are a member of Ubuntu
- Team, which is the registrant for Ubuntu.
- ...
- ----------------------------------------------------------------------
To: test@xxxxxxxxxxxxx
...
You received this bug notification because you are subscribed to the bug
@@ -1460,12 +1399,6 @@
Addressless Team, which is subscribed to the bug report.
...
----------------------------------------------------------------------
- To: support@xxxxxxxxxx
- ...
- You received this bug notification because you are a member of Ubuntu
- Team, which is the registrant for Ubuntu.
- ...
- ----------------------------------------------------------------------
To: test@xxxxxxxxxxxxx
...
You received this bug notification because you are subscribed to the bug
=== modified file 'lib/lp/bugs/doc/bugnotification-threading.txt'
--- lib/lp/bugs/doc/bugnotification-threading.txt 2011-12-30 06:14:56 +0000
+++ lib/lp/bugs/doc/bugnotification-threading.txt 2012-07-27 01:21:32 +0000
@@ -40,11 +40,11 @@
>>> len(messages)
1
-There are four recipients for this message, so we get:
+There are three recipients for this message, so we get:
>>> emails = messages[0]
>>> len(emails)
- 4
+ 3
The three emails have identical headers for our purposes, so:
@@ -79,7 +79,7 @@
1
>>> emails = messages[0]
>>> len(emails)
- 4
+ 3
>>> notification = emails[0]
>>> notification['Message-Id'] == comment.rfc822msgid
@@ -112,7 +112,7 @@
1
>>> emails = messages[0]
>>> len(emails)
- 4
+ 3
>>> notification = emails[0]
>>> notification['Message-Id'] == reply.rfc822msgid
True
=== modified file 'lib/lp/bugs/doc/bugnotificationrecipients.txt'
--- lib/lp/bugs/doc/bugnotificationrecipients.txt 2012-06-13 21:01:11 +0000
+++ lib/lp/bugs/doc/bugnotificationrecipients.txt 2012-07-27 01:21:32 +0000
@@ -47,10 +47,6 @@
mark@xxxxxxxxxxx
Assignee
You received this bug notification because you are a bug assignee.
- support@xxxxxxxxxx
- Registrant (Ubuntu) @ubuntu-team
- You received this bug notification because you are a member of
- Ubuntu Team, which is the registrant for Ubuntu.
test@xxxxxxxxxxxxx
Subscriber
You received this bug notification because you are subscribed
=== modified file 'lib/lp/bugs/doc/bugsubscription.txt'
--- lib/lp/bugs/doc/bugsubscription.txt 2012-07-19 04:40:03 +0000
+++ lib/lp/bugs/doc/bugsubscription.txt 2012-07-27 01:21:32 +0000
@@ -94,13 +94,13 @@
IBug.getIndirectSubscribers().
>>> linux_source_bug.getIndirectSubscribers()
- [<Person at ...>]
+ []
Finer-grained access to indirect subscribers is provided by
getAlsoNotifiedSubscribers() and getSubscribersFromDuplicates().
>>> list(linux_source_bug.getAlsoNotifiedSubscribers())
- [<Person at ...>]
+ []
>>> list(linux_source_bug.getSubscribersFromDuplicates())
[]
@@ -110,7 +110,7 @@
>>> from lp.bugs.model.bug import get_also_notified_subscribers
>>> res = get_also_notified_subscribers(linux_source_bug.bugtasks[0])
>>> list(res)
- [<Person at ...>]
+ []
These are security proxied.
@@ -130,7 +130,6 @@
>>> print_displayname(task.bug_subscribers)
Foo Bar
Mark Shuttleworth
- Ubuntu Team
Here are some examples of the three types of indirect subscribers:
@@ -142,14 +141,12 @@
>>> print_displayname(linux_source_bug.getIndirectSubscribers())
Sample Person
- Ubuntu Team
>>> linux_source_bug.getSubscribersFromDuplicates()
()
>>> print_displayname(linux_source_bug.getAlsoNotifiedSubscribers())
Sample Person
- Ubuntu Team
2. Structural subscribers
@@ -166,14 +163,12 @@
>>> print_displayname(linux_source_bug.getIndirectSubscribers())
No Privileges Person
Sample Person
- Ubuntu Team
>>> linux_source_bug.getSubscribersFromDuplicates()
()
>>> print_displayname(linux_source_bug.getAlsoNotifiedSubscribers())
No Privileges Person
Sample Person
- Ubuntu Team
>>> ubuntu_team = personset.getByName("ubuntu-team")
@@ -779,7 +774,6 @@
foo.bar@xxxxxxxxxxxxx
mark@xxxxxxxxxxx
robertc@xxxxxxxxxxxxxxxxx
- test@xxxxxxxxxxxxx
The upstream maintainer will be subscribed to security-related private
bugs, because upstream has no security contact, in this case.
=== modified file 'lib/lp/bugs/doc/security-teams.txt'
--- lib/lp/bugs/doc/security-teams.txt 2012-07-19 04:40:03 +0000
+++ lib/lp/bugs/doc/security-teams.txt 2012-07-27 01:21:32 +0000
@@ -87,7 +87,7 @@
False
>>> subscriber_names(bug)
- [u'name16', u'ubuntu-team']
+ [u'name16']
Likewise, filing a security-related bug on Firefox will subscribe the
security contact, the Ubuntu team, to the bug.
@@ -121,7 +121,7 @@
False
>>> subscriber_names(bug)
- [u'name12', u'name16']
+ [u'name16']
When no security contact exists, only the reporter and product
registrant get subscribed.
=== modified file 'lib/lp/bugs/model/bug.py'
--- lib/lp/bugs/model/bug.py 2012-07-25 22:25:27 +0000
+++ lib/lp/bugs/model/bug.py 2012-07-27 01:21:32 +0000
@@ -2591,34 +2591,13 @@
return load_people(Person.id == self.bugtask.assigneeID)
@cachedproperty
- @freeze(BugSubscriberSet)
- def all_pillar_owners_without_bug_supervisors(self):
- """Owners of pillars for which there is no bug supervisor.
-
- The pillars must also use Launchpad for bug tracking.
-
- *Does not* exclude muted subscribers.
- """
- if self.bugtask is None:
- bugtasks = self.bug.bugtasks
- else:
- bugtasks = [self.bugtask]
- for bugtask in bugtasks:
- pillar = bugtask.pillar
- if pillar.official_malone:
- if pillar.bug_supervisor is None:
- yield pillar.owner
-
- @cachedproperty
def also_notified_subscribers(self):
"""All subscribers except direct, dupe, and muted subscribers."""
if self.bug.private:
return BugSubscriberSet()
else:
subscribers = BugSubscriberSet().union(
- self.structural_subscribers,
- self.all_pillar_owners_without_bug_supervisors,
- self.all_assignees)
+ self.structural_subscribers, self.all_assignees)
return subscribers.difference(
self.direct_subscribers_at_all_levels,
self.muted_subscribers)
=== modified file 'lib/lp/bugs/model/tests/test_bugsubscriptioninfo.py'
--- lib/lp/bugs/model/tests/test_bugsubscriptioninfo.py 2012-07-19 04:40:03 +0000
+++ lib/lp/bugs/model/tests/test_bugsubscriptioninfo.py 2012-07-27 01:21:32 +0000
@@ -1,4 +1,4 @@
-# Copyright 2010 Canonical Ltd. This software is licensed under the
+# Copyright 2010-2012 Canonical Ltd. This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).
"""Test `BugSubscriptionInfo`."""
@@ -375,67 +375,6 @@
[bugtask2.owner],
self.getInfo().forTask(bugtask2).all_assignees)
- def test_all_pillar_owners_without_bug_supervisors(self):
- # The set of owners of pillars for which no bug supervisor is
- # configured and which use Launchpad for bug tracking.
- [bugtask] = self.bug.bugtasks
- found_owners = (
- self.getInfo().all_pillar_owners_without_bug_supervisors)
- self.assertContentEqual([], found_owners)
- # Clear the supervisor for the bugtask's target and ensure that the
- # project uses Launchpad Bugs.
- with person_logged_in(bugtask.target.owner):
- bugtask.target.setBugSupervisor(None, bugtask.owner)
- bugtask.pillar.official_malone = True
- # The collection includes the pillar's owner.
- found_owners = (
- self.getInfo().all_pillar_owners_without_bug_supervisors)
- self.assertContentEqual([bugtask.pillar.owner], found_owners)
- # Add another bugtask for a pillar that uses Launchpad but does not
- # have a bug supervisor.
- target2 = self.factory.makeProduct(
- bug_supervisor=None, official_malone=True)
- bugtask2 = self.factory.makeBugTask(bug=self.bug, target=target2)
- found_owners = (
- self.getInfo().all_pillar_owners_without_bug_supervisors)
- self.assertContentEqual(
- [bugtask.pillar.owner, bugtask2.pillar.owner],
- found_owners)
-
- def test_all_pillar_owners_without_bug_supervisors_not_using_malone(self):
- # The set of owners of pillars for which no bug supervisor is
- # configured and which do not use Launchpad for bug tracking is empty.
- [bugtask] = self.bug.bugtasks
- # Clear the supervisor for the first bugtask's target and ensure the
- # project does not use Launchpad Bugs.
- with person_logged_in(bugtask.target.owner):
- bugtask.target.setBugSupervisor(None, bugtask.owner)
- bugtask.pillar.official_malone = False
- found_owners = (
- self.getInfo().all_pillar_owners_without_bug_supervisors)
- self.assertContentEqual([], found_owners)
-
- def test_all_pillar_owners_without_bug_supervisors_for_bugtask(self):
- # The set of the owner of the chosen bugtask's pillar when no bug
- # supervisor is configured and which uses Launchpad for bug tracking.
- [bugtask] = self.bug.bugtasks
- # Clear the supervisor for the bugtask's target and ensure that the
- # project uses Launchpad Bugs.
- with person_logged_in(bugtask.target.owner):
- bugtask.target.setBugSupervisor(None, bugtask.owner)
- bugtask.pillar.official_malone = True
- # Add another bugtask for a pillar that uses Launchpad but does not
- # have a bug supervisor.
- target2 = self.factory.makeProduct(
- bug_supervisor=None, official_malone=True)
- bugtask2 = self.factory.makeBugTask(bug=self.bug, target=target2)
- # Getting subscription info for just a specific bugtask will yield
- # owners for only the pillar associated with that bugtask.
- info_for_bugtask2 = self.getInfo().forTask(bugtask2)
- self.assertContentEqual(
- [bugtask2.pillar.owner],
- info_for_bugtask2.all_pillar_owners_without_bug_supervisors)
-
def _create_also_notified_subscribers(self):
# Add an assignee, a bug supervisor and a structural subscriber.
bugtask = self.bug.default_bugtask
@@ -669,14 +608,6 @@
with self.exactly_x_queries(1):
self.info.all_assignees
- def test_all_pillar_owners_without_bug_supervisors(self):
- # Getting all bug supervisors and pillar owners can take several
- # queries. However, there are typically few tasks so the trade for
- # simplicity of implementation is acceptable. Only the simplest case
- # is tested here (everything is already cached).
- with self.exactly_x_queries(0):
- self.info.all_pillar_owners_without_bug_supervisors
-
def test_also_notified_subscribers(self):
with self.exactly_x_queries(5):
self.info.also_notified_subscribers
@@ -685,7 +616,6 @@
# When also_notified_subscribers is referenced after some other sets
# in BugSubscriptionInfo are referenced, everything comes from cache.
self.info.all_assignees
- self.info.all_pillar_owners_without_bug_supervisors
self.info.direct_subscriptions.subscribers
self.info.structural_subscribers
with self.exactly_x_queries(1):
=== modified file 'lib/lp/bugs/stories/bugs/bug-add-subscriber.txt'
--- lib/lp/bugs/stories/bugs/bug-add-subscriber.txt 2011-11-17 04:41:58 +0000
+++ lib/lp/bugs/stories/bugs/bug-add-subscriber.txt 2012-07-27 01:21:32 +0000
@@ -44,7 +44,6 @@
Also notified:
Foo Bar
Mark Shuttleworth
- Ubuntu Team
He subscribes David Allouche to the bug using his Launchpad username.
=== modified file 'lib/lp/bugs/tests/bugs-emailinterface.txt'
--- lib/lp/bugs/tests/bugs-emailinterface.txt 2012-07-08 17:40:59 +0000
+++ lib/lp/bugs/tests/bugs-emailinterface.txt 2012-07-27 01:21:32 +0000
@@ -142,12 +142,11 @@
... recipients = bug.getBugNotificationRecipients()
... return recipients.getEmails()
-Foo Bar and Sample Person got subscribed to the bug. Foo Bar got
-subscribed "implicitly", because he's the product owner.
+Foo Bar got subscribed to the bug.
>>> added_bug = bug_notification.bug
>>> getSubscribers(added_bug)
- ['foo.bar@xxxxxxxxxxxxx', 'test@xxxxxxxxxxxxx']
+ ['foo.bar@xxxxxxxxxxxxx']
If we would file a bug on Ubuntu instead, we would submit a mail like
this:
@@ -182,12 +181,10 @@
>>> bug_notification.message == bug.initial_message
True
-Foo Bar and Sample Person got subscribed to the bug. Foo Bar got
-subscribed "implicitly" since he's a bug supervisor for the mozilla
-package:
+Foo Bar got subscribed to the bug.
>>> getSubscribers(added_bug)
- ['foo.bar@xxxxxxxxxxxxx', 'test@xxxxxxxxxxxxx']
+ ['foo.bar@xxxxxxxxxxxxx']
It's possible to file a bug on more than product/package at once:
@@ -822,14 +819,14 @@
>>> sorted([subscriber.displayname
... for subscriber in bug_five.getIndirectSubscribers()])
- [u'Sample Person', u'Ubuntu Team']
+ [u'Sample Person']
>>> bug_six.subscribe(no_priv, no_priv)
<lp.bugs.model.bugsubscription.BugSubscription ...>
>>> sorted([subscriber.displayname
... for subscriber in bug_five.getIndirectSubscribers()])
- [u'No Privileges Person', u'Sample Person', u'Ubuntu Team']
+ [u'No Privileges Person', u'Sample Person']
Now, if we unsubscribe no-priv from bug #5, he will actually get
unsubscribed from bug #6, thus no longer being indirectly subscribed to
@@ -845,7 +842,7 @@
>>> sorted([subscriber.displayname
... for subscriber in bug_five.getIndirectSubscribers()])
- [u'Sample Person', u'Ubuntu Team']
+ [u'Sample Person']
(Log back in for the tests that follow.)
=== modified file 'lib/lp/bugs/tests/test_bugnotification.py'
--- lib/lp/bugs/tests/test_bugnotification.py 2012-07-24 05:07:13 +0000
+++ lib/lp/bugs/tests/test_bugnotification.py 2012-07-27 01:21:32 +0000
@@ -431,13 +431,6 @@
self.pillar = self.makePillar()
self.bug = self.makeBug()
- def test_notification_uses_malone(self):
- self.pillar.official_malone = True
- direct = self.bug.getDirectSubscribers()
- indirect = self.bug.getIndirectSubscribers()
- self.assertThat(direct, Not(Contains(self.pillar_owner)))
- self.assertThat(indirect, Contains(self.pillar_owner))
-
def test_notification_does_not_use_malone(self):
self.pillar.official_malone = False
direct = self.bug.getDirectSubscribers()
@@ -445,28 +438,6 @@
self.assertThat(direct, Not(Contains(self.pillar_owner)))
self.assertThat(indirect, Not(Contains(self.pillar_owner)))
- def test_status_change_uses_malone(self):
- # Status changes are sent to the direct and indirect subscribers.
- self.pillar.official_malone = True
- [bugtask] = self.bug.bugtasks
- all_subscribers = set(
- [person.name for person in chain(
- self.bug.getDirectSubscribers(),
- self.bug.getIndirectSubscribers())])
- bugtask_before_modification = Snapshot(
- bugtask, providing=providedBy(bugtask))
- bugtask.transitionToStatus(
- BugTaskStatus.INVALID, self.bug.owner)
- notify(ObjectModifiedEvent(
- bugtask, bugtask_before_modification, ['status'],
- user=self.bug.owner))
- latest_notification = BugNotification.selectFirst(orderBy='-id')
- notified_people = set(
- recipient.person.name
- for recipient in latest_notification.recipients)
- self.assertEqual(all_subscribers, notified_people)
- self.assertThat(all_subscribers, Contains(self.pillar_owner.name))
-
def test_status_change_does_not_use_malone(self):
# Status changes are sent to the direct and indirect subscribers.
self.pillar.official_malone = False
Follow ups