diff options
-rwxr-xr-x | buglist.cgi | 10 | ||||
-rwxr-xr-x | checksetup.pl | 2 | ||||
-rwxr-xr-x | sanitycheck.cgi | 90 |
3 files changed, 89 insertions, 13 deletions
diff --git a/buglist.cgi b/buglist.cgi index 3070fbcec..65b0c4e2b 100755 --- a/buglist.cgi +++ b/buglist.cgi @@ -894,16 +894,16 @@ if (@bugidlist) { $dbh->sql_group_by('bugs.bug_id')); $sth->execute(); while (my ($bug_id, $min_membercontrol) = $sth->fetchrow_array()) { - $min_membercontrol{$bug_id} = $min_membercontrol; + $min_membercontrol{$bug_id} = $min_membercontrol || CONTROLMAPNA; } foreach my $bug (@bugs) { next unless defined($min_membercontrol{$bug->{'bug_id'}}); - if ($min_membercontrol{$bug->{'bug_id'}} == CONTROLMAPSHOWN - || $min_membercontrol{$bug->{'bug_id'}} == CONTROLMAPDEFAULT) { - $bug->{'secure_mode'} = 'manual'; - } elsif ($min_membercontrol{$bug->{'bug_id'}} == CONTROLMAPMANDATORY) { + if ($min_membercontrol{$bug->{'bug_id'}} == CONTROLMAPMANDATORY) { $bug->{'secure_mode'} = 'implied'; } + else { + $bug->{'secure_mode'} = 'manual'; + } } } diff --git a/checksetup.pl b/checksetup.pl index 4cfc096e1..61df2c688 100755 --- a/checksetup.pl +++ b/checksetup.pl @@ -3314,7 +3314,7 @@ if ($mapcnt == 0) { # First, get all the existing products and their groups. $sth = $dbh->prepare("SELECT groups.id, products.id, groups.name, " . "products.name FROM groups, products " . - "WHERE isbuggroup != 0 AND isactive != 0"); + "WHERE isbuggroup != 0"); $sth->execute(); while (my ($groupid, $productid, $groupname, $productname) = $sth->fetchrow_array()) { diff --git a/sanitycheck.cgi b/sanitycheck.cgi index 7b5db7ad3..79295b3c8 100755 --- a/sanitycheck.cgi +++ b/sanitycheck.cgi @@ -21,6 +21,7 @@ # Contributor(s): Terry Weissman <terry@mozilla.org> # Matthew Tuck <matty@chariot.net.au> # Max Kanat-Alexander <mkanat@bugzilla.org> +# Marc Schumann <wurblzap@gmail.com> use strict; @@ -176,6 +177,75 @@ if (defined $cgi->param('cleangroupsnow')) { } ########################################################################### +# Create missing group_control_map entries +########################################################################### + +if (defined $cgi->param('createmissinggroupcontrolmapentries')) { + Status(qq{OK, now creating <code>SHOWN</code> member control entries + for product/group combinations lacking one.}); + + my $na = CONTROLMAPNA; + my $shown = CONTROLMAPSHOWN; + my $insertsth = $dbh->prepare( + qq{INSERT INTO group_control_map ( + group_id, product_id, entry, + membercontrol, othercontrol, canedit + ) + VALUES ( + ?, ?, 0, + $shown, $na, 0 + )}); + my $updatesth = $dbh->prepare(qq{UPDATE group_control_map + SET membercontrol = $shown + WHERE group_id = ? + AND product_id = ?}); + my $counter = 0; + + # Find all group/product combinations used for bugs but not set up + # correctly in group_control_map + my $invalid_combinations = $dbh->selectall_arrayref( + qq{ SELECT bugs.product_id, + bgm.group_id, + gcm.membercontrol, + groups.name, + products.name + FROM bugs + INNER JOIN bug_group_map AS bgm + ON bugs.bug_id = bgm.bug_id + INNER JOIN groups + ON bgm.group_id = groups.id + INNER JOIN products + ON bugs.product_id = products.id + LEFT JOIN group_control_map AS gcm + ON bugs.product_id = gcm.product_id + AND bgm.group_id = gcm.group_id + WHERE COALESCE(gcm.membercontrol, $na) = $na + } . $dbh->sql_group_by('bugs.product_id, bgm.group_id')); + + foreach (@$invalid_combinations) { + my ($product_id, $group_id, $currentmembercontrol, + $group_name, $product_name) = @$_; + + $counter++; + if (defined($currentmembercontrol)) { + Status(qq{Updating <code>NA/<em>xxx</em></code> group control + setting for group <em>$group_name</em> to + <code>SHOWN/<em>xxx</em></code> in product + <em>$product_name</em>.}); + $updatesth->execute($group_id, $product_id); + } + else { + Status(qq{Generating <code>SHOWN/NA</code> group control setting + for group <em>$group_name</em> in product + <em>$product_name</em>.}); + $insertsth->execute($group_id, $product_id); + } + } + + Status("Repaired $counter defective group control settings."); +} + +########################################################################### # Send unsent mail ########################################################################### @@ -656,8 +726,8 @@ if (defined $cgi->param('rebuildkeywordcache')) { # General bug checks ########################################################################### -sub BugCheck ($$) { - my ($middlesql, $errortext) = @_; +sub BugCheck ($$;$$) { + my ($middlesql, $errortext, $repairparam, $repairtext) = @_; SendSQL("SELECT DISTINCT bugs.bug_id " . "FROM $middlesql " . @@ -672,6 +742,11 @@ sub BugCheck ($$) { if (@badbugs) { Alert("$errortext: " . BugListLinks(@badbugs)); + if ($repairparam) { + $repairtext ||= 'Repair these bugs'; + print qq{<a href="sanitycheck.cgi?$repairparam=1">$repairtext</a>.}, + '<p>'; + } } } @@ -763,10 +838,12 @@ BugCheck("bugs LEFT JOIN group_control_map ON bugs.product_id = group_control_map.product_id AND bug_group_map.group_id = group_control_map.group_id - WHERE groups.isactive != 0 - AND ((group_control_map.membercontrol = " . CONTROLMAPNA . ") + WHERE ((group_control_map.membercontrol = " . CONTROLMAPNA . ") OR (group_control_map.membercontrol IS NULL))", - "Have groups not permitted for their products"); + 'Have groups not permitted for their products', + 'createmissinggroupcontrolmapentries', + 'Permit the missing groups for the affected products + (set member control to <code>SHOWN</code>)'); BugCheck("bugs INNER JOIN bug_group_map @@ -776,8 +853,7 @@ BugCheck("bugs LEFT JOIN group_control_map ON bugs.product_id = group_control_map.product_id AND bug_group_map.group_id = group_control_map.group_id - WHERE groups.isactive != 0 - AND group_control_map.membercontrol = " . CONTROLMAPMANDATORY . " + WHERE group_control_map.membercontrol = " . CONTROLMAPMANDATORY . " AND bug_group_map.group_id IS NULL", "Are missing groups required for their products"); |