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 ++++++------------------------------- 1 file changed, 6 insertions(+), 31 deletions(-) (limited to 'Bugzilla/Bug.pm') 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 -- cgit v1.2.3-24-g4f1b