]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 360710: checksetup.pl needs to blacklist some non-working external modules
authormkanat%bugzilla.org <>
Thu, 14 Dec 2006 05:45:12 +0000 (05:45 +0000)
committermkanat%bugzilla.org <>
Thu, 14 Dec 2006 05:45:12 +0000 (05:45 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=justdave

Bugzilla/Constants.pm
Bugzilla/DB.pm
Bugzilla/Install/Requirements.pm

index 1b774c64cf530cb3509cc0d2b7c8a274dc7e9441..9e37f9f5c4475dd58b44f7dd51c5a62def7aca1f 100644 (file)
@@ -359,10 +359,21 @@ use constant INSTALLATION_MODE_NON_INTERACTIVE => 1;
 # Data about what we require for different databases.
 use constant DB_MODULE => {
     'mysql' => {db => 'Bugzilla::DB::Mysql', db_version => '4.1.2',
-                dbd => 'DBD::mysql', dbd_version => '2.9003',
+                dbd => { 
+                    package => 'DBD-mysql',
+                    module  => 'DBD::mysql',
+                    version => '2.9003',
+                    # Certain versions are broken, development versions are
+                    # always disallowed.
+                    blacklist => ['^3\.000[3-6]', '_'],
+                },
                 name => 'MySQL'},
     'pg'    => {db => 'Bugzilla::DB::Pg', db_version => '8.00.0000',
-                dbd => 'DBD::Pg', dbd_version => '1.45',
+                dbd => {
+                    package => 'DBD-Pg',
+                    module  => 'DBD::Pg',
+                    version => '1.45',
+                },
                 name => 'PostgreSQL'},
 };
 
index 33fdda0d8f7d224033bedef1cb124d30608946a8..1bc88c3517d7b0c149394cde486a36b6b7cd4687 100644 (file)
@@ -136,16 +136,17 @@ sub bz_check_requirements {
 
     # Check the existence and version of the DBD that we need.
     my $dbd        = $db->{dbd};
-    my $dbd_ver    = $db->{dbd_version};
     my $sql_server = $db->{name};
     my $sql_want   = $db->{db_version};
-    unless (have_vers({ module => $dbd, version => $dbd_ver }, $output)) {
+    unless (have_vers($dbd, $output)) {
         my $command = install_command($dbd);
         my $root    = ROOT_USER;
+        my $dbd_mod = $dbd->{module};
+        my $dbd_ver = $dbd->{version};
         my $version = $dbd_ver ? " $dbd_ver or higher" : '';
         print <<EOT;
 
-For $sql_server, Bugzilla requires that perl's ${dbd}${version} be 
+For $sql_server, Bugzilla requires that perl's $dbd_mod $dbd_ver be 
 installed. To install this module, run the following command (as $root):
 
     $command
index baff6c816fc85a6fb4b93f19b75c706a4e64391f..a80ee9a14c03b83b70a260e6f5d6da6b78f0075e 100644 (file)
@@ -51,6 +51,10 @@ use Bugzilla::Constants;
 # of the actual module we load with "require" to see if the package is
 # installed or not. "version" is the version we need, or 0 if we'll accept
 # any version.
+#
+# "blacklist" is an arrayref of regular expressions that describe versions that
+# are 'blacklisted'--that is, even if the version is high enough, Bugzilla
+# will refuse to say that it's OK to run with that version.
 sub REQUIRED_MODULES {
     my @modules = (
     {
@@ -272,9 +276,8 @@ sub check_requirements {
     my $have_one_dbd = 0;
     my $db_modules = DB_MODULE;
     foreach my $db (keys %$db_modules) {
-        my %info = (module  => $db_modules->{$db}->{dbd},
-                    version => $db_modules->{$db}->{dbd_version});
-        $have_one_dbd = 1 if have_vers(\%info, $output);
+        my $dbd = $db_modules->{$db}->{dbd};
+        $have_one_dbd = 1 if have_vers($dbd, $output);
     }
 
     print "\nThe following Perl modules are optional:\n" if $output;
@@ -379,13 +382,10 @@ EOT
 
         my %db_modules = %{DB_MODULE()};
         foreach my $db (keys %db_modules) {
-            my $command = install_command(
-                { module  => $db_modules{$db}->{dbd},
-                  package => $db_modules{$db}->{dbd} });
-
+            my $command = install_command($db_modules{$db}->{dbd});
             printf "%10s: \%s\n", $db_modules{$db}->{name}, $command;
             print ' ' x 12 . "Minimum version required: "
-                  . $db_modules{$db}->{dbd_version} . "\n";
+                  . $db_modules{$db}->{dbd}->{version} . "\n";
         }
         print "\n";
     }
@@ -525,7 +525,15 @@ sub have_vers {
     }
 
     my $vok = (vers_cmp($vnum,$wanted) > -1);
-    print ((($vok) ? "ok: " : " "), "$vstr\n") if $output;
+    my $blacklisted;
+    if ($vok && $params->{blacklist}) {
+        $blacklisted = grep($vnum =~ /$_/, @{$params->{blacklist}});
+        $vok = 0 if $blacklisted;
+    }
+
+    my $ok = $vok ? "ok:" : "";
+    my $black_string = $blacklisted ? "(blacklisted)" : "";
+    print "$ok $vstr $black_string\n" if $output;
     return $vok ? 1 : 0;
 }