Bug 382398: Make checksetup.pl localized messages be output in the
console's charset r=timello, a=mkanat git-svn-id: svn://10.0.0.236/trunk@260611 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -1 +1 @@
|
||||
7256
|
||||
7257
|
||||
@@ -44,7 +44,7 @@ use Bugzilla::Extension;
|
||||
use Bugzilla::DB;
|
||||
use Bugzilla::Install::Localconfig qw(read_localconfig);
|
||||
use Bugzilla::Install::Requirements qw(OPTIONAL_MODULES);
|
||||
use Bugzilla::Install::Util;
|
||||
use Bugzilla::Install::Util qw(init_console);
|
||||
use Bugzilla::Template;
|
||||
use Bugzilla::User;
|
||||
use Bugzilla::Error;
|
||||
@@ -82,7 +82,12 @@ use constant SHUTDOWNHTML_EXIT_SILENTLY => qw(
|
||||
|
||||
# Note that this is a raw subroutine, not a method, so $class isn't available.
|
||||
sub init_page {
|
||||
(binmode STDOUT, ':utf8') if Bugzilla->params->{'utf8'};
|
||||
if (Bugzilla->usage_mode == USAGE_MODE_CMDLINE) {
|
||||
init_console();
|
||||
}
|
||||
elsif (Bugzilla->params->{'utf8'}) {
|
||||
binmode STDOUT, ':utf8';
|
||||
}
|
||||
|
||||
if (${^TAINT}) {
|
||||
# Some environment variables are not taint safe
|
||||
|
||||
@@ -541,6 +541,10 @@ sub have_vers {
|
||||
my $wanted = $params->{version};
|
||||
|
||||
eval "require $module;";
|
||||
# Don't let loading a module change the output-encoding of STDOUT
|
||||
# or STDERR. (CGI.pm tries to set "binmode" on these file handles when
|
||||
# it's loaded, and other modules may do the same in the future.)
|
||||
Bugzilla::Install::Util::set_output_encoding();
|
||||
|
||||
# VERSION is provided by UNIVERSAL::, and can be called even if
|
||||
# the module isn't loaded.
|
||||
|
||||
@@ -28,11 +28,13 @@ use strict;
|
||||
|
||||
use Bugzilla::Constants;
|
||||
|
||||
use Encode;
|
||||
use File::Basename;
|
||||
use POSIX qw(setlocale LC_CTYPE);
|
||||
use Safe;
|
||||
use Scalar::Util qw(tainted);
|
||||
use Term::ANSIColor qw(colored);
|
||||
use PerlIO;
|
||||
|
||||
use base qw(Exporter);
|
||||
our @EXPORT_OK = qw(
|
||||
@@ -47,7 +49,6 @@ our @EXPORT_OK = qw(
|
||||
include_languages
|
||||
template_include_path
|
||||
vers_cmp
|
||||
get_console_locale
|
||||
init_console
|
||||
);
|
||||
|
||||
@@ -569,11 +570,44 @@ sub get_console_locale {
|
||||
return $locale;
|
||||
}
|
||||
|
||||
sub set_output_encoding {
|
||||
# If we've already set an encoding layer on STDOUT, don't
|
||||
# add another one.
|
||||
my @stdout_layers = PerlIO::get_layers(STDOUT);
|
||||
return if grep(/^encoding/, @stdout_layers);
|
||||
|
||||
my $encoding;
|
||||
if (ON_WINDOWS and eval { require Win32::Console }) {
|
||||
# Although setlocale() works on Windows, it doesn't always return
|
||||
# the current *console's* encoding. So we use OutputCP here instead,
|
||||
# when we can.
|
||||
$encoding = Win32::Console::OutputCP();
|
||||
}
|
||||
else {
|
||||
my $locale = setlocale(LC_CTYPE);
|
||||
if ($locale =~ /\.([^\.]+)$/) {
|
||||
$encoding = $1;
|
||||
}
|
||||
}
|
||||
$encoding = "cp$encoding" if ON_WINDOWS;
|
||||
|
||||
$encoding = Encode::resolve_alias($encoding) if $encoding;
|
||||
if ($encoding and $encoding !~ /utf-8/i) {
|
||||
binmode STDOUT, ":encoding($encoding)";
|
||||
binmode STDERR, ":encoding($encoding)";
|
||||
}
|
||||
else {
|
||||
binmode STDOUT, ':utf8';
|
||||
binmode STDERR, ':utf8';
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
set_output_encoding();
|
||||
}
|
||||
|
||||
sub _console_die {
|
||||
|
||||
@@ -62,12 +62,6 @@ use Bugzilla::Install::Util qw(install_string get_version_and_os init_console);
|
||||
# When we're running at the command line, we need to pick the right
|
||||
# language before ever displaying any string.
|
||||
init_console();
|
||||
# Required for displaying strings from install_string, which are always
|
||||
# in UTF-8, in every language. For other scripts, Bugzilla::init_page
|
||||
# handles this, but here we just need to assume that checksetup.pl output
|
||||
# is always UTF-8 in order for install_string to work properly in other
|
||||
# languages.
|
||||
binmode STDOUT, ':utf8';
|
||||
|
||||
my %switch;
|
||||
GetOptions(\%switch, 'help|h|?', 'check-modules', 'no-templates|t',
|
||||
|
||||
Reference in New Issue
Block a user