From 30c3740f67b84121cc29af7bf99e8091dd5d46b6 Mon Sep 17 00:00:00 2001 From: fabrixxm Date: Fri, 1 Oct 2021 17:19:16 +0200 Subject: [PATCH 1/2] Fix `run_xgettext.sh` code and make it work on osx - run script thru `shellcheck` and fix code - replace `readlink -f` with a function which works on osx too - set flags to stop on errors --- bin/run_xgettext.sh | 57 ++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/bin/run_xgettext.sh b/bin/run_xgettext.sh index 5392e0e15..933682da5 100755 --- a/bin/run_xgettext.sh +++ b/bin/run_xgettext.sh @@ -1,9 +1,20 @@ #!/bin/bash -FULLPATH=$(dirname $(readlink -f "$0")) +set -eo pipefail -if [ "$1" == "--help" -o "$1" == "-h" ] +function resolve { + if [ "$(uname)" == "Darwin" ] + then + realpath "$1" + else + readlink -f "$1" + fi +} + +FULLPATH=$(dirname "$(resolve "$0")") + +if [ "$1" == "--help" ] || [ "$1" == "-h" ] then - echo "$(basename $(readlink -f "$0")) [options]" + echo "$(basename "$(resolve "$0")") [options]" echo echo "-a | --addon extract strings from addon 'name'" echo "-s | --single single addon mode: extract string from current folder" @@ -12,15 +23,15 @@ fi MODE='default' ADDONNAME= -if [ "$1" == "--addon" -o "$1" == "-a" ] +if [ "$1" == "--addon" ] || [ "$1" == "-a" ] then MODE='addon' - if [ -z $2 ]; then echo -e "ERROR: missing addon name\n\nrun_xgettext.sh -a "; exit 1; fi + if [ -z "$2" ]; then echo -e "ERROR: missing addon name\n\nrun_xgettext.sh -a "; exit 1; fi ADDONNAME=$2 if [ ! -d "$FULLPATH/../addon/$ADDONNAME" ]; then echo "ERROR: addon '$ADDONNAME' not found"; exit 2; fi fi -if [ "$1" == "--single" -o "$1" == "-s" ] +if [ "$1" == "--single" ] || [ "$1" == "-s" ] then MODE='single' fi @@ -36,7 +47,7 @@ case "$MODE" in ;; 'single') FULLPATH=$PWD - ADDONNAME=$(basename $FULLPATH) + ADDONNAME=$(basename "$FULLPATH") mkdir -p "$FULLPATH/lang/C" OUTFILE="$FULLPATH/lang/C/messages.po" FINDSTARTDIR="." @@ -61,6 +72,7 @@ KEYWORDS="-k -kt -ktt:1,2" echo "Extract strings to $OUTFILE.." rm "$OUTFILE"; touch "$OUTFILE" +# shellcheck disable=SC2086 # FINDOPTS is meant to be splitted find_result=$(find "$FINDSTARTDIR" $FINDOPTS -name "*.php" -type f | LC_ALL=C sort --stable) total_files=$(wc -l <<< "${find_result}") @@ -74,38 +86,39 @@ do # On Windows, find still outputs the name of pruned folders if [ ! -d "$file" ] then + # shellcheck disable=SC2086 # KEYWORDS is meant to be splitted xgettext $KEYWORDS -j -o "$OUTFILE" --from-code=UTF-8 "$file" || exit 1 - sed -i "s/CHARSET/UTF-8/g" "$OUTFILE" + sed -i.bkp "s/CHARSET/UTF-8/g" "$OUTFILE" fi done echo -ne "\n" echo "Interpolate metadata.." -sed -i "s/^\"Plural-Forms.*$//g" "$OUTFILE" +sed -i.bkp "s/^\"Plural-Forms.*$//g" "$OUTFILE" case "$MODE" in 'addon'|'single') - sed -i "s/SOME DESCRIPTIVE TITLE./ADDON $ADDONNAME/g" "$OUTFILE" - sed -i "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER//g" "$OUTFILE" - sed -i "s/FIRST AUTHOR , YEAR.//g" "$OUTFILE" - sed -i "s/PACKAGE VERSION//g" "$OUTFILE" - sed -i "s/PACKAGE/Friendica $ADDONNAME addon/g" "$OUTFILE" + sed -i.bkp "s/SOME DESCRIPTIVE TITLE./ADDON $ADDONNAME/g" "$OUTFILE" + sed -i.bkp "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER//g" "$OUTFILE" + sed -i.bkp "s/FIRST AUTHOR , YEAR.//g" "$OUTFILE" + sed -i.bkp "s/PACKAGE VERSION//g" "$OUTFILE" + sed -i.bkp "s/PACKAGE/Friendica $ADDONNAME addon/g" "$OUTFILE" ;; 'default') - sed -i "s/SOME DESCRIPTIVE TITLE./FRIENDICA Distributed Social Network/g" "$OUTFILE" - sed -i "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER/2010-$(date +%Y), the Friendica project/g" "$OUTFILE" - sed -i "s/FIRST AUTHOR , YEAR./Mike Macgirvin, 2010/g" "$OUTFILE" - sed -i "s/PACKAGE VERSION/$F9KVERSION/g" "$OUTFILE" - sed -i "s/PACKAGE/Friendica/g" "$OUTFILE" + sed -i.bkp "s/SOME DESCRIPTIVE TITLE./FRIENDICA Distributed Social Network/g" "$OUTFILE" + sed -i.bkp "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER/2010-$(date +%Y), the Friendica project/g" "$OUTFILE" + sed -i.bkp "s/FIRST AUTHOR , YEAR./Mike Macgirvin, 2010/g" "$OUTFILE" + sed -i.bkp "s/PACKAGE VERSION/$F9KVERSION/g" "$OUTFILE" + sed -i.bkp "s/PACKAGE/Friendica/g" "$OUTFILE" ;; esac -if [ "" != "$1" -a "$MODE" == "default" ] +if [ "" != "$1" ] && [ "$MODE" == "default" ] then - UPDATEFILE="$(readlink -f ${FULLPATH}/$1)" + UPDATEFILE="$(resolve "${FULLPATH}/$1")" echo "Merging new strings to $UPDATEFILE.." - msgmerge -U $OUTFILE $UPDATEFILE + msgmerge -U "$OUTFILE" "$UPDATEFILE" fi echo "Done." From f5d73cb89a8aad4b3f70c78eb15f1828e5073f0a Mon Sep 17 00:00:00 2001 From: fabrixxm Date: Sat, 2 Oct 2021 14:45:25 +0200 Subject: [PATCH 2/2] Fix comments, remove sed bkp files, fix bash compatiblity --- bin/run_xgettext.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bin/run_xgettext.sh b/bin/run_xgettext.sh index 933682da5..427325e02 100755 --- a/bin/run_xgettext.sh +++ b/bin/run_xgettext.sh @@ -36,7 +36,6 @@ then MODE='single' fi - case "$MODE" in 'addon') cd "$FULLPATH/../addon/$ADDONNAME" @@ -72,24 +71,25 @@ KEYWORDS="-k -kt -ktt:1,2" echo "Extract strings to $OUTFILE.." rm "$OUTFILE"; touch "$OUTFILE" -# shellcheck disable=SC2086 # FINDOPTS is meant to be splitted +# shellcheck disable=SC2086 # $FINDOPTS is meant to be split find_result=$(find "$FINDSTARTDIR" $FINDOPTS -name "*.php" -type f | LC_ALL=C sort --stable) total_files=$(wc -l <<< "${find_result}") +count=1 for file in $find_result do - ((count++)) echo -ne " \r" echo -ne "Reading file $count/$total_files..." # On Windows, find still outputs the name of pruned folders if [ ! -d "$file" ] then - # shellcheck disable=SC2086 # KEYWORDS is meant to be splitted + # shellcheck disable=SC2086 # $KEYWORDS is meant to be split xgettext $KEYWORDS -j -o "$OUTFILE" --from-code=UTF-8 "$file" || exit 1 sed -i.bkp "s/CHARSET/UTF-8/g" "$OUTFILE" fi + (( count++ )) done echo -ne "\n" @@ -121,4 +121,6 @@ then msgmerge -U "$OUTFILE" "$UPDATEFILE" fi +[ -f "$OUTFILE.bkp" ] && rm "$OUTFILE.bkp" + echo "Done."