From: Max Kanat-Alexander Date: Wed, 11 Aug 2010 10:20:30 +0000 (-0700) Subject: Bug 586210: Make every important string printed by checksetup.pl localizable, X-Git-Tag: bugzilla-4.1.1~316 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6715b4dbad317ac79ff55c3c761cf6af58651a26;p=thirdparty%2Fbugzilla.git Bug 586210: Make every important string printed by checksetup.pl localizable, including the localconfig parameter descriptions r=mkanat, a=mkanat (module owner) --- diff --git a/Bugzilla/DB/Mysql.pm b/Bugzilla/DB/Mysql.pm index 699fcfdf63..1829bc450d 100644 --- a/Bugzilla/DB/Mysql.pm +++ b/Bugzilla/DB/Mysql.pm @@ -316,12 +316,7 @@ sub bz_setup_database { my ($innodb_on) = @{$self->selectcol_arrayref( q{SHOW VARIABLES LIKE '%have_innodb%'}, {Columns=>[2]})}; if ($innodb_on ne 'YES') { - die <bz_table_list_real())) { - die("\nYou are upgrading from a version before 2.20, but the" - . " bz_schema\ntable already exists. This means that you" - . " restored a mysqldump into\nthe Bugzilla database without" - . " first dropping the already-existing\nBugzilla database," - . " at some point. Whenever you restore a Bugzilla\ndatabase" - . " backup, you must always drop the entire database first.\n\n" - . "Please drop your Bugzilla database and restore it from a" - . " backup that\ndoes not contain the bz_schema table. If for" - . " some reason you cannot\ndo this, you can connect to your" - . " MySQL database and drop the bz_schema\ntable, as a last" - . " resort.\n"); + die install_string('bz_schema_exists_before_220'); } my $bug_count = $self->selectrow_array("SELECT COUNT(*) FROM bugs"); @@ -447,12 +432,8 @@ EOT # If we're going to take longer than 5 minutes, we let the user know # and allow them to abort. if ($rename_time > 5) { - print "\nWe are about to rename old indexes.\n" - . "The estimated time to complete renaming is " - . "$rename_time minutes.\n" - . "You cannot interrupt this action once it has begun.\n" - . "If you would like to cancel, press Ctrl-C now..." - . " (Waiting 45 seconds...)\n\n"; + print "\n", install_string('mysql_index_renaming', + { minutes => $rename_time }); # Wait 45 seconds for them to respond. sleep(45) unless Bugzilla->installation_answers->{NO_PAUSE}; } @@ -685,36 +666,16 @@ EOT my @non_utf8_tables = grep(defined($_->{Collation}) && $_->{Collation} !~ /^utf8/, @$utf_table_status); if (Bugzilla->params->{'utf8'} && scalar @non_utf8_tables) { - print <installation_answers->{NO_PAUSE}) { if (Bugzilla->installation_mode == INSTALLATION_MODE_NON_INTERACTIVE) { - print <do("INSERT INTO quips (quip) VALUES (?)", undef, $_); } - print < $datadir }), "\n"; $comments->close; rename("$datadir/comments", "$datadir/comments.bak") || warn "Failed to rename: $!"; @@ -1861,9 +1853,9 @@ sub _remove_spaces_and_commas_from_flagtypes { if (length($tryflagname) > 50) { my $lastchanceflagname = (substr $tryflagname, 0, 47) . '...'; if (defined($flagtypes{$lastchanceflagname})) { - print " ... last attempt as \"$lastchanceflagname\" still failed.'\n", - "Rename the flag by hand and run checksetup.pl again.\n"; - die("Bad flag type name $flagname"); + print " ... last attempt as \"$lastchanceflagname\" still failed.'\n"; + die install_string('update_flags_bad_name', + { flag => $flagname }), "\n"; } $tryflagname = $lastchanceflagname; } @@ -2747,12 +2739,7 @@ sub _change_short_desc_from_mediumtext_to_varchar { FROM bugs WHERE CHAR_LENGTH(short_desc) > 255'); if (@$long_summary_bugs) { - print <prepare( 'INSERT INTO longdescs (bug_id, who, thetext, bug_when) VALUES (?, ?, ?, NOW())'); @@ -2761,10 +2748,9 @@ EOT my @affected_bugs; foreach my $bug (@$long_summary_bugs) { my ($bug_id, $summary, $reporter_id) = @$bug; - my $summary_comment = "The original summary for this bug" - . " was longer than 255 characters, and so it was truncated" - . " when Bugzilla was upgraded. The original summary was:" - . "\n\n$summary"; + my $summary_comment = + install_string('update_summary_truncate_comment', + { summary => $summary }); $comment_sth->execute($bug_id, $reporter_id, $summary_comment); my $short_summary = substr($summary, 0, 252) . "..."; $desc_sth->execute($short_summary, $bug_id); @@ -2849,12 +2835,8 @@ sub _move_data_nomail_into_db { # If there are any nomail entries remaining, move them to nomail.bad # and say something to the user. if (scalar(keys %nomail)) { - print < $datadir }), "\n"; my $nomail_bad = new IO::File("$datadir/nomail.bad", '>>'); foreach my $unknown_user (keys %nomail) { print "\t$unknown_user\n"; @@ -3281,9 +3263,10 @@ sub _fix_invalid_custom_field_names { next if $field->name =~ /^[a-zA-Z0-9_]+$/; # The field name is illegal and can break the DB. Kill the field! $field->set_obsolete(1); - print "Removing custom field '" . $field->name . "' (illegal name)... "; + print install_string('update_cf_invalid_name', + { field => $field->name }), "\n"; eval { $field->remove_from_db(); }; - print $@ ? "failed:\n$@\n" : "succeeded\n"; + warn $@ if $@; } } diff --git a/Bugzilla/Install/Localconfig.pm b/Bugzilla/Install/Localconfig.pm index d5d76cb799..956d3c72e3 100644 --- a/Bugzilla/Install/Localconfig.pm +++ b/Bugzilla/Install/Localconfig.pm @@ -31,7 +31,7 @@ package Bugzilla::Install::Localconfig; use strict; use Bugzilla::Constants; -use Bugzilla::Install::Util qw(bin_loc); +use Bugzilla::Install::Util qw(bin_loc install_string); use Bugzilla::Util qw(generate_random_password); use Data::Dumper; @@ -50,169 +50,66 @@ use constant LOCALCONFIG_VARS => ( { name => 'create_htaccess', default => 1, - desc => < block -# in the httpd.conf file that has 'AllowOverride Limit' in it. If it has -# 'AllowOverride All' or other options with Limit, that's fine. -# (Older Apache installations may use an access.conf file to store these -# blocks.) -# If this is set to 1, Bugzilla will create these files if they don't exist. -# If this is set to 0, Bugzilla will not create these files. -EOT }, { name => 'webservergroup', default => ON_WINDOWS ? '' : 'apache', - desc => q{# Usually, this is the group your web server runs as. -# If you have a Windows box, ignore this setting. -# If you have use_suexec switched on below, this is the group Apache switches -# to in order to run Bugzilla scripts. -# If you do not have access to the group your scripts will run under, -# set this to "". If you do set this to "", then your Bugzilla installation -# will be _VERY_ insecure, because some files will be world readable/writable, -# and so anyone who can get local access to your machine can do whatever they -# want. You should only have this set to "" if this is a testing installation -# and you cannot set this up any other way. YOU HAVE BEEN WARNED! -# If you set this to anything other than "", you will need to run checksetup.pl -# as} . ROOT_USER . qq{, or as a user who is a member of the specified group.\n} }, { name => 'use_suexec', default => 0, - desc => < 'db_driver', default => 'mysql', - desc => < 'db_host', - default => 'localhost', - desc => - "# The DNS name of the host that the database server runs on.\n" + default => 'localhost', }, { name => 'db_name', default => 'bugs', - desc => "# The name of the database\n" }, { name => 'db_user', default => 'bugs', - desc => "# Who we connect to the database as.\n" }, { name => 'db_pass', default => '', - desc => < 'db_port', default => 0, - desc => < 'db_sock', default => '', - desc => < 'db_check', default => 1, - desc => < 'index_html', default => 0, - desc => < 'cvsbin', - default => \&_get_default_cvsbin, - desc => < sub { bin_loc('cvs') }, }, { name => 'interdiffbin', - default => \&_get_default_interdiffbin, - desc => < sub { bin_loc('interdiff') }, }, { name => 'diffpath', - default => \&_get_default_diffpath, - desc => < sub { dirname(bin_loc('diff')) }, }, { name => 'site_wide_secret', default => sub { generate_random_password(256) }, - desc => <rdo($filename); if ($@ || $!) { my $err_msg = $@ ? $@ : $!; - die < $err_msg, localconfig => $filename }), "\n"; } my @read_symbols; @@ -336,15 +223,7 @@ sub update_localconfig { } if (!$localconfig->{'interdiffbin'} && $output) { - print < $filename, old_file => $filename_old, + vars => $oldstuff }), "\n"; } # Re-write localconfig open(my $fh, ">$filename") || die "$filename: $!"; foreach my $var (LOCALCONFIG_VARS) { - print $fh "\n", $var->{desc}, - Data::Dumper->Dump([$localconfig->{$var->{name}}], - ["*$var->{name}"]); + my $name = $var->{name}; + my $desc = install_string("localconfig_$name", { root => ROOT_USER }); + chomp($desc); + # Make the description into a comment. + $desc =~ s/^/# /mg; + print $fh $desc, "\n", + Data::Dumper->Dump([$localconfig->{$name}], + ["*$name"]), "\n"; } if (@new_vars) { my $newstuff = join(', ', @new_vars); - print < $filename, new_vars => $newstuff }), "\n"; exit; } @@ -402,13 +275,6 @@ EOT return { old_vars => \@old_vars, new_vars => \@new_vars }; } -sub _get_default_cvsbin { return bin_loc('cvs') } -sub _get_default_interdiffbin { return bin_loc('interdiff') } -sub _get_default_diffpath { - my $diff_bin = bin_loc('diff'); - return dirname($diff_bin); -} - 1; __END__ diff --git a/Bugzilla/Install/Requirements.pm b/Bugzilla/Install/Requirements.pm index 12a9c20c57..25dc15665a 100644 --- a/Bugzilla/Install/Requirements.pm +++ b/Bugzilla/Install/Requirements.pm @@ -501,16 +501,19 @@ sub _translate_feature { sub check_graphviz { my ($output) = @_; - return 1 if (Bugzilla->params->{'webdotbase'} =~ /^https?:/); + my $webdotbase = Bugzilla->params->{'webdotbase'}; + return 1 if $webdotbase =~ /^https?:/; - printf("Checking for %15s %-9s ", "GraphViz", "(any)") if $output; + my $checking_for = install_string('checking_for'); + my $any = install_string('any'); + printf("%s %15s %-9s ", $checking_for, "GraphViz", "($any)") if $output; my $return = 0; - if(-x Bugzilla->params->{'webdotbase'}) { - print "ok: found\n" if $output; + if(-x $webdotbase) { + print install_string('module_ok'), "\n" if $output; $return = 1; } else { - print "not a valid executable: " . Bugzilla->params->{'webdotbase'} . "\n"; + print install_string('bad_executable', { bin => $webdotbase }), "\n"; } my $webdotdir = bz_locations()->{'webdotdir'}; @@ -519,8 +522,8 @@ sub check_graphviz { my $htaccess = new IO::File("$webdotdir/.htaccess", 'r') || die "$webdotdir/.htaccess: " . $!; if (!grep(/png/, $htaccess->getlines)) { - print "Dependency graph images are not accessible.\n"; - print "delete $webdotdir/.htaccess and re-run checksetup.pl to fix.\n"; + print STDERR install_string('webdot_bad_htaccess', + { dir => $webdotdir }), "\n"; } $htaccess->close; } diff --git a/template/en/default/setup/strings.txt.pl b/template/en/default/setup/strings.txt.pl index 62b6456727..1c1f295a4c 100644 --- a/template/en/default/setup/strings.txt.pl +++ b/template/en/default/setup/strings.txt.pl @@ -28,7 +28,20 @@ %strings = ( any => 'any', + bad_executable => 'not a valid executable: ##bin##', blacklisted => '(blacklisted)', + bz_schema_exists_before_220 => <<'END', +You are upgrading from a version before 2.20, but the bz_schema table +already exists. This means that you restored a mysqldump into the Bugzilla +database without first dropping the already-existing Bugzilla database, +at some point. Whenever you restore a Bugzilla database backup, you must +always drop the entire database first. + +Please drop your Bugzilla database and restore it from a backup that does +not contain the bz_schema table. If for some reason you cannot do this, you +can connect to your MySQL database and drop the bz_schema table, as a last +resort. +END checking_for => 'Checking for', checking_dbd => 'Checking available perl DBD modules...', checking_optional => 'The following Perl modules are optional:', @@ -44,11 +57,31 @@ EOT COMMANDS TO INSTALL REQUIRED MODULES (You *must* run all these commands and then re-run this script): EOT + continue_without_answers => <<'END', +Re-run checksetup.pl in interactive mode (without an 'answers' file) +to continue. +END + cpan_bugzilla_home => + "WARNING: Using the Bugzilla directory as the CPAN home.", db_enum_setup => "Setting up choices for standard drop-down fields:", db_schema_init => "Initializing bz_schema...", db_table_new => "Adding new table ##table##...", db_table_setup => "Creating tables...", done => 'done.', + enter_or_ctrl_c => "Press Enter to continue or Ctrl-C to exit...", + error_localconfig_read => <<'END', +An error has occurred while reading the ##localconfig## file. The text of +the error message is: + +##error## + +Please fix the error in the localconfig file. Alternately, rename your +localconfig file and re-run checksetup.pl to have it create a new +localconfig file: + + $ mv -f localconfig localconfig.old + $ ./checksetup.pl +END extension_must_return_name => <1 or a number. See @@ -92,6 +125,130 @@ then the value of the ##column## column that needs to be fixed: EOT install_module => 'Installing ##module## version ##version##...', installation_failed => '*** Installation aborted. Read the messages above. ***', + lc_new_vars => <<'END', +This version of Bugzilla contains some variables that you may want to +change and adapt to your local settings. Please edit the file +##localconfig## and then rerun checksetup.pl. + +The following variables are new to ##localconfig## since you last ran +checksetup.pl: ##new_vars## +END + lc_old_vars => <<'END', +The following variables are no longer used in ##localconfig##, and +have been moved to ##old_file##: ##vars## +END + localconfig_create_htaccess => <<'END', +If you are using Apache as your web server, Bugzilla can create .htaccess +files for you, which will keep this file (localconfig) and other +confidential files from being read over the web. + +If this is set to 1, checksetup.pl will create .htaccess files if +they don't exist. + +If this is set to 0, checksetup.pl will not create .htaccess files. +END + localconfig_cvsbin => <<'END', +If you want to use the CVS integration of the Patch Viewer, please specify +the full path to the "cvs" executable here. +END + localconfig_db_check => <<'END', +Should checksetup.pl try to verify that your database setup is correct? +With some combinations of database servers/Perl modules/moonphase this +doesn't work, and so you can try setting this to 0 to make checksetup.pl +run. +END + localconfig_db_driver => <<'END', +What SQL database to use. Default is mysql. List of supported databases +can be obtained by listing Bugzilla/DB directory - every module corresponds +to one supported database and the name of the module (before ".pm") +corresponds to a valid value for this variable. +END + localconfig_db_host => <<'END', +The DNS name or IP address of the host that the database server runs on. +END + localconfig_db_name => +"The name of the database. For Oracle, this is the database's SID.", + localconfig_db_pass => <<'END', +Enter your database password here. It's normally advisable to specify +a password for your bugzilla database user. +If you use apostrophe (') or a backslash (\) in your password, you'll +need to escape it by preceding it with a '\' character. (\') or (\) +(It is far simpler to just not use those characters.) +END + localconfig_db_port => <<'END', +Sometimes the database server is running on a non-standard port. If that's +the case for your database server, set this to the port number that your +database server is running on. Setting this to 0 means "use the default +port for my database server." +END + localconfig_db_sock => <<'END', +MySQL Only: Enter a path to the unix socket for MySQL. If this is +blank, then MySQL's compiled-in default will be used. You probably +want that. +END + localconfig_db_user => "Who we connect to the database as.", + localconfig_diffpath => <<'END', +For the "Difference Between Two Patches" feature to work, we need to know +what directory the "diff" bin is in. (You only need to set this if you +are using that feature of the Patch Viewer.) +END + localconfig_index_html => <<'END', +Most web servers will allow you to use index.cgi as a directory +index, and many come preconfigured that way, but if yours doesn't +then you'll need an index.html file that provides redirection +to index.cgi. Setting $index_html to 1 below will allow +checksetup.pl to create an index.html for you if it doesn't exist. +NOTE: checksetup.pl will not replace an existing file, so if you + wish to have checksetup.pl create one for you, you must + make sure that index.html doesn't already exist. +END + localconfig_interdiffbin => <<'END', +If you want to use the "Difference Between Two Patches" feature of the +Patch Viewer, please specify the full path to the "interdiff" executable +here. +END + localconfig_site_wide_secret => <<'END', +This secret key is used by your installation for the creation and +validation of encrypted tokens. These tokens are used to implement +security features in Bugzilla, to protect against certain types of attacks. +A random string is generated by default. It's very important that this key +is kept secret. It also must be very long. +END + localconfig_use_suexec => <<'END', +Set this to 1 if Bugzilla runs in an Apache SuexecUserGroup environment. + +If your web server runs control panel software (cPanel, Plesk or similar), +or if your Bugzilla is to run in a shared hosting environment, then you are +almost certainly in an Apache SuexecUserGroup environment. + +If this is a Windows box, ignore this setting, as it does nothing. + +If set to 0, checksetup.pl will set file permissions appropriately for +a normal webserver environment. + +If set to 1, checksetup.pl will set file permissions so that Bugzilla +works in a SuexecUserGroup environment. +END + localconfig_webservergroup => <<'END', +The name of the group that your web server runs as. On Red Hat +distributions, this is usually "apache". On Debian/Ubuntu, it is +usually "www-data". + +If you have use_suexec turned on below, then this is instead the name +of the group that your web server switches to to run cgi files. + +If this is a Windows machine, ignore this setting, as it does nothing. + +If you do not have access to the group your scripts will run under, +set this to "". If you do set this to "", then your Bugzilla installation +will be _VERY_ insecure, because some files will be world readable/writable, +and so anyone who can get local access to your machine can do whatever they +want. You should only have this set to "" if this is a testing installation +and you cannot set this up any other way. YOU HAVE BEEN WARNED! + +If you set this to anything other than "", you will need to run checksetup.pl +as ##root## or as a user who is a member of the specified group. +END max_allowed_packet => < "not found", module_ok => 'ok', module_unknown_version => "found unknown version", + mysql_innodb_disabled => <<'END', +InnoDB is disabled in your MySQL installation. +Bugzilla requires InnoDB to be enabled. +Please enable it and then re-run checksetup.pl. +END + mysql_index_renaming => <<'END', +We are about to rename old indexes. The estimated time to complete +renaming is ##minutes## minutes. You cannot interrupt this action once +it has begun. If you would like to cancel, press Ctrl-C now... +(Waiting 45 seconds...) +END + mysql_utf8_conversion => <<'END', +WARNING: We are about to convert your table storage format to UTF-8. This + allows Bugzilla to correctly store and sort international characters. + However, if you have any non-UTF-8 data in your database, + it ***WILL BE DELETED*** by this process. So, before + you continue with checksetup.pl, if you have any non-UTF-8 + data (or even if you're not sure) you should press Ctrl-C now + to interrupt checksetup.pl, and run contrib/recode.pl to make all + the data in your database into UTF-8. You should also back up your + database before continuing. This will affect every single table + in the database, even non-Bugzilla tables. + + 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. +END + patchutils_missing => <<'END', +OPTIONAL NOTE: If you want to be able to use the 'difference between two +patches' feature of Bugzilla (which requires the PatchReader Perl module +as well), you should install patchutils from: + + http://cyberelk.net/tim/patchutils/ +END ppm_repo_add => < "Removing existing compiled templates...", + update_cf_invalid_name => + "Removing custom field '##field##', because it has an invalid name...", + update_flags_bad_name => <<'END', +"##flag##" is not a valid name for a flag. Rename it to not have any spaces +or commas. +END + update_nomail_bad => <<'END', +WARNING: The following users were listed in ##data##/nomail, but do +not have an account here. The unmatched entries have been moved to +##data##/nomail.bad: +END + update_summary_truncate_comment => + "The original value of the Summary field was longer than 255" + . " characters, and so it was truncated during an upgrade." + . " The original summary was:\n\n##summary##", + update_summary_truncating => <<'END', +WARNING: Some of your bugs had summaries longer than 255 characters. +They have had their original summary copied into a comment, and then +the summary was truncated to 255 characters. The affected bug numbers were: +END + update_quips => <<'END', +Quips are now stored in the database, rather than in an external file. +The quips previously stored in ##data##/comments have been copied into +the database, and that file has been renamed to ##data##/comments.bak +You may delete the renamed file once you have confirmed that all your +quips were moved successfully. +END + webdot_bad_htaccess => <