#!/bin/bash # This tool merges headers of two .po files and never loses extra info (e. g. plurals). # Usage: # msgheadermerge expected_older.po expected_newer.po dest-header.po [[--mergemode --continue]|--newdate|] # # [no switches]: Use newer po time from the two provides. # --mergemode: Fail if the expected_newer.po has older po time than # expected_older.po. # --mergemode --continue: Return error if the expected_newer.po has # older po time than expected_older.po (but # perform the operation). # --newdate: Always use expected_newer.po po time and skip all checks. rm -rf {${1%.po},${2%.po}}-msgheadermerge-temp.{merge-dir,order} trap "rm -rf {${1%.po},${2%.po}}-msgheadermerge-temp.{merge-dir,order} ${2%.po}-msgheadermerge-tempheader.po" 0 RC=0 # Broken pipe is an expected behavior. Redirect stderr to /dev/null. msgexec -i $1 $0-parse ${1%.po}-msgheadermerge-temp 2>/dev/null msgexec -i $2 $0-parse ${2%.po}-msgheadermerge-temp 2>/dev/null # Keep original POT date with --mergemode and fail for outdated PO: if test "$4" = --mergemode ; then rm ${2%.po}-msgheadermerge-temp.merge-dir/POT-Creation-Date if test ${2%.po}-msgheadermerge-temp.merge-dir/PO-Revision-Date -ot ${1%.po}-msgheadermerge-temp.merge-dir/PO-Revision-Date ; then if test "$5" = --continue ; then RC=1 else exit 1 fi fi else if test "$4" = --newdate ; then rm ${1%.po}-msgheadermerge-temp.merge-dir/PO-Revision-Date rm ${1%.po}-msgheadermerge-temp.merge-dir/POT-Creation-Date else if test ${2%.po}-msgheadermerge-temp.merge-dir/POT-Creation-Date -ot ${1%.po}-msgheadermerge-temp.merge-dir/POT-Creation-Date ; then rm ${2%.po}-msgheadermerge-temp.merge-dir/POT-Creation-Date fi if test ${2%.po}-msgheadermerge-temp.merge-dir/PO-Revision-Date -ot ${1%.po}-msgheadermerge-temp.merge-dir/PO-Revision-Date ; then rm ${2%.po}-msgheadermerge-temp.merge-dir/PO-Revision-Date fi fi fi # Old project version is the correct one: rm -f ${2%.po}-msgheadermerge-temp.merge-dir/Project-Id-Version mv ${2%.po}-msgheadermerge-temp.merge-dir/* ${1%.po}-msgheadermerge-temp.merge-dir/ cat ${1%.po}-msgheadermerge-temp.order >>${2%.po}-msgheadermerge-temp.order msgmerge --quiet --force-po $2 $0-empty.pot -o ${2%.po}-msgheadermerge-tempheader.po sed -i '/^#~/,$d' ${2%.po}-msgheadermerge-tempheader.po msgfilter --force-po -i ${2%.po}-msgheadermerge-tempheader.po -o $3 $0-compose ${1%.po}-msgheadermerge-temp.merge-dir ${2%.po}-msgheadermerge-temp.order exit $RC