summaryrefslogtreecommitdiffstats
path: root/Bugzilla
diff options
context:
space:
mode:
authormkanat%bugzilla.org <>2006-12-14 06:45:12 +0100
committermkanat%bugzilla.org <>2006-12-14 06:45:12 +0100
commita50aaa37ec837b5d753ad31250db36282953c0c7 (patch)
tree4f2be64777301396fc14174209d5b4ced466602e /Bugzilla
parent5cafe3a31f3bc657f83478f8ddfc9b0b21c078ab (diff)
downloadbugzilla-a50aaa37ec837b5d753ad31250db36282953c0c7.tar.gz
bugzilla-a50aaa37ec837b5d753ad31250db36282953c0c7.tar.xz
Bug 360710: checksetup.pl needs to blacklist some non-working external modules
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=justdave
Diffstat (limited to 'Bugzilla')
-rw-r--r--Bugzilla/Constants.pm15
-rw-r--r--Bugzilla/DB.pm7
-rw-r--r--Bugzilla/Install/Requirements.pm26
3 files changed, 34 insertions, 14 deletions
diff --git a/Bugzilla/Constants.pm b/Bugzilla/Constants.pm
index 1b774c64c..9e37f9f5c 100644
--- a/Bugzilla/Constants.pm
+++ b/Bugzilla/Constants.pm
@@ -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'},
};
diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm
index 33fdda0d8..1bc88c351 100644
--- a/Bugzilla/DB.pm
+++ b/Bugzilla/DB.pm
@@ -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
diff --git a/Bugzilla/Install/Requirements.pm b/Bugzilla/Install/Requirements.pm
index baff6c816..a80ee9a14 100644
--- a/Bugzilla/Install/Requirements.pm
+++ b/Bugzilla/Install/Requirements.pm
@@ -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;
}