scripts: Add check for POTFILES
This commit is contained in:
parent
c2848743c7
commit
04ec63a31d
1 changed files with 159 additions and 0 deletions
|
@ -41,6 +41,45 @@ fail="${neg}fail${res}"
|
||||||
force_install=0
|
force_install=0
|
||||||
verbose=0
|
verbose=0
|
||||||
|
|
||||||
|
# Helper functions
|
||||||
|
# Sort to_sort in natural order.
|
||||||
|
sort() {
|
||||||
|
local size=${#to_sort[@]}
|
||||||
|
local swapped=0;
|
||||||
|
|
||||||
|
for (( i = 0; i < $size-1; i++ ))
|
||||||
|
do
|
||||||
|
swapped=0
|
||||||
|
for ((j = 0; j < $size-1-$i; j++ ))
|
||||||
|
do
|
||||||
|
if [[ "${to_sort[$j]}" > "${to_sort[$j+1]}" ]]
|
||||||
|
then
|
||||||
|
temp="${to_sort[$j]}";
|
||||||
|
to_sort[$j]="${to_sort[$j+1]}";
|
||||||
|
to_sort[$j+1]="$temp";
|
||||||
|
swapped=1;
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ $swapped -eq 0 ]]; then
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove common entries in to_diff1 and to_diff2.
|
||||||
|
diff() {
|
||||||
|
for i in ${!to_diff1[@]}; do
|
||||||
|
for j in ${!to_diff2[@]}; do
|
||||||
|
if [[ "${to_diff1[$i]}" == "${to_diff2[$j]}" ]]; then
|
||||||
|
unset to_diff1[$i]
|
||||||
|
unset to_diff2[$j]
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
# Check if rustup is available.
|
# Check if rustup is available.
|
||||||
# Argument:
|
# Argument:
|
||||||
# '-i' to install if missing.
|
# '-i' to install if missing.
|
||||||
|
@ -231,6 +270,124 @@ run_typos() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Check if files in POTFILES.in are correct.
|
||||||
|
#
|
||||||
|
# This checks, in that order:
|
||||||
|
# - All files exist
|
||||||
|
# - All files with translatable strings are present and only those
|
||||||
|
# - Files are sorted alphabetically
|
||||||
|
#
|
||||||
|
# This assumes the following:
|
||||||
|
# - POTFILES is located at 'po/POTFILES.in'
|
||||||
|
# - UI (Glade) files are located in 'data/resources/ui' and use 'translatable="yes"'
|
||||||
|
# - Rust files are located in 'src' and use '*gettext' methods or macros
|
||||||
|
check_potfiles() {
|
||||||
|
echo -e "$Checking po/POTFILES.in…"
|
||||||
|
|
||||||
|
local ret=0
|
||||||
|
|
||||||
|
# Check that files in POTFILES exist.
|
||||||
|
while read -r line; do
|
||||||
|
if [[ -n $line && ${line::1} != '#' ]]; then
|
||||||
|
if [[ ! -f $line ]]; then
|
||||||
|
echo -e "$error File '$line' in POTFILES.in does not exist"
|
||||||
|
ret=1
|
||||||
|
fi
|
||||||
|
if [[ ${line:(-3):3} == '.ui' ]]; then
|
||||||
|
ui_potfiles+=($line)
|
||||||
|
elif [[ ${line:(-3):3} == '.rs' ]]; then
|
||||||
|
rs_potfiles+=($line)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done < po/POTFILES.in
|
||||||
|
|
||||||
|
if [[ ret -eq 1 ]]; then
|
||||||
|
echo -e " Checking po/POTFILES.in result: $fail"
|
||||||
|
echo "Please fix the above issues"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get UI files with 'translatable="yes"'.
|
||||||
|
ui_files=(`grep -lIr 'translatable="yes"' data/resources/ui/*`)
|
||||||
|
|
||||||
|
# Get Rust files with regex 'gettext[!]?\('.
|
||||||
|
rs_files=(`grep -lIrE 'gettext[!]?\(' src/*`)
|
||||||
|
|
||||||
|
# Remove common files
|
||||||
|
to_diff1=("${ui_potfiles[@]}")
|
||||||
|
to_diff2=("${ui_files[@]}")
|
||||||
|
diff
|
||||||
|
ui_potfiles=("${to_diff1[@]}")
|
||||||
|
ui_files=("${to_diff2[@]}")
|
||||||
|
|
||||||
|
to_diff1=("${rs_potfiles[@]}")
|
||||||
|
to_diff2=("${rs_files[@]}")
|
||||||
|
diff
|
||||||
|
rs_potfiles=("${to_diff1[@]}")
|
||||||
|
rs_files=("${to_diff2[@]}")
|
||||||
|
|
||||||
|
potfiles_count=$((${#ui_potfiles[@]} + ${#rs_potfiles[@]}))
|
||||||
|
if [[ $potfiles_count -eq 1 ]]; then
|
||||||
|
echo ""
|
||||||
|
echo -e "$error Found 1 file in POTFILES.in without translatable strings:"
|
||||||
|
ret=1
|
||||||
|
elif [[ $potfiles_count -ne 0 ]]; then
|
||||||
|
echo ""
|
||||||
|
echo -e "$error Found $potfiles_count files in POTFILES.in without translatable strings:"
|
||||||
|
ret=1
|
||||||
|
fi
|
||||||
|
for file in ${ui_potfiles[@]}; do
|
||||||
|
echo $file
|
||||||
|
done
|
||||||
|
for file in ${rs_potfiles[@]}; do
|
||||||
|
echo $file
|
||||||
|
done
|
||||||
|
|
||||||
|
let files_count=$((${#ui_files[@]} + ${#rs_files[@]}))
|
||||||
|
if [[ $files_count -eq 1 ]]; then
|
||||||
|
echo ""
|
||||||
|
echo -e "$error Found 1 file with translatable strings not present in POTFILES.in:"
|
||||||
|
ret=1
|
||||||
|
elif [[ $files_count -ne 0 ]]; then
|
||||||
|
echo ""
|
||||||
|
echo -e "$error Found $files_count with translatable strings not present in POTFILES.in:"
|
||||||
|
ret=1
|
||||||
|
fi
|
||||||
|
for file in ${ui_files[@]}; do
|
||||||
|
echo $file
|
||||||
|
done
|
||||||
|
for file in ${rs_files[@]}; do
|
||||||
|
echo $file
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ ret -eq 1 ]]; then
|
||||||
|
echo ""
|
||||||
|
echo -e " Checking po/POTFILES.in result: $fail"
|
||||||
|
echo "Please fix the above issues"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check sorted alphabetically
|
||||||
|
to_sort=("${potfiles[@]}")
|
||||||
|
sort
|
||||||
|
for i in ${!potfiles[@]}; do
|
||||||
|
if [[ "${potfiles[$i]}" != "${to_sort[$i]}" ]]; then
|
||||||
|
echo -e "$error Found file '${potfiles[$i]}' before '${to_sort[$i]}' in POTFILES.in"
|
||||||
|
ret=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ ret -eq 1 ]]; then
|
||||||
|
echo ""
|
||||||
|
echo -e " Checking po/POTFILES.in result: $fail"
|
||||||
|
echo "Please fix the above issues"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo -e " Checking po/POTFILES.in result: $ok"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Check arguments
|
# Check arguments
|
||||||
while [[ "$1" ]]; do case $1 in
|
while [[ "$1" ]]; do case $1 in
|
||||||
-f | --force-install )
|
-f | --force-install )
|
||||||
|
@ -254,3 +411,5 @@ echo ""
|
||||||
run_rustfmt
|
run_rustfmt
|
||||||
echo ""
|
echo ""
|
||||||
run_typos
|
run_typos
|
||||||
|
echo ""
|
||||||
|
check_potfiles
|
Loading…
Reference in a new issue