#!/bin/bash # usage: $0 dir type [--nopull] [-u xyz-uvw|-ua|-uaf] # $1 base directory: string # $2 type: (src|bin|svn) # $4 option: --nopull {can be omitted} # ${4,5} update force mode: (-u lang1-lang2|-ua|-uaf) {can be omitted} # -u x: Update x, even if it appears up to date. # -ua: Update all that are out of date. # -uaf: Update all, even if they appear up to date. typeset -A long long[fra]=French long[deu]=German long[eng]=English long[spa]=Spanish typeset -A contrs contrs[deu-eng-bin]=\ '# Contributor: akane '$'\n' contrs[eng-deu-bin]=\ '# Contributor: akane '$'\n' contrs[fra-eng-bin]=\ '# Contributor: Benjamin Vanderford '$'\n' contrs[eng-fra-bin]=\ '# Contributor: Benjamin Vanderford '$'\n' typeset -A prepare prepare[deu-fra]=\ 'prepare() { cd $_lang sed -i '"'"'s/\(10\)\(100\>.*1 mit 100 Nullen\)/\1\^\2/'"'"' ${_lang}.tei } ' prepare[deu-fra-bin]=\ 'prepare() { cd $_lang dictzip -d ${_lang}.dict.dz sed -i '"'"'s/\(10\)\(100\>.*1 mit 100 Nullen\)/\1\^\2/'"'"' ${_lang}.dict dictzip ${_lang}.dict } ' . basic.sh function main { if [ "$#" -lt 2 ] then echo "Usage: $0 [-u -|-ua|-uaf]" >&2 exit 1 else cd "$1" || exit 1 fi type="$2" if [ "$3" = "--nopull" ] then nopull=true shift 3 else nopull=false shift 2 fi init if [[ "$type" == src ]] then handle_all src '' src "$@" elif [[ "$type" == bin ]] then handle_all bin -bin dictd "$@" elif [[ "$type" == svn ]] then handle_all_vcs svn -svn "$@" else echo "Type $type not supported." >&2 exit 1 fi } # $1 source type: (normal|vcs) # requires: $PWD == / function update { src_type=$1 echo "Updating ${lang}${ext} (${pkgver} -> ${convver})..." lang_a="${long[${lang%-*}]}" lang_b="${long[${lang#*-}]}" cp ../sample.PKGBUILD "$tmp" replace '%LANG%' "$lang" replace '%LANG_A%' "$lang_a" replace '%LANG_B%' "$lang_b" replace '%VER%' "$convver" replace '%CHECKSUM%' "$checksum" replace_line '%CONTRS%' "${contrs[${lang}${ext}]}" normal if [[ "$ver" == "$convver" ]] then delete_line '^_pkgver=\${pkgver\/\/_\/-}$' replace '_pkgver' 'pkgver' fi replace_line '%PREPARE%' "${prepare[${lang}${ext}]}" rm-plus-one mv "$tmp" PKGBUILD makepkg --printsrcinfo > .SRCINFO } # $1 type: (src|bin) # $2 suffix: (|-bin) # $3 platform: (src|dictd) # ${@:4} args: $@ # requires: $PWD == function handle_all { type="$1" ext="$2" platform="$3" shift 3 curl -sO https://freedict.org/freedict-database.json cd "$type" || exit 1 for lang in ${langs[@]} do cd dict-freedict-${lang}${ext} || exit 1 $nopull || git pull -q pkgver="$(grep pkgver .SRCINFO | sed -E 's/\s*pkgver\s*=\s*(.+)\s*/\1/')" data="$(jq -r ".[] | select(.name == \"${lang}\") | .releases[] | select(.platform==\"$platform\")" ../../freedict-database.json)" ver="$(jq -r '.version' <<< "$data")" url="$(jq -r '.URL' <<< "$data")" checksum="$(jq -r '.checksum' <<< "$data")" convver="${ver//-/_}" if [[ "$pkgver" != "$convver" ]] then echo "${lang}${ext} requires update (${pkgver} -> ${convver})." ureq=true else ureq=false fi if [[ "$url" != "https://download.freedict.org/dictionaries/${lang}/${ver}/freedict-${lang}-${ver}.${platform}.tar.xz" ]] then echo "${lang}${ext} URL changed (${url})." else if [[ "$1" == "-u" && "$2" == "$lang" ]] \ || ([[ "$1" == "-ua" ]] && $ureq) \ || [[ "$1" == "-uaf" ]] then update fi fi cd .. done cd .. } # $1 type: (svn) # $2 suffix: (-svn) # ${@:3} args: $@ # requires: $PWD == function handle_all_vcs { type="$1" ext="$2" shift 2 cd "$type" || exit 1 for lang in ${vcs_langs[@]} do cd dict-freedict-${lang}${ext} || exit 1 $nopull || git pull -q pkgver="$(grep pkgver .SRCINFO | sed -E 's/\s*pkgver\s*=\s*(.+)\s*/\1/')" makepkg --nobuild --nodeps > /dev/null 2>&1 ver="$(makepkg --printsrcinfo | grep pkgver \ | sed -E 's/\s*pkgver\s*=\s*(.+)\s*/\1/')" convver="$ver" if [[ "$1" == "-u" && "$2" == "$lang" ]] || [[ "$1" == "-uaf" ]] then update fi cd .. done cd .. } main "$@"