Merge lp:~sinzui/launchpad/release-bugtask-bug-512182 into lp:launchpad/db-devel

Proposed by Curtis Hovey
Status: Merged
Approved by: Edwin Grubbs
Approved revision: not available
Merged at revision: not available
Proposed branch: lp:~sinzui/launchpad/release-bugtask-bug-512182
Merge into: lp:launchpad/db-devel
Diff against target: 55 lines (+20/-4)
2 files modified
lib/lp/registry/doc/milestone.txt (+18/-3)
lib/lp/registry/model/milestone.py (+2/-1)
To merge this branch: bzr merge lp:~sinzui/launchpad/release-bugtask-bug-512182
Reviewer Review Type Date Requested Status
Gary Poster (community) rc Approve
Edwin Grubbs code Pending
Review via email: mp+17999@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Curtis Hovey (sinzui) wrote :

This is my branch to send modification events from createProductRelease().

    lp:~sinzui/launchpad/release-bugtask-bug-512182
    Diff size: 79
    Launchpad bug: https://bugs.launchpad.net/bugs/512182
    Test command: ./bin/test -vv -t reg.*doc/milestone
    Pre-implementation: no one (where were the antipodeans?)
    Target release: 10.01

Send modification events from createProductRelease()
----------------------------------------------------

When a release is created from a milestone all the fix committed bugs are
updated to fix released, but the events are not recorded in the bug history,
nor is the assigned engineer awarded karma. The problem is in
Milestone.createProductRelease().

Rules
-----

    * The loop of bugtasks must use snapshot and ObjectModifiedEvent to
      ensure the subscribers are notified.

QA
--

    * Create a release on staging from a milestone that has bugs that are
      fix committed.
    * Verify the bug status change in in the bug history.
    * Verify the assigned user was awarded the karma.

Lint
----

Linting changed files:
  lib/lp/registry/doc/milestone.txt
  lib/lp/registry/model/milestone.py

Test
----

    * lib/lp/registry/doc/milestone.txt
      * Added a test to verify that an ObjectModifiedEvent is called for
        the updated bugtask.

Implementation
--------------

    * lib/lp/registry/model/milestone.py
      * Updated the bugtask loop to use notify(ObjectModifiedEvent(...))
        for each bugtask.

Revision history for this message
Edwin Grubbs (edwin-grubbs) wrote :

Looks good.

merge-approved

-Edwin

Revision history for this message
Gary Poster (gary) :
review: Approve (rc)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/registry/doc/milestone.txt'
2--- lib/lp/registry/doc/milestone.txt 2010-01-22 02:49:00 +0000
3+++ lib/lp/registry/doc/milestone.txt 2010-01-25 18:06:20 +0000
4@@ -512,9 +512,17 @@
5 ------------------------------------------------------
6
7 When a milestone with bug tasks creates a release, those bug tasks in fix
8-committed status are updated to fix released.
9-
10- >>> from lp.bugs.interfaces.bugtask import BugTaskStatus
11+committed status are updated to fix released. An ObjectModifiedEvent
12+event is signaled for each changed bug task.
13+
14+ >>> from lazr.lifecycle.interfaces import IObjectModifiedEvent
15+ >>> from canonical.launchpad.ftests.event import TestEventListener
16+ >>> from lp.bugs.interfaces.bugtask import BugTaskStatus, IBugTask
17+
18+ >>> def print_event(object, event):
19+ ... print "Received %s on %s" % (
20+ ... event.__class__.__name__.split('.')[-1],
21+ ... object.__class__.__name__.split('.')[-1])
22
23 >>> milestone = ff_onedotzero.newMilestone('kia')
24 >>> fixed_bugtask = factory.makeBugTask(target=upstream_firefox)
25@@ -523,9 +531,16 @@
26 >>> triaged_bugtask = factory.makeBugTask(target=upstream_firefox)
27 >>> triaged_bugtask.transitionToMilestone(milestone, owner)
28 >>> triaged_bugtask.transitionToStatus(BugTaskStatus.TRIAGED, owner)
29+ >>> bugtask_event_listener = TestEventListener(
30+ ... IBugTask, IObjectModifiedEvent, print_event)
31+
32 >>> release = milestone.createProductRelease(owner, datetime.now(UTC))
33+ Received ObjectModifiedEvent on BugTask
34+
35 >>> fixed_bugtask.status
36 <DBItem BugTaskStatus.FIXRELEASED, (30) Fix Released>
37
38 >>> triaged_bugtask.status
39 <DBItem BugTaskStatus.TRIAGED, (21) Triaged>
40+
41+ >>> bugtask_event_listener.unregister()
42
43=== modified file 'lib/lp/registry/model/milestone.py'
44--- lib/lp/registry/model/milestone.py 2010-01-22 02:49:00 +0000
45+++ lib/lp/registry/model/milestone.py 2010-01-25 18:06:20 +0000
46@@ -185,7 +185,8 @@
47 milestone=self)
48 for bugtask in self.open_bugtasks:
49 if bugtask.status == BugTaskStatus.FIXCOMMITTED:
50- bugtask.transitionToStatus(BugTaskStatus.FIXRELEASED, owner)
51+ bugtask.bug.setStatus(
52+ bugtask.target, BugTaskStatus.FIXRELEASED, owner)
53 return release
54
55 def destroySelf(self):

Subscribers

People subscribed via source and target branches

to status/vote changes: