From 51f58f8e4d5c7409967f197ca6176be05608bb9e Mon Sep 17 00:00:00 2001 From: Matthias Andree Date: Sun, 14 Jun 2020 20:13:14 +0200 Subject: Update scripts to handle new translations. --- dist-tools/git-commit-po-updates.sh | 82 ++++++++++++++++++++++++++++--------- dist-tools/translators.sh | 5 ++- 2 files changed, 66 insertions(+), 21 deletions(-) diff --git a/dist-tools/git-commit-po-updates.sh b/dist-tools/git-commit-po-updates.sh index dcbc3965..969acd31 100755 --- a/dist-tools/git-commit-po-updates.sh +++ b/dist-tools/git-commit-po-updates.sh @@ -25,21 +25,20 @@ usage() { exit $1 } -dryrun_pfx= -docommit= -while getopts 'nc' opt ; do - case $opt in - n) dryrun_pfx=: ;; - c) docommit=y ;; - ?) - usage 2 ; - esac -done - -if [ -z "$dryrun_pfx" -a -z "$docommit" ] ; then usage 2 ; fi +# print and potentially run a shell command +run() { + cmd="$1 '$2'" + printf '+ %s\n' "$cmd" + $dryrun_pfx eval "$cmd" + return $? +} -git diff -G '^"(Project-Id-Version|PO-Revision-Date):' --name-only po/*.po \ -| while read pofile ; do +# try to parse features of a po file and build a git command +handle_po() { + pofile="$1" + logmsg1="$2" # "Update", or "Add new" + logmsg2="$3" # "to", or "for" + export logmsg1 logmsg2 if ! cmd="$(perl -WT - "$pofile" <<'_EOF' use Encode::Locale; use Encode; @@ -67,7 +66,7 @@ while(<>) $translator = Encode::decode($cset, $translator); if ($found) { - print Encode::encode(locale => "git commit --author '$translator' --date '$dat' -m 'Update <$lcod> $lang translation to $ver'", Encode::FB_CROAK); + print Encode::encode(locale => "git commit --author '$translator' --date '$dat' -m '$ENV{logmsg1} <$lcod> $lang translation $ENV{logmsg2} $ver'", Encode::FB_CROAK); } else { exit(1); } @@ -75,9 +74,54 @@ _EOF )" then echo >&2 "Parsing $pofile failed, skipping." - continue + return 23 + fi + run "$cmd" "$pofile" + return $? +} + +dryrun_pfx= +docommit= +while getopts 'nc' opt ; do + case $opt in + n) dryrun_pfx=: ;; + c) docommit=y ;; + ?) + usage 2 ; + esac +done + +rc=0 + +if [ -z "$dryrun_pfx" -a -z "$docommit" ] ; then usage 2 ; fi + +new_po_files=$(git status --porcelain=v1 po/*.po | egrep '^\?|^.\?' | cut -c4-) +printf "%s" "$new_po_files" \ +| while read nfile ; do + run "git add" "$nfile" + r=$? + handle_po "$nfile" "Add new" "for" + if [ $r -ne 0 -o $? -ne 0 ] ; then + echo "There were errors adding $nfile" >&2 ; rc=1 fi - cmd="$cmd '$pofile'" - printf '+ %s\n' "$cmd" - $dryrun_pfx eval "$cmd" done + + +git diff -G '^"(Project-Id-Version|PO-Revision-Date):' --name-only po/*.po \ +| while read pofile ; do + if ! handle_po "$pofile" "Update" "to" ; then + echo "There were errors updating $nfile" >&2 ; rc=1 + fi +done + +if [ -n "$new_po_files" ] ; then + printf "Remember to add these codes to po/LINGUAS:" + for i in $new_po_files ; do + j=${i%.po} + j=${j#po/} + printf " %s" "$j" + done + printf '\n' +fi + +exit $rc diff --git a/dist-tools/translators.sh b/dist-tools/translators.sh index ea6e7925..adf581ef 100755 --- a/dist-tools/translators.sh +++ b/dist-tools/translators.sh @@ -4,8 +4,9 @@ set -eu cd "$(realpath $(dirname $0))/.." ver=$(sed -n '/Project-Id-Version:/s/.*fetchmail \([^\\]\+\).*/\1/p' po/fetchmail.pot ) -git log --oneline --all-match --grep "Update .* translation to fetchmail.$ver" --pretty=format:%ad:%an:%s --date=unix | \ -sed 's/Update <\([^>]\+\)> \(.*\) translation to.*/\1:\2/' | \ +expver=${VERSION:-$ver} +git log --oneline --all-match --grep ".* translation ...\\? fetchmail.$expver" --pretty=format:%ad:%an:%s --date=unix | \ + sed 's/\(Update\|Add new\) <\([^>]\+\)> \(.*\) translation .*/\2:\3/' | \ sort -n | \ while IFS=: read date author code lang ; do printf '* %-6s %s [%s]\n' "$code:" "$author" "$lang" -- cgit v1.2.3