Skip to content

Commit

Permalink
Use locale pragma instead of POSIX::set_locale()
Browse files Browse the repository at this point in the history
The Pragma is more likely to do the right thing, as confirmed by new
tests, which fail with the use of the French locale when using
`set_locale` and now succeed with `use locale`.
  • Loading branch information
theory committed Dec 30, 2023
1 parent 7edc536 commit cdee419
Show file tree
Hide file tree
Showing 19 changed files with 90 additions and 44 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/cockroach.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
steps:
- name: Start CockroachDB
run: docker run -d -p 26257:26257 cockroachdb/cockroach:latest-v${{ matrix.version }} start-single-node --insecure
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Perl
id: perl
uses: shogo82148/actions-setup-perl@v1
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ jobs:
run: rm -rf /opt/hostedtoolcache
- name: Start CockroachDB
run: docker run -d -p 26257:26257 cockroachdb/cockroach:latest start-single-node --insecure
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Perl
id: perl
uses: shogo82148/actions-setup-perl@v1
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/exasol.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
ports: [ 8563 ]
options: --privileged
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Clients
run: .github/ubuntu/exasol.sh
- name: Setup Perl
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/firebird.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
ISC_PASSWORD: nix
FIREBIRD_DATABASE: sqitchtest.db
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Clients
run: .github/ubuntu/firebird.sh
- name: Setup Perl
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/mysql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
ports: [ 3306 ]
options: --health-cmd="healthcheck.sh --innodb_initialized || mysqladmin ping --protocol=tcp" --health-interval=5s --health-timeout=2s --health-retries=3
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Clients
run: .github/ubuntu/mysql.sh
- name: Setup Perl
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/oracle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
--health-timeout 10s
--health-retries 10
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Clients
run: .github/ubuntu/oracle.sh
- name: Setup Perl
Expand Down
24 changes: 18 additions & 6 deletions .github/workflows/os.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,39 @@ jobs:
include:
- { icon: 🐧, os: ubuntu, name: Linux }
- { icon: 🍎, os: macos, name: macOS }
- { icon: 🪟, os: windows, name: Windows }
# - { icon: 🪟, os: windows, name: Windows }
name: ${{ matrix.icon }} ${{ matrix.name }}
runs-on: ${{ matrix.os }}-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Perl
id: perl
uses: shogo82148/actions-setup-perl@v1
with: { perl-version: latest }
- run: perl -V
- if: runner.os == 'Linux'
name: Install Apt Packages
run: sudo apt-get install -qq gettext language-pack-fr language-pack-en aspell-en
- if: runner.os == 'macOS'
name: Install Brew Packages
run: brew install gettext aspell
- if: runner.os == 'Windows'
name: Install Chocolatey Packages
run: choco install poedit
- name: Cache CPAN Modules
uses: actions/cache@v3
with:
path: local
key: perl-${{ steps.perl.outputs.perl-hash }}
- run: cpm install --verbose --show-build-log-on-failure --no-test --with-recommends ExtUtils::MakeMaker List::MoreUtils::XS
# Remove Locale::TextDomain if https://github.com/gflohr/libintl-perl/issues/7 fixed and released.
- if: ${{ matrix.os == 'windows' }}
run: cpm install --verbose --show-build-log-on-failure --no-test --with-recommends Encode Win32::Console::ANSI Win32API::Net Win32::Locale Win32::ShellQuote DateTime::TimeZone::Local::Win32 Locale::[email protected]
- if: runner.os == 'Windows'
run: cpm install --verbose --show-build-log-on-failure --no-test --with-recommends Encode Win32::Console::ANSI Win32API::Net Win32::Locale Win32::ShellQuote DateTime::TimeZone::Local::Win32
- run: cpm install --verbose --show-build-log-on-failure --no-test --with-recommends --cpanfile dist/cpanfile
- run: cpm install --verbose --show-build-log-on-failure --no-test --with-recommends Test::Spelling Test::Pod Test::Pod::Coverage
- run: cpm install --verbose --show-build-log-on-failure --no-test --with-recommends Test::Spelling Test::Pod Test::Pod::Coverage Dist::Zilla::LocaleTextDomain
- name: Compile Languages
run: |
dzil authordeps | xargs cpm install --verbose --show-build-log-on-failure --no-test
dzil msg-compile
- name: prove
env: { PERL5LIB: "${{ github.workspace }}/local/lib/perl5" }
run: prove -lrj4
24 changes: 18 additions & 6 deletions .github/workflows/perl.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,30 +11,42 @@ jobs:
Perl:
strategy:
matrix:
os: [[🐧, ubuntu], [🍎, macos], [🪟, windows]]
os: [[🐧, ubuntu], [🍎, macos]] #, [🪟, windows]]
perl: [ '5.38', '5.36', '5.34', '5.32', '5.30', '5.28', '5.26', '5.24', '5.22', '5.20', '5.18', '5.16', '5.14', '5.12' ]
exclude:
- { os: [🪟, windows], perl: '5.12' } # https://github.com/shogo82148/actions-setup-perl/issues/876
- { os: [🪟, windows], perl: '5.14' } # https://github.com/shogo82148/actions-setup-perl/issues/881
name: 🧅 Perl ${{ matrix.perl }} on ${{ matrix.os[0] }} ${{ matrix.os[1] }}
runs-on: ${{ matrix.os[1] }}-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Perl
id: perl
uses: shogo82148/actions-setup-perl@v1
with: { perl-version: "${{ matrix.perl }}" }
- run: perl -V
- if: runner.os == 'Linux'
name: Install Apt Packages
run: sudo apt-get install -qq gettext language-pack-fr language-pack-en aspell-en
- if: runner.os == 'macOS'
name: Install Brew Packages
run: brew install gettext aspell
- if: runner.os == 'Windows'
name: Install Chocolatey Packages
run: choco install poedit
- name: Cache CPAN Modules
uses: actions/cache@v3
with:
path: local
key: perl-${{ steps.perl.outputs.perl-hash }}
# Remove Locale::TextDomain if https://github.com/gflohr/libintl-perl/issues/7 fixed and released.
- if: ${{ matrix.os[1] == 'windows' }}
run: cpm install --verbose --show-build-log-on-failure --no-test --with-recommends Encode Win32::Console::ANSI Win32API::Net Win32::Locale Win32::ShellQuote DateTime::TimeZone::Local::Win32 Locale::[email protected]
- if: runner.os == 'Windows'
run: cpm install --verbose --show-build-log-on-failure --no-test --with-recommends Encode Win32::Console::ANSI Win32API::Net Win32::Locale Win32::ShellQuote DateTime::TimeZone::Local::Win32
- run: cpm install --verbose --show-build-log-on-failure --no-test --with-recommends --cpanfile dist/cpanfile
- run: cpm install --verbose --show-build-log-on-failure --no-test --with-recommends Test::Spelling Test::Pod Test::Pod::Coverage
- run: cpm install --verbose --show-build-log-on-failure --no-test --with-recommends Test::Spelling Test::Pod Test::Pod::Coverage Dist::Zilla::LocaleTextDomain
- name: Compile Languages
run: |
dzil authordeps | xargs cpm install --verbose --show-build-log-on-failure --no-test
dzil msg-compile
- name: prove
env: { PERL5LIB: "${{ github.workspace }}/local/lib/perl5" }
run: prove -lrj4
2 changes: 1 addition & 1 deletion .github/workflows/pg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
name: 🐘 Postgres ${{ matrix.pg }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Perl
id: perl
uses: shogo82148/actions-setup-perl@v1
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Check out the repo
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Setup Perl
id: perl
uses: shogo82148/actions-setup-perl@v1
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/snowflake.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
name: ❄️ Snowflake
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Clients
run: .github/ubuntu/snowflake.sh
- name: Setup Perl
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/sqlite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
name: 💡 SQLite ${{ matrix.sqlite }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Perl
id: perl
uses: shogo82148/actions-setup-perl@v1
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/vertica.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
image: ${{ matrix.image }}:${{ matrix.version }}
ports: [ 5433 ]
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Clients
run: .github/ubuntu/vertica.sh
- name: Setup Perl
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/yugabyte.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
uses: jameshartig/yugabyte-db-action@master
with:
yb_image_tag: "${{ matrix.tag }}"
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup Perl
id: perl
uses: shogo82148/actions-setup-perl@v1
Expand Down
3 changes: 3 additions & 0 deletions Changes
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ Revision history for Perl extension App::Sqitch
(#795)!
- Fixed Oracle and Firebird test failures due to incorrect use of `chmod`.
Thanks to Slaven Rezić for the report and the fix (#807)!
- Updated the locale configuration to fix issues in more recent versions
of Perl, and added tests to ensure that the sqitch CLI executes and
properly emits localized messages.

1.4.0 2023-08-01T23:37:30Z
- Fixed Snowflake warehouse and role setup to properly quote identifiers
Expand Down
11 changes: 1 addition & 10 deletions bin/sqitch
Original file line number Diff line number Diff line change
@@ -1,15 +1,6 @@
#!perl -w -CAS

# VERSION
use POSIX qw(setlocale);
BEGIN {
if ($^O eq 'MSWin32') {
require Win32::Locale;
setlocale POSIX::LC_ALL, Win32::Locale::get_locale();
} else {
setlocale POSIX::LC_ALL, '';
}
}
use locale;
use App::Sqitch;

exit App::Sqitch->go;
2 changes: 1 addition & 1 deletion dist.ini
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name = App-Sqitch
license = MIT
copyright_holder = "iovation Inc., David E. Wheeler"
copyright_year = 2012-2023
version = v1.4.1-dev
version = v1.4.1

[GatherDir]
exclude_filename = dist/cpanfile
Expand Down
10 changes: 1 addition & 9 deletions t/sqitch
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
#!/usr/bin/env perl -CAS

use POSIX qw(setlocale);
BEGIN {
if ($^O eq 'MSWin32') {
require Win32::Locale;
setlocale POSIX::LC_ALL, Win32::Locale::get_locale();
} else {
setlocale POSIX::LC_ALL, '';
}
}
use locale;
use FindBin;
use lib "$FindBin::Bin/../lib";
use App::Sqitch;
Expand Down
36 changes: 36 additions & 0 deletions xt/release/cli-locale.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/usr/bin/perl -w

use strict;
use warnings;
use Test::More tests => 3;
use File::Spec;
use Capture::Tiny qw(:all);

# Run `dzil msg-compile` first!
# LANG=de_DE.UTF-8 perl -Ilib -CAS -I. bin/sqitch help
my @cli = (qw(-Ilib -CAS -I.), File::Spec->catfile(qw(bin sqitch)));

# Each locale must be installed on the local system. Adding a new lang? Also add
# the relevant language-pack-XX package to os.yml and perl.yml.
for my $tc (
{ lang => '', err => q{"nonesuch" is not a valid command} },
{ lang => 'en_US', err => q{"nonesuch" is not a valid command} },
{ lang => 'fr_FR', err => q{"nonesuch" n'est pas une commande valide} },
) {
subtest $tc->{lang} || 'default' => sub {
local $ENV{LC_ALL} = "$tc->{lang}.UTF-8" if $tc->{lang};

# Test successful run.
my ($stdout, $stderr, $exit) = capture { system $^X, @cli, 'help' };
is $exit >> 8, 0, 'Should have exited normally';
like $stdout, qr/\AUsage\b/, 'Should have usage statement in STDOUT';
is $stderr, '', 'Should have no STDERR';

# Test localized error.
($stdout, $stderr, $exit) = capture { system $^X, @cli, 'nonesuch' };
is $exit >> 8, 2, 'Should have exit val 2';
is $stdout, '', 'Should have no STDOUT';
like $stderr, qr/\A\Q$tc->{err}/,
'Should have localized error message in STDERR';
};
}

0 comments on commit cdee419

Please sign in to comment.