~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/bugs/browser/bugtask.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-07-19 14:33:39 UTC
  • mfrom: (13402.4.8 bug-491886)
  • Revision ID: launchpad@pqm.canonical.com-20110719143339-vrh01jmceqce2ees
[r=lifeless][bug=491886] BugTask:+editstatus will no longer OOPS when
        a user can't set a status on a new bug target.

Show diffs side-by-side

added added

removed removed

Lines of Context:
55
55
    )
56
56
from operator import attrgetter
57
57
import re
 
58
import transaction
58
59
import urllib
59
60
 
60
61
from lazr.delegates import delegates
246
247
    IUpstreamBugTask,
247
248
    IUpstreamProductBugTaskSearch,
248
249
    UNRESOLVED_BUGTASK_STATUSES,
 
250
    UserCannotEditBugTaskStatus,
249
251
    )
250
252
from lp.bugs.interfaces.bugtracker import BugTrackerType
251
253
from lp.bugs.interfaces.bugwatch import BugWatchActivityStatus
1525
1527
        # happen to be the only values that changed. We explicitly verify that
1526
1528
        # we got a new status and/or assignee, because the form is not always
1527
1529
        # guaranteed to pass all the values. For example: bugtasks linked to a
1528
 
        # bug watch don't allow editting the form, and the value is missing
 
1530
        # bug watch don't allow editing the form, and the value is missing
1529
1531
        # from the form.
1530
1532
        missing = object()
1531
1533
        new_status = new_values.pop("status", missing)
1532
1534
        new_assignee = new_values.pop("assignee", missing)
1533
1535
        if new_status is not missing and bugtask.status != new_status:
1534
1536
            changed = True
1535
 
            bugtask.transitionToStatus(new_status, self.user)
 
1537
            try:
 
1538
                bugtask.transitionToStatus(new_status, self.user)
 
1539
            except UserCannotEditBugTaskStatus:
 
1540
                # We need to roll back the transaction at this point,
 
1541
                # since other changes may have been made.
 
1542
                transaction.abort()
 
1543
                self.setFieldError(
 
1544
                    'status',
 
1545
                    "Only the Bug Supervisor for %s can set the bug's "
 
1546
                    "status to %s" %
 
1547
                    (bugtask.target.displayname, new_status.title))
 
1548
                return
1536
1549
 
1537
1550
        if new_assignee is not missing and bugtask.assignee != new_assignee:
1538
1551
            if new_assignee is not None and new_assignee != self.user: