aboutsummaryrefslogtreecommitdiffstats
path: root/dist-tools/git-commit-po-updates.sh
diff options
context:
space:
mode:
Diffstat (limited to 'dist-tools/git-commit-po-updates.sh')
-rwxr-xr-xdist-tools/git-commit-po-updates.sh36
1 files changed, 23 insertions, 13 deletions
diff --git a/dist-tools/git-commit-po-updates.sh b/dist-tools/git-commit-po-updates.sh
index 8f633d88..dcbc3965 100755
--- a/dist-tools/git-commit-po-updates.sh
+++ b/dist-tools/git-commit-po-updates.sh
@@ -4,12 +4,13 @@
# Assumes translation updates are visible to git,
# and one directory above.
#
-# © Copyright 2019 by Matthias Andree.
+# © Copyright 2019 - 2020 by Matthias Andree.
# Licensed under the GNU General Public License V2 or,
# at your choice, any later version.
#
-# Supported options:
+# Supported modes:
# -n: dry-run, only print commands, but do not run them.
+# -c: commit, print commands and run them.
set -eu
@@ -19,45 +20,54 @@ cd "$(realpath $(dirname $0))/.."
# and implicitly fail (set -e) if it hasn't.
perl -MCarp::Always -e ''
+usage() {
+ printf 'Usage: %s {-n|-c}\n-n: dry-run; -c: commit\n' "$0"
+ exit $1
+}
+
dryrun_pfx=
-while getopts 'n' opt ; do
+docommit=
+while getopts 'nc' opt ; do
case $opt in
n) dryrun_pfx=: ;;
- ?) printf 'Usage: %s [-n]\n' "$0" ;
- exit 2 ;
+ c) docommit=y ;;
+ ?)
+ usage 2 ;
esac
done
-git diff -G ^.Project-Id-Version --name-only po/*.po \
-| while read pofile ; do
+if [ -z "$dryrun_pfx" -a -z "$docommit" ] ; then usage 2 ; fi
+
+git diff -G '^"(Project-Id-Version|PO-Revision-Date):' --name-only po/*.po \
+| while read pofile ; do
if ! cmd="$(perl -WT - "$pofile" <<'_EOF'
use Encode::Locale;
use Encode;
use strict;
use Carp::Always ();
use warnings FATAL => 'uninitialized';
-my ($ver, $dat, $trl, $lang, $lcod, $cset, $found);
+my ($ver, $dat, $translator, $lang, $lcod, $cset, $found);
while(<>)
{
if (/^"Project-Id-Version: (.+)\\n"/) { $ver=$1; };
if (/^"PO-Revision-Date: (.+)\\n"/) { $dat=$1; };
- if (/^"Last-Translator: (.+)\\n"/) { $trl=$1; };
+ if (/^"Last-Translator: (.+)\\n"/) { $translator=$1; };
if (/^"Language-Team: ([^<]+?)\s+<.*>\\n"/)
{ $lang=$1; };
if (/^"Language: (.+)\\n"/) { $lcod=$1; };
if (/^"Content-Type: text\/plain; charset=(.+)\\n"/)
{ $cset = $1; };
- if ($ver and $dat and $trl and $lang and $lcod and $cset) {
+ if ($ver and $dat and $translator and $lang and $lcod and $cset) {
$found = 1;
- last;
+ last;
}
}
-$trl = Encode::decode($cset, $trl);
+$translator = Encode::decode($cset, $translator);
if ($found) {
- print Encode::encode(locale => "git commit --author '$trl' --date '$dat' -m 'Update <$lcod> $lang translation to $ver'", Encode::FB_CROAK);
+ print Encode::encode(locale => "git commit --author '$translator' --date '$dat' -m 'Update <$lcod> $lang translation to $ver'", Encode::FB_CROAK);
} else {
exit(1);
}