зеркало из https://github.com/mozilla/pjs.git
Bug 361252: checksetup.pl should get confirmation from the user before causing dataloss in UTF8 conversion - Patch by Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit a=myk
This commit is contained in:
Родитель
e9bea2c301
Коммит
414724965e
|
@ -327,6 +327,28 @@ sub usage_mode {
|
|||
|| Bugzilla::Constants::USAGE_MODE_BROWSER;
|
||||
}
|
||||
|
||||
sub installation_mode {
|
||||
my ($class, $newval) = @_;
|
||||
($class->request_cache->{installation_mode} = $newval) if defined $newval;
|
||||
return $class->request_cache->{installation_mode}
|
||||
|| INSTALLATION_MODE_INTERACTIVE;
|
||||
}
|
||||
|
||||
sub installation_answers {
|
||||
my ($class, $filename) = @_;
|
||||
if ($filename) {
|
||||
my $s = new Safe;
|
||||
$s->rdo($filename);
|
||||
|
||||
die "Error reading $filename: $!" if $!;
|
||||
die "Error evaluating $filename: $@" if $@;
|
||||
|
||||
# Now read the param back out from the sandbox
|
||||
$class->request_cache->{installation_answers} = $s->varglob('answer');
|
||||
}
|
||||
return $class->request_cache->{installation_answers} || {};
|
||||
}
|
||||
|
||||
sub switch_to_shadow_db {
|
||||
my $class = shift;
|
||||
|
||||
|
@ -570,6 +592,16 @@ usage mode.
|
|||
|
||||
C<Bugzilla->usage_mode> will return the current state of this flag.
|
||||
|
||||
=item C<installation_mode>
|
||||
|
||||
Determines whether or not installation should be silent. See
|
||||
L<Bugzilla::Constants> for the C<INSTALLATION_MODE> constants.
|
||||
|
||||
=item C<installation_answers>
|
||||
|
||||
Returns a hashref representing any "answers" file passed to F<checksetup.pl>,
|
||||
used to automatically answer or skip prompts.
|
||||
|
||||
=item C<dbh>
|
||||
|
||||
The current database handle. See L<DBI>.
|
||||
|
|
|
@ -100,7 +100,7 @@ sub SetParam {
|
|||
|
||||
sub update_params {
|
||||
my ($params) = @_;
|
||||
my $answer = $params->{answer} || {};
|
||||
my $answer = Bugzilla->installation_answers;
|
||||
|
||||
my $param = read_param_file();
|
||||
|
||||
|
|
|
@ -127,6 +127,9 @@ use File::Basename;
|
|||
ERROR_MODE_DIE
|
||||
ERROR_MODE_DIE_SOAP_FAULT
|
||||
|
||||
INSTALLATION_MODE_INTERACTIVE
|
||||
INSTALLATION_MODE_NON_INTERACTIVE
|
||||
|
||||
DB_MODULE
|
||||
ROOT_USER
|
||||
ON_WINDOWS
|
||||
|
@ -349,6 +352,10 @@ use constant ERROR_MODE_WEBPAGE => 0;
|
|||
use constant ERROR_MODE_DIE => 1;
|
||||
use constant ERROR_MODE_DIE_SOAP_FAULT => 2;
|
||||
|
||||
# The various modes that checksetup.pl can run in.
|
||||
use constant INSTALLATION_MODE_INTERACTIVE => 0;
|
||||
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',
|
||||
|
|
|
@ -43,6 +43,7 @@ package Bugzilla::DB::Mysql;
|
|||
|
||||
use strict;
|
||||
|
||||
use Bugzilla::Constants;
|
||||
use Bugzilla::Util;
|
||||
use Bugzilla::Error;
|
||||
|
||||
|
@ -349,7 +350,7 @@ sub bz_setup_database {
|
|||
. "If you would like to cancel, press Ctrl-C now..."
|
||||
. " (Waiting 45 seconds...)\n\n";
|
||||
# Wait 45 seconds for them to respond.
|
||||
sleep(45);
|
||||
sleep(45) unless Bugzilla->installation_answers->{NO_PAUSE};
|
||||
}
|
||||
print "Renaming indexes...\n";
|
||||
|
||||
|
@ -566,9 +567,23 @@ WARNING: We are about to convert your table storage format to UTF8. This
|
|||
If you ever used a version of Bugzilla before 2.22, we STRONGLY
|
||||
recommend that you stop checksetup.pl NOW and run contrib/recode.pl.
|
||||
|
||||
Continuing in 60 seconds...
|
||||
EOT
|
||||
sleep 60;
|
||||
|
||||
if (!Bugzilla->installation_answers->{NO_PAUSE}) {
|
||||
if (Bugzilla->installation_mode ==
|
||||
INSTALLATION_MODE_NON_INTERACTIVE)
|
||||
{
|
||||
print <<EOT;
|
||||
Re-run checksetup.pl in interactive mode (without an 'answers' file)
|
||||
to continue.
|
||||
EOT
|
||||
exit;
|
||||
}
|
||||
else {
|
||||
print " Press Enter to continue or Ctrl-C to exit...";
|
||||
getc;
|
||||
}
|
||||
}
|
||||
|
||||
print "Converting table storage format to UTF-8. This may take a",
|
||||
" while.\n";
|
||||
|
|
|
@ -274,7 +274,7 @@ sub create_admin {
|
|||
|
||||
return if $admin_count;
|
||||
|
||||
my %answer = %{$params->{answer} || {}};
|
||||
my %answer = %{Bugzilla->installation_answers};
|
||||
my $login = $answer{'ADMIN_EMAIL'};
|
||||
my $password = $answer{'ADMIN_PASSWORD'};
|
||||
my $full_name = $answer{'ADMIN_REALNAME'};
|
||||
|
|
|
@ -275,7 +275,7 @@ sub update_localconfig {
|
|||
my ($params) = @_;
|
||||
|
||||
my $output = $params->{output} || 0;
|
||||
my $answer = $params->{answer} || {};
|
||||
my $answer = Bugzilla->installation_answers;
|
||||
my $localconfig = read_localconfig('include deprecated');
|
||||
|
||||
my @new_vars;
|
||||
|
@ -401,7 +401,7 @@ Bugzilla::Install::Localconfig - Functions and variables dealing
|
|||
=head1 SYNOPSIS
|
||||
|
||||
use Bugzilla::Install::Requirements qw(update_localconfig);
|
||||
update_localconfig({ output => 1, answer => \%answer });
|
||||
update_localconfig({ output => 1 });
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
|
@ -453,7 +453,7 @@ Returns: A hashref of the localconfig variables. If an array
|
|||
(and C<OLD_LOCALCONFIG_VARS> if C<$include_deprecated> is
|
||||
specified).
|
||||
|
||||
=item C<update_localconfig({ output =E<gt> 1, answer =E<gt> \%answer })>
|
||||
=item C<update_localconfig({ output =E<gt> 1 })>
|
||||
|
||||
Description: Adds any new variables to localconfig that aren't
|
||||
currently defined there. Also optionally prints out
|
||||
|
|
|
@ -57,25 +57,6 @@ use Bugzilla::Install::Requirements;
|
|||
|
||||
require 5.008001 if ON_WINDOWS; # for CGI 2.93 or higher
|
||||
|
||||
######################################################################
|
||||
# Subroutines
|
||||
######################################################################
|
||||
|
||||
sub read_answers_file {
|
||||
my %hash;
|
||||
if ($ARGV[0]) {
|
||||
my $s = new Safe;
|
||||
$s->rdo($ARGV[0]);
|
||||
|
||||
die "Error reading $ARGV[0]: $!" if $!;
|
||||
die "Error evaluating $ARGV[0]: $@" if $@;
|
||||
|
||||
# Now read the param back out from the sandbox
|
||||
%hash = %{$s->varglob('answer')};
|
||||
}
|
||||
return \%hash;
|
||||
}
|
||||
|
||||
######################################################################
|
||||
# Live Code
|
||||
######################################################################
|
||||
|
@ -89,9 +70,8 @@ pod2usage({-verbose => 1, -exitval => 1}) if $switch{'help'};
|
|||
|
||||
# Read in the "answers" file if it exists, for running in
|
||||
# non-interactive mode.
|
||||
our %answer = %{read_answers_file()};
|
||||
|
||||
my $silent = scalar(keys %answer) && !$switch{'verbose'};
|
||||
my $answers_file = $ARGV[0];
|
||||
my $silent = $answers_file && !$switch{'verbose'};
|
||||
|
||||
display_version_and_os() unless $silent;
|
||||
# Check required --MODULES--
|
||||
|
@ -132,6 +112,8 @@ require Bugzilla::Field;
|
|||
require Bugzilla::Install;
|
||||
|
||||
Bugzilla->usage_mode(USAGE_MODE_CMDLINE);
|
||||
Bugzilla->installation_mode(INSTALLATION_MODE_NON_INTERACTIVE) if $answers_file;
|
||||
Bugzilla->installation_answers($answers_file);
|
||||
|
||||
# When we're running at the command line, we need to pick the right
|
||||
# language before ever creating a template object.
|
||||
|
@ -142,7 +124,7 @@ $ENV{'HTTP_ACCEPT_LANGUAGE'} ||= setlocale(LC_CTYPE);
|
|||
###########################################################################
|
||||
|
||||
print "Reading " . bz_locations()->{'localconfig'} . "...\n" unless $silent;
|
||||
update_localconfig({ output => !$silent, answer => \%answer });
|
||||
update_localconfig({ output => !$silent });
|
||||
my $lc_hash = Bugzilla->localconfig;
|
||||
|
||||
###########################################################################
|
||||
|
@ -172,7 +154,7 @@ create_htaccess() if $lc_hash->{'create_htaccess'};
|
|||
|
||||
# Remove parameters from the params file that no longer exist in Bugzilla,
|
||||
# and set the defaults for new ones
|
||||
update_params({ answer => \%answer});
|
||||
update_params();
|
||||
|
||||
###########################################################################
|
||||
# Pre-compile --TEMPLATE-- code
|
||||
|
@ -229,7 +211,7 @@ Bugzilla::Install::update_settings();
|
|||
###########################################################################
|
||||
|
||||
Bugzilla::Install::make_admin($switch{'make-admin'}) if $switch{'make-admin'};
|
||||
Bugzilla::Install::create_admin({ answer => \%answer });
|
||||
Bugzilla::Install::create_admin();
|
||||
|
||||
###########################################################################
|
||||
# Create default Product and Classification
|
||||
|
@ -471,6 +453,12 @@ The format of that file is as follows:
|
|||
|
||||
$answer{'SMTP_SERVER'} = 'mail.mydomain.net';
|
||||
|
||||
$answer{'NO_PAUSE'} = 1
|
||||
|
||||
C<NO_PAUSE> means "never stop and prompt the user to hit Enter to continue,
|
||||
just go ahead and do things, even if they are potentially dangerous."
|
||||
Don't set this to 1 unless you know what you are doing.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
=over
|
||||
|
|
Загрузка…
Ссылка в новой задаче