mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-05-22 12:11:16 -03:00
Add dry-run mode to update_translations.fish
This mode is intended for testing if the PO files are up-to-date and well-formed. At the moment, we only check translations in CI, where this is not particularly relevant. Once we no longer need `cargo-expand` (e.g. via https://github.com/fish-shell/fish-shell/pull/11536) we can extend the `check_translations.fish` test to run `update_translations.fish --dry-run` and fail if the exit status is nonzero.
This commit is contained in:
@@ -17,6 +17,10 @@
|
||||
# - Specify the language you want to work on as an argument, which must be a file in the po/
|
||||
# directory. You can specify a language which does not have translations yet by specifying the
|
||||
# name of a file which does not yet exist. Make sure to follow the naming convention.
|
||||
# For testing:
|
||||
# - Specify `--dry-run` to see if any updates to the PO files would by applied by this script.
|
||||
# If this flag is specified, the script will exit with an error if there are outstanding
|
||||
# changes, and will display the diff. Do not specify other flags if `--dry-run` is specified.
|
||||
|
||||
# The sort utility is locale-sensitive.
|
||||
# Ensure that sorting output is consistent by setting LC_ALL here.
|
||||
@@ -30,9 +34,22 @@ set -l extract
|
||||
set -l po
|
||||
set -l mo
|
||||
|
||||
argparse --exclusive 'no-mo,only-mo' 'no-mo' 'only-mo' -- $argv
|
||||
function cleanup_exit
|
||||
set -l exit_status $status
|
||||
|
||||
if set -g --query tmpdir
|
||||
rm -r $tmpdir
|
||||
end
|
||||
|
||||
exit $exit_status
|
||||
end
|
||||
|
||||
argparse --exclusive 'no-mo,only-mo,dry-run' 'no-mo' 'only-mo' 'dry-run' -- $argv
|
||||
or exit $status
|
||||
|
||||
# Make sure that the template file is not included in $po_files.
|
||||
rm $template_file 2>/dev/null
|
||||
|
||||
if test -z $argv[1]
|
||||
# Update everything if not specified otherwise.
|
||||
set -g po_files $po_dir/*.po
|
||||
@@ -71,10 +88,28 @@ if set -l --query extract
|
||||
or exit 1
|
||||
end
|
||||
|
||||
# Protect from externally set $tmpdir leaking into this script.
|
||||
set -g --erase tmpdir
|
||||
if set -l --query _flag_dry_run
|
||||
# On a dry run, we do not modify po/ but write to a temporary directory instead and check if
|
||||
# there is a difference between po/ and the tmpdir after re-generating the PO files.
|
||||
set -g tmpdir (mktemp -d)
|
||||
|
||||
# On a dry-run, we do not update the MO files.
|
||||
set -l --erase mo
|
||||
|
||||
# Ensure tmpdir has the same initial state as the po dir.
|
||||
cp -r $po_dir/* $tmpdir
|
||||
end
|
||||
|
||||
for po_file in $po_files
|
||||
if set -g --query tmpdir
|
||||
set po_file $tmpdir/(basename $po_file)
|
||||
end
|
||||
if set -l --query po
|
||||
if test -e $po_file
|
||||
msgmerge --update --no-fuzzy-matching --no-wrap --backup=none $po_file $template_file
|
||||
msgmerge --update --no-fuzzy-matching --no-wrap --backup=none --quiet $po_file $template_file
|
||||
or cleanup_exit
|
||||
else
|
||||
cp $template_file $po_file
|
||||
end
|
||||
@@ -86,3 +121,13 @@ for po_file in $po_files
|
||||
msgfmt --check-format --output-file=$out_dir/fish.mo $po_file
|
||||
end
|
||||
end
|
||||
|
||||
rm $template_file
|
||||
|
||||
if set -g --query tmpdir
|
||||
rm $tmpdir/template.po
|
||||
diff -ur po $tmpdir
|
||||
or cleanup_exit
|
||||
end
|
||||
|
||||
cleanup_exit
|
||||
|
||||
Reference in New Issue
Block a user