From 9d45fe6b329cbae295ed83d90dd20c5fc3e70717 Mon Sep 17 00:00:00 2001 From: Einhard Leichtfuß Date: Fri, 30 Mar 2018 16:03:12 +0200 Subject: Modularise and generalise Modularisation: - Use new functions replace(), replace_line() and delete_line() instead of sed directly. This required all editing to be done in-line or pseudo in-line, i.e. moving files afterwards. Generalisation: - Make it work for both the non-vcs source and the binary packages, not only the former. A separate function handle_all() has been set up to handle both types. Further: - Require a directory to be supplied as argument due to a variable number of further arguments. - Use a temporary directory instead of several files. - Add option -uaf to forcibly update everything. --- src/update.sh | 128 ------------------------------------------ update.sh | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 174 insertions(+), 128 deletions(-) delete mode 100755 src/update.sh create mode 100755 update.sh diff --git a/src/update.sh b/src/update.sh deleted file mode 100755 index 50720e7..0000000 --- a/src/update.sh +++ /dev/null @@ -1,128 +0,0 @@ -#!/bin/bash - -if [ "$#" -ne 0 ] -then - cd "$1" || exit 1 -fi - -typeset -a langs -langs=( - fra-deu deu-fra - deu-eng eng-deu - fra-eng eng-fra - spa-eng eng-spa - ) - -typeset -A long -long[fra]=French -long[deu]=German -long[eng]=English -long[spa]=Spanish - -typeset -A contrs -contrs[deu-eng]=\ -'# Contributor: akane '$'\n' -contrs[eng-deu]=\ -'# Contributor: akane '$'\n' -contrs[fra-eng]=\ -'# Contributor: Benjamin Vanderford '$'\n' -contrs[eng-fra]=\ -'# 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 -} -' - - -# $1: lang to update -function update -{ - echo "Updating $lang ($pkgver -> $convver)..." - - lang_a="${long[${lang%-*}]}" - lang_b="${long[${lang#*-}]}" - - checksum="$(wget -qO - "$url" | sha512sum | sed -E 's/\s*-$//')" - - tmp="$(mktemp)" - tmp_="$(mktemp)" - - sed -e "s/%LANG%/${lang}/" \ - -e "s/%LANG_A%/${lang_a}/; s/%LANG_B%/${lang_b}/" \ - -e "s/%VER%/${convver}/" \ - -e "s/%CHECKSUM%/${checksum}/" \ - < ../sample.PKGBUILD \ - > "$tmp" - - if test -n "${contrs[$lang]}" - then - cat <(sed '/%CONTRS%/,$ d' < "$tmp") \ - <(echo -n "${contrs[$lang]}") \ - <(sed '0,/%CONTRS%/ d' < "$tmp") \ - > "$tmp_" - else - sed '/%CONTRS%/ d' < "$tmp" > "$tmp_" - fi - - if [[ "$ver" == "$convver" ]] - then - sed -i \ - -e '/^_pkgver=\${pkgver\/\/_\/-}$/ d' \ - -e 's/_pkgver/pkgver/g' \ - "$tmp_" - fi - - if test -n "${prepare[$lang]}" - then - cat <(sed '/%PREPARE%/,$ d' < "$tmp_") \ - <(echo -n "${prepare[$lang]}") \ - <(sed '0,/%PREPARE%/ d' < "$tmp_") \ - > PKGBUILD - else - sed '/%PREPARE%/,+1 d' < "$tmp_" > PKGBUILD - fi - - makepkg --printsrcinfo > .SRCINFO - - rm "$tmp" "$tmp_" -} - - -curl -sO http://freedict.org/freedict-database.json - - -for lang in ${langs[@]} -do - cd dict-freedict-${lang} - git pull -q - pkgver="$(grep pkgver .SRCINFO | sed -E 's/\s*pkgver\s*=\s*(.+)\s*/\1/')" - ver="$(jq -r ".[] | select(.name == \"${lang}\") | .releases[] | select(.platform==\"src\") | .version" ../freedict-database.json)" - url="$(jq -r ".[] | select(.name == \"${lang}\") | .releases[] | select(.platform==\"src\") | .URL" ../freedict-database.json)" - url="${url%/download}" - convver="${ver//-/_}" - - if [[ "$pkgver" != "$convver" ]] - then - echo "$lang requires update ($pkgver -> $convver)." - urq=true - else - urq=false - fi - - if [[ "$url" != "https://sourceforge.net/projects/freedict/files/${lang}/${ver}/freedict-${lang}-${ver}.src.tar.xz" ]] - then - echo "$lang URL changed ($url)." - else - if [[ "$1" == "-u" && "$2" == "$lang" ]] || ([[ "$1" == "-ua" ]] && $urq) - then - update "$2" - fi - fi - - cd .. -done diff --git a/update.sh b/update.sh new file mode 100755 index 0000000..a3d3863 --- /dev/null +++ b/update.sh @@ -0,0 +1,174 @@ +#!/bin/bash +# usage: $0 dir [-u xyz-uvw|-ua|-uaf] + +cd "$1" || exit 1 +shift + +typeset -a langs +langs=( + fra-deu deu-fra + deu-eng eng-deu + fra-eng eng-fra + spa-eng eng-spa + ) + +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 +} +' + +# $1: string to replace: regular expression +# $2: string to replace with: sed replacement string +function replace +{ + sed -i "s/${1}/${2}/g" "$tmp" +} + +# $1 line to replace: regular expression +# $2 text to replace with: (newline terminated) sed replacement string +# $3 removal type: (rm-plus-one|normal) +function replace_line +{ + if test -n "$2" + then + cat <(sed "/${1}/,\$ d" < "$tmp") \ + <(echo -n "$2") \ + <(sed "0,/${1}/ d" < "$tmp") \ + > "$tmp_" + mv "$tmp_" "$tmp" + else + if [[ "$3" == rm-plus-one ]] + then + sed -i "/${1}/,+1 d" "$tmp" + else + sed -i "/${1}/ d" "$tmp" + fi + fi +} + +# $1 line to delete: regular expression +function delete_line +{ + sed -i "/${1}/ d" "$tmp" +} + +function update +{ + echo "Updating ${lang}${ext} (${pkgver} -> ${convver})..." + + lang_a="${long[${lang%-*}]}" + lang_b="${long[${lang#*-}]}" + + checksum="$(wget -qO - "$url" | sha512sum | sed -E 's/\s*-$//')" + + tmp_d="$(mktemp -d)" + tmp="$tmp_d/a" + tmp_="$tmp_d/b" + + 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 + + rm -r "$tmp_d" +} + +# $1 type: (src|bin) +# $2 suffix: (|-bin) +# $3 platform: (src|dictd) +# ${@:4} args: $@ +function handle_all +{ + type="$1" + ext="$2" + platform="$3" + shift 3 + + cd "$type" + + for lang in ${langs[@]} + do + cd dict-freedict-${lang}${ext} + git pull -q + pkgver="$(grep pkgver .SRCINFO | sed -E 's/\s*pkgver\s*=\s*(.+)\s*/\1/')" + ver="$(jq -r ".[] | select(.name == \"${lang}\") | .releases[] | select(.platform==\"$platform\") | .version" ../../freedict-database.json)" + url="$(jq -r ".[] | select(.name == \"${lang}\") | .releases[] | select(.platform==\"$platform\") | .URL" ../../freedict-database.json)" + url="${url%/download}" + convver="${ver//-/_}" + + if [[ "$pkgver" != "$convver" ]] + then + echo "${lang}${ext} requires update (${pkgver} -> ${convver})." + ureq=true + else + ureq=false + fi + + if [[ "$url" != "https://sourceforge.net/projects/freedict/files/${lang}/${ver}/freedict-${lang}-${ver}.${platform}.tar.xz" ]] + then + echo "${lang}${ext} URL changed (${url})." + else + if [[ "$1" == "-u" && "$2" == "$lang${ext}" ]] \ + || ([[ "$1" == "-ua" ]] && $ureq) \ + || [[ "$1" == "-uaf" ]] + then + update + fi + fi + + cd .. + done + + cd .. +} + + +curl -sO http://freedict.org/freedict-database.json + +handle_all src '' src "$@" +handle_all bin -bin dictd "$@" -- cgit v1.2.3