mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-05-25 23:21:15 -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/
|
# - 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
|
# 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.
|
# 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.
|
# The sort utility is locale-sensitive.
|
||||||
# Ensure that sorting output is consistent by setting LC_ALL here.
|
# Ensure that sorting output is consistent by setting LC_ALL here.
|
||||||
@@ -30,9 +34,22 @@ set -l extract
|
|||||||
set -l po
|
set -l po
|
||||||
set -l mo
|
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
|
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]
|
if test -z $argv[1]
|
||||||
# Update everything if not specified otherwise.
|
# Update everything if not specified otherwise.
|
||||||
set -g po_files $po_dir/*.po
|
set -g po_files $po_dir/*.po
|
||||||
@@ -71,10 +88,28 @@ if set -l --query extract
|
|||||||
or exit 1
|
or exit 1
|
||||||
end
|
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
|
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 set -l --query po
|
||||||
if test -e $po_file
|
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
|
else
|
||||||
cp $template_file $po_file
|
cp $template_file $po_file
|
||||||
end
|
end
|
||||||
@@ -86,3 +121,13 @@ for po_file in $po_files
|
|||||||
msgfmt --check-format --output-file=$out_dir/fish.mo $po_file
|
msgfmt --check-format --output-file=$out_dir/fish.mo $po_file
|
||||||
end
|
end
|
||||||
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