]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 361252: checksetup.pl should get confirmation from the user before causing datalo...
authorlpsolit%gmail.com <>
Sat, 9 Dec 2006 19:51:33 +0000 (19:51 +0000)
committerlpsolit%gmail.com <>
Sat, 9 Dec 2006 19:51:33 +0000 (19:51 +0000)
Bugzilla.pm
Bugzilla/Config.pm
Bugzilla/Constants.pm
Bugzilla/DB/Mysql.pm
Bugzilla/Install.pm
Bugzilla/Install/Localconfig.pm
checksetup.pl

index 7c52dd50028369d800b4db005aaf7d7818079caa..32f731859cdbd1218461ba6bffb85b0e2600eca8 100644 (file)
@@ -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>.
index 0859c5bee310b1395b27749e4836019029207575..85c9d6decbe6514582c072a2f895e2396136a471 100644 (file)
@@ -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();
 
index 89032c0b00fb60be105f3aefb4708573960fa4c1..1b774c64cf530cb3509cc0d2b7c8a274dc7e9441 100644 (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',
index 4335a1b2fecb54fab2724a18bd5ceb55d90bc906..a8210a9720f901687e7ed3e316ee7ca98fae3a2e 100644 (file)
@@ -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";
index 18f7473ae905a097949081f69e52bdb2227e1289..c31bb58dff237da8e04645245a558e455ffec45d 100644 (file)
@@ -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'};
index 9cc8c49ccfd13a3853033ff4adb419aa1f0d24c3..ed502d8a771c886a97acda3bb25d4e9a57527e59 100644 (file)
@@ -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
index d2313c92b846a8cd179cb6dc42ef18ecc427800b..eefff49181965cfd01fda4d522ba4e39c2bf3798 100755 (executable)
@@ -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