]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 560284: Make all errors that checksetup.pl throws be red
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Mon, 19 Apr 2010 23:21:58 +0000 (16:21 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Mon, 19 Apr 2010 23:21:58 +0000 (16:21 -0700)
r=mkanat, a=mkanat (module owner)

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

index 87210ffd422bc2f0e5e419b355bea72c5b9f253e..47aeb8a9d1e6f93ae59c527e141ed3d38fc7992c 100644 (file)
@@ -143,6 +143,8 @@ use File::Basename;
     ERROR_MODE_DIE_SOAP_FAULT
     ERROR_MODE_JSON_RPC
 
+    COLOR_ERROR
+
     INSTALLATION_MODE_INTERACTIVE
     INSTALLATION_MODE_NON_INTERACTIVE
 
@@ -445,6 +447,9 @@ use constant ERROR_MODE_DIE            => 1;
 use constant ERROR_MODE_DIE_SOAP_FAULT => 2;
 use constant ERROR_MODE_JSON_RPC       => 3;
 
+# The ANSI colors of messages that command-line scripts use
+use constant COLOR_ERROR => 'red';
+
 # The various modes that checksetup.pl can run in.
 use constant INSTALLATION_MODE_INTERACTIVE => 0;
 use constant INSTALLATION_MODE_NON_INTERACTIVE => 1;
index 85ad77e17a6048f300ed7cae64fc8334d0d5a9c1..fc2e0589934094cbde00764c759bbb3a2a060f38 100644 (file)
@@ -147,7 +147,7 @@ sub bz_check_requirements {
         my $dbd_mod = $dbd->{module};
         my $dbd_ver = $dbd->{version};
         my $version = $dbd_ver ? " $dbd_ver or higher" : '';
-        print <<EOT;
+        die <<EOT;
 
 For $sql_server, Bugzilla requires that perl's $dbd_mod $dbd_ver or later be
 installed. To install this module, run the following command (as $root):
@@ -155,7 +155,6 @@ installed. To install this module, run the following command (as $root):
     $command
 
 EOT
-        exit;
     }
 
     # We don't try to connect to the actual database if $db_check is
@@ -178,14 +177,13 @@ EOT
     if ( vers_cmp($sql_vers,$sql_want) > -1 ) {
         print "ok: found v$sql_vers\n" if $output;
     } else {
-        print <<EOT;
+        die <<EOT;
 
 Your $sql_server v$sql_vers is too old. Bugzilla requires version
 $sql_want or later of $sql_server. Please download and install a
 newer version.
 
 EOT
-        exit;
     }
 
     print "\n" if $output;
@@ -213,10 +211,9 @@ sub bz_create_database {
         if (!$success) {
             my $error = $dbh->errstr || $@;
             chomp($error);
-            print STDERR  "The '$db_name' database could not be created.",
-                          " The error returned was:\n\n    $error\n\n",
-                          _bz_connect_error_reasons();
-            exit;
+            die "The '$db_name' database could not be created.",
+                " The error returned was:\n\n    $error\n\n",
+                _bz_connect_error_reasons();
         }
     }
 
@@ -237,9 +234,8 @@ sub _get_no_db_connection {
         # Can't use $dbh->errstr because $dbh is undef.
         my $error = $DBI::errstr || $@;
         chomp($error);
-        print STDERR "There was an error connecting to $sql_server:\n\n",
-                     "    $error\n\n", _bz_connect_error_reasons();
-        exit;
+        die "There was an error connecting to $sql_server:\n\n",
+            "    $error\n\n", _bz_connect_error_reasons(), "\n";
     }
     return $dbh;    
 }
@@ -1309,13 +1305,11 @@ sub _check_references {
             }
         }
         else {
-            print "\n", get_text('install_fk_invalid',
+            die "\n", get_text('install_fk_invalid',
                 { table => $table, column => $column,
                   foreign_table => $foreign_table,
                   foreign_column => $foreign_column,
                  'values' => $bad_values }), "\n";
-            # I just picked a number above 2, to be considered "abnormal exit"
-            exit 3
         }
     }
 }
index daf34d04ece206ba52b1cb8209567d1e1d5c6017..297cf5758bc2d5f6b9c1a34e60b97de84924d1a4 100644 (file)
@@ -311,13 +311,12 @@ sub bz_setup_database {
     my ($innodb_on) = @{$self->selectcol_arrayref(
         q{SHOW VARIABLES LIKE '%have_innodb%'}, {Columns=>[2]})};
     if ($innodb_on ne 'YES') {
-        print <<EOT;
+        die <<EOT;
 InnoDB is disabled in your MySQL installation. 
 Bugzilla requires InnoDB to be enabled. 
 Please enable it and then re-run checksetup.pl.
 
 EOT
-        exit 3;
     }
 
 
index 81372da71e4dea1af08bb567aa68099388f42330..aa71c7d0ac75594eb23010105b6753a3872a6532 100644 (file)
@@ -3080,11 +3080,11 @@ sub _check_content_length {
           WHERE CHAR_LENGTH($field_name) > ?", {Columns=>[1,2]}, $max_length) };
 
     if (scalar keys %contents) {
-        print install_string('install_data_too_long',
-                             { column     => $field_name,
-                               id_column  => $id_field,
-                               table      => $table_name,
-                               max_length => $max_length });
+        my $error = install_string('install_data_too_long',
+                                   { column     => $field_name,
+                                     id_column  => $id_field,
+                                     table      => $table_name,
+                                     max_length => $max_length });
         foreach my $id (keys %contents) {
             my $string = $contents{$id};
             # Don't dump the whole string--it could be 16MB.
@@ -3092,9 +3092,9 @@ sub _check_content_length {
                 $string = substr($string, 0, 30) . "..." 
                          . substr($string, -30) . "\n";
             }
-            print "$id: $string\n";
+            $error .= "$id: $string\n";
         }
-        exit 3;
+        die $error;
     }
 }
 
index 34e93b6753e157ae30e6dbcc6ca4b1ac662eaee7..b80d7fa8b26090b57f5f400ba7ffa62a48d8421a 100644 (file)
@@ -425,8 +425,11 @@ sub print_module_instructions {
             if (vers_cmp($perl_ver, '5.10') > -1) {
                 $url_to_theory58S = 'http://cpan.uwinnipeg.ca/PPMPackages/10xx/';
             }
-            print colored(install_string('ppm_repo_add', 
-                                 { theory_url => $url_to_theory58S }), 'red');
+            print colored(
+                install_string('ppm_repo_add', 
+                               { theory_url => $url_to_theory58S }),
+                COLOR_ERROR);
+
             # ActivePerls older than revision 819 require an additional command.
             if (ON_ACTIVESTATE < 819) {
                 print install_string('ppm_repo_up');
@@ -459,7 +462,7 @@ sub print_module_instructions {
     }
 
     if (my @missing = @{$check_results->{missing}}) {
-        print colored(install_string('commands_required'), 'red') . "\n";
+        print colored(install_string('commands_required'), COLOR_ERROR), "\n";
         foreach my $package (@missing) {
             my $command = install_command($package);
             print "    $command\n";
@@ -472,7 +475,8 @@ sub print_module_instructions {
         print install_string('install_all', { perl => $^X });
     }
     if (!$check_results->{pass}) {
-        print colored(install_string('installation_failed'), 'red') . "\n\n";
+        print colored(install_string('installation_failed'), COLOR_ERROR),
+              "\n\n";
     }
 }
 
@@ -565,7 +569,7 @@ sub have_vers {
         $ok = "$ok:" if $ok;
         my $str = sprintf "%s %19s %-9s $ok $vstr $black_string\n",
                     install_string('checking_for'), $package, "($want_string)";
-        print $vok ? $str : colored($str, 'red');
+        print $vok ? $str : colored($str, COLOR_ERROR);
     }
     
     return $vok ? 1 : 0;
index 6621a7a4176b96f93c6f395dc7c8cb880ebcbafc..7bafa9330087fb582bb69b3fe0f066be18c7fe14 100644 (file)
@@ -32,6 +32,7 @@ use File::Basename;
 use POSIX qw(setlocale LC_CTYPE);
 use Safe;
 use Scalar::Util qw(tainted);
+use Term::ANSIColor qw(colored);
 
 use base qw(Exporter);
 our @EXPORT_OK = qw(
@@ -559,9 +560,25 @@ sub get_console_locale {
 sub init_console {
     eval { ON_WINDOWS && require Win32::Console::ANSI; };
     $ENV{'ANSI_COLORS_DISABLED'} = 1 if ($@ || !-t *STDOUT);
+    $SIG{__DIE__} = \&_console_die;
     prevent_windows_dialog_boxes();
 }
 
+sub _console_die {
+    my ($message) = @_;
+    # $^S means "we are in an eval"
+    if ($^S) {
+        die $message;
+    }
+    # Remove newlines from the message before we color it, and then
+    # add them back in on display. Otherwise the ANSI escape code
+    # for resetting the color comes after the newline, and Perl thinks
+    # that it should put "at Bugzilla/Install.pm line 1234" after the
+    # message.
+    $message =~ s/\n+$//;
+    die colored($message, COLOR_ERROR) . "\n";
+}
+
 sub prevent_windows_dialog_boxes {
     # This code comes from http://bugs.activestate.com/show_bug.cgi?id=82183
     # and prevents Perl modules from popping up dialog boxes, particularly