From eeffc2b5c38786c8626431435fab7afd5446cf74 Mon Sep 17 00:00:00 2001 From: Frédéric Buclin Date: Wed, 8 Sep 2010 13:57:23 +0200 Subject: Bug 271758: noresolveonopenblockers = on doesn't allow removing open blockers and resolve the bug in a single change r/a=mkanat --- Bugzilla/Bug.pm | 37 ++++--------------------- template/en/default/global/user-error.html.tmpl | 35 +++++++---------------- 2 files changed, 16 insertions(+), 56 deletions(-) diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index 2cf49d151..db9f2438d 100644 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -1757,13 +1757,14 @@ sub _check_resolution { # Check noresolveonopenblockers. if (Bugzilla->params->{"noresolveonopenblockers"} && $resolution eq 'FIXED' - && (!$self->resolution || $resolution ne $self->resolution)) + && (!$self->resolution || $resolution ne $self->resolution) + && scalar @{$self->dependson}) { - my @dependencies = CountOpenDependencies($self->id); - if (@dependencies) { + my $dep_bugs = Bugzilla::Bug->new_from_list($self->dependson); + my $count_open = grep { $_->isopened } @$dep_bugs; + if ($count_open) { ThrowUserError("still_unresolved_bugs", - { dependencies => \@dependencies, - dependency_count => scalar @dependencies }); + { bug_id => $self->id, dep_count => $count_open }); } } @@ -3775,32 +3776,6 @@ sub map_fields { return \%field_values; } -# CountOpenDependencies counts the number of open dependent bugs for a -# list of bugs and returns a list of bug_id's and their dependency count -# It takes one parameter: -# - A list of bug numbers whose dependencies are to be checked -sub CountOpenDependencies { - my (@bug_list) = @_; - my @dependencies; - my $dbh = Bugzilla->dbh; - - my $sth = $dbh->prepare( - "SELECT blocked, COUNT(bug_status) " . - "FROM bugs, dependencies " . - "WHERE " . $dbh->sql_in('blocked', \@bug_list) . - "AND bug_id = dependson " . - "AND bug_status IN (" . join(', ', map {$dbh->quote($_)} BUG_STATE_OPEN) . ") " . - $dbh->sql_group_by('blocked')); - $sth->execute(); - - while (my ($bug_id, $dependencies) = $sth->fetchrow_array()) { - push(@dependencies, { bug_id => $bug_id, - dependencies => $dependencies }); - } - - return @dependencies; -} - ################################################################################ # check_can_change_field() defines what users are allowed to change. You # can add code here for site-specific policy changes, according to the diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl index 1fd2a52e1..2d5ad72d7 100644 --- a/template/en/default/global/user-error.html.tmpl +++ b/template/en/default/global/user-error.html.tmpl @@ -1483,32 +1483,17 @@ already exists. [% ELSIF error == "still_unresolved_bugs" %] - [% IF dependency_count == 1 %] - [% terms.Bug %]# [% dependencies.0.bug_id FILTER none %] - still has [% dependencies.0.dependencies FILTER html %] unresolved - [% IF dependencies.0.dependencies == 1 %] - dependency - [% ELSE %] - dependencies - [% END %]. Show - Dependency - Tree. + [% title = "Unresolved Dependencies" %] + [% terms.Bug %] [%+ bug_id FILTER bug_link(bug_id) FILTER none %] + has [% dep_count FILTER none %] unresolved + [% IF dep_count == 1 %] + dependency [% ELSE %] - There are [% dependency_count FILTER none %] open [% terms.bugs %] which - have unresolved dependencies. -
- [% FOREACH bug = dependencies %] - [% terms.Bug %]# [% bug.bug_id FILTER none %] - has [% bug.dependencies FILTER html %] open - [% IF bug.dependencies == 1 %] - dependency. - [% ELSE %] - dependencies. - [% END %] - (Dependency - Tree)
- [% END %] - [% END %] + dependencies + [% END %]. + They must either be resolved or removed from the + "[% field_descs.dependson FILTER html %]" field before you can resolve + this [% terms.bug %] as [% display_value("resolution", "FIXED") FILTER html %]. [% ELSIF error == "sudo_invalid_cookie" %] [% title = "Invalid Sudo Cookie" %] -- cgit v1.2.3-24-g4f1b