Bug 360710: checksetup.pl needs to blacklist some non-working external modules

Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=justdave
This commit is contained in:
mkanat%bugzilla.org 2006-12-13 21:45:12 +00:00
parent 6abdaa7b12
commit f7a82b4318
3 changed files with 34 additions and 14 deletions

View 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'},
};

View 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

View 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;
}