git-merge-po
1 #!/bin/bash 2 # 3 # Custom Git merge driver - merges PO files using msgcat(1) 4 # 5 # To use this, 6 # git config merge.pofile.name "Gettext merge driver" 7 # git config merge.pofile.driver "src/po/git-merge-po %O %A %B" 8 # 9 # - When merging branches, conflicts in PO files will be maked with "#-#-#-#" 10 # 11 set -x 12 O="$1" 13 A="$2" 14 B="$3" 15 16 # Extract the PO header from the current branch (top of file until first empty line) 17 header="$(mktemp /tmp/merge-po.XXXX)" 18 sed -e '/^$/q' < "$A" > "$header" 19 20 # Merge files, then repair header 21 temp="$(mktemp /tmp/merge-po.XXXX)" 22 msgcat -o "$temp" "$A" "$B" 23 msgcat --use-first -o "$A" "$header" "$temp" 24 25 # Clean up 26 rm "$header" "$temp" 27 28 # Check for conflicts 29 conflicts=$(grep -c "#-#" "$A") 30 test "$conflicts" -gt 0 && exit 1 31 exit 0