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
=== modified file 'lib/lp/registry/doc/milestone.txt'
--- lib/lp/registry/doc/milestone.txt 2010-01-22 02:49:00 +0000
+++ lib/lp/registry/doc/milestone.txt 2010-01-25 18:06:20 +0000
@@ -512,9 +512,17 @@
512------------------------------------------------------512------------------------------------------------------
513513
514When a milestone with bug tasks creates a release, those bug tasks in fix514When a milestone with bug tasks creates a release, those bug tasks in fix
515committed status are updated to fix released.515committed status are updated to fix released. An ObjectModifiedEvent
516516event is signaled for each changed bug task.
517 >>> from lp.bugs.interfaces.bugtask import BugTaskStatus517
518 >>> from lazr.lifecycle.interfaces import IObjectModifiedEvent
519 >>> from canonical.launchpad.ftests.event import TestEventListener
520 >>> from lp.bugs.interfaces.bugtask import BugTaskStatus, IBugTask
521
522 >>> def print_event(object, event):
523 ... print "Received %s on %s" % (
524 ... event.__class__.__name__.split('.')[-1],
525 ... object.__class__.__name__.split('.')[-1])
518526
519 >>> milestone = ff_onedotzero.newMilestone('kia')527 >>> milestone = ff_onedotzero.newMilestone('kia')
520 >>> fixed_bugtask = factory.makeBugTask(target=upstream_firefox)528 >>> fixed_bugtask = factory.makeBugTask(target=upstream_firefox)
@@ -523,9 +531,16 @@
523 >>> triaged_bugtask = factory.makeBugTask(target=upstream_firefox)531 >>> triaged_bugtask = factory.makeBugTask(target=upstream_firefox)
524 >>> triaged_bugtask.transitionToMilestone(milestone, owner)532 >>> triaged_bugtask.transitionToMilestone(milestone, owner)
525 >>> triaged_bugtask.transitionToStatus(BugTaskStatus.TRIAGED, owner)533 >>> triaged_bugtask.transitionToStatus(BugTaskStatus.TRIAGED, owner)
534 >>> bugtask_event_listener = TestEventListener(
535 ... IBugTask, IObjectModifiedEvent, print_event)
536
526 >>> release = milestone.createProductRelease(owner, datetime.now(UTC))537 >>> release = milestone.createProductRelease(owner, datetime.now(UTC))
538 Received ObjectModifiedEvent on BugTask
539
527 >>> fixed_bugtask.status540 >>> fixed_bugtask.status
528 <DBItem BugTaskStatus.FIXRELEASED, (30) Fix Released>541 <DBItem BugTaskStatus.FIXRELEASED, (30) Fix Released>
529542
530 >>> triaged_bugtask.status543 >>> triaged_bugtask.status
531 <DBItem BugTaskStatus.TRIAGED, (21) Triaged>544 <DBItem BugTaskStatus.TRIAGED, (21) Triaged>
545
546 >>> bugtask_event_listener.unregister()
532547
=== modified file 'lib/lp/registry/model/milestone.py'
--- lib/lp/registry/model/milestone.py 2010-01-22 02:49:00 +0000
+++ lib/lp/registry/model/milestone.py 2010-01-25 18:06:20 +0000
@@ -185,7 +185,8 @@
185 milestone=self)185 milestone=self)
186 for bugtask in self.open_bugtasks:186 for bugtask in self.open_bugtasks:
187 if bugtask.status == BugTaskStatus.FIXCOMMITTED:187 if bugtask.status == BugTaskStatus.FIXCOMMITTED:
188 bugtask.transitionToStatus(BugTaskStatus.FIXRELEASED, owner)188 bugtask.bug.setStatus(
189 bugtask.target, BugTaskStatus.FIXRELEASED, owner)
189 return release190 return release
190191
191 def destroySelf(self):192 def destroySelf(self):

Subscribers

People subscribed via source and target branches

to status/vote changes: