summaryrefslogtreecommitdiffstats
path: root/sanitycheck.cgi
diff options
context:
space:
mode:
authorjake%acutex.net <>2001-09-11 00:20:11 +0200
committerjake%acutex.net <>2001-09-11 00:20:11 +0200
commitc58ca9fbad118fd898bdd6aedee9fbf82abd2fb8 (patch)
tree7bc0d8f181a44779a369f442a10c0e2c2283cd83 /sanitycheck.cgi
parent2673d244abb7c8192df7c908f1f27f7f6a20abce (diff)
downloadbugzilla-c58ca9fbad118fd898bdd6aedee9fbf82abd2fb8.tar.gz
bugzilla-c58ca9fbad118fd898bdd6aedee9fbf82abd2fb8.tar.xz
Fix for bug 76140 - Adding some more sanity checks.
Patch by Matthew Tuck <matty@chariot.net.au> r= caillon@returnzero.com, jake@acutex.net
Diffstat (limited to 'sanitycheck.cgi')
-rwxr-xr-xsanitycheck.cgi45
1 files changed, 41 insertions, 4 deletions
diff --git a/sanitycheck.cgi b/sanitycheck.cgi
index 3ffe26261..7c2cb2ea1 100755
--- a/sanitycheck.cgi
+++ b/sanitycheck.cgi
@@ -90,7 +90,8 @@ sub CrossCheck {
Status("... from $t2.$f2");
- SendSQL("SELECT DISTINCT $f2" . ($key2 ? ", $key2" : '') ." FROM $t2");
+ SendSQL("SELECT DISTINCT $f2" . ($key2 ? ", $key2" : '') ." FROM $t2 "
+ . "WHERE $f2 IS NOT NULL");
while (MoreSQLData()) {
my ($value, $key) = FetchSQLData();
if (!$valid{$value} && !$exceptions{$value}) {
@@ -142,7 +143,13 @@ CrossCheck("keyworddefs", "id",
CrossCheck("fielddefs", "fieldid",
["bugs_activity", "fieldid"]);
-
+
+CrossCheck("attachments", "attach_id",
+ ["attachstatuses", "attach_id"],
+ ["bugs_activity", "attach_id"]);
+
+CrossCheck("attachstatusdefs", "id",
+ ["attachstatuses", "statusid"]);
CrossCheck("bugs", "bug_id",
["bugs_activity", "bug_id"],
@@ -152,7 +159,9 @@ CrossCheck("bugs", "bug_id",
["dependencies", "blocked"],
["dependencies", "dependson"],
["votes", "bug_id"],
- ["keywords", "bug_id"]);
+ ["keywords", "bug_id"],
+ ["duplicates", "dupe_of", "dupe"],
+ ["duplicates", "dupe", "dupe_of"]);
CrossCheck("profiles", "userid",
["bugs", "reporter", "bug_id"],
@@ -163,10 +172,21 @@ CrossCheck("profiles", "userid",
["cc", "who", "bug_id"],
["votes", "who", "bug_id"],
["longdescs", "who", "bug_id"],
+ ["logincookies", "userid"],
["namedqueries", "userid"],
+ ["watch", "watcher"],
+ ["watch", "watched"],
+ ["tokens", "userid"],
["components", "initialowner", "value"],
["components", "initialqacontact", "value", ["0"]]);
+CrossCheck("products", "product",
+ ["bugs", "product", "bug_id"],
+ ["components", "program", "value"],
+ ["milestones", "product", "value"],
+ ["versions", "program", "value"],
+ ["attachstatusdefs", "product", "name"]);
+
Status("Checking groups");
SendSQL("select bit from groups where bit != pow(2, round(log(bit) / log(2)))");
@@ -217,11 +237,28 @@ foreach my $ref (@checklist) {
my ($product, $milestone) = (@$ref);
SendSQL("SELECT count(*) FROM milestones WHERE product = " . SqlQuote($product) . " AND value = " . SqlQuote($milestone));
if(FetchOneColumn() != 1) {
- Alert("Bug(s) found with invalud product/milestone: $product/$milestone");
+ Alert("Bug(s) found with invalid product/milestone: $product/$milestone");
}
}
+Status("Checking default milestone/products");
+
+@checklist = ();
+SendSQL("select product, defaultmilestone from products");
+while (@row = FetchSQLData()) {
+ my @copy = @row;
+ push(@checklist, \@copy);
+}
+
+foreach my $ref (@checklist) {
+ my ($product, $milestone) = (@$ref);
+ SendSQL("SELECT count(*) FROM milestones WHERE product = " . SqlQuote($product) . " AND value = " . SqlQuote($milestone));
+ if(FetchOneColumn() != 1) {
+ Alert("Product(s) found with invalid default milestone: $product/$milestone");
+ }
+}
+
Status("Checking components/products");