#!/usr/bin/env bash # # update.sh - script to check for updates and perform them (on the PKGBUILDs) # # Copyright 2018 Einhard Leichtfuß # # This file is part of aur-fd-scripts # # aur-fd-scripts is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # aur-fd-scripts is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with aur-fd-scripts. If not, see . # # 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. script_path="$(realpath "$0")" script_dir="${script_path%/*}" . "${script_dir}/basic.sh" || exit 1 function main { if [ "$#" -lt 2 ] then echo "Usage: $0 [--nopull] [-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 } # Update PKGBUILD and .SRCINFO # # requires: $lang, $ext, $type, $ver, $convver to be set; # $PWD == // # function update { echo "Updating ${lang}${ext} (${pkgver} -> ${convver})..." lang_a="${long[${lang%-*}]}" lang_b="${long[${lang#*-}]}" input "${script_dir}/${type}/sample.PKGBUILD" replace '%MAINTAINER%' "$maintainer" replace '%LANG%' "$lang" replace '%LANG_A%' "$lang_a" replace '%LANG_B%' "$lang_b" replace '%VER%' "$convver" replace '%LICENSES%' "${licenses[$lang]}" 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 write PKGBUILD makepkg --printsrcinfo > .SRCINFO } # Check for updates for src / bin packages and optionally update them. # # $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 -sSO https://freedict.org/freedict-database.json || exit 1 cd "$type" || exit 1 for lang in ${langs[@]} do cd $lang || exit 1 $nopull || git pull -q pkgver="$(sed -En 's/\s*pkgver\s*=\s*(.+)\s*/\1/p' .SRCINFO)" 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 .. } # Check for updates for VCS (svn) packages and optionally update them. # # $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 $lang || exit 1 $nopull || git pull -q pkgver="$(sed -En 's/\s*pkgver\s*=\s*(.+)\s*/\1/p' .SRCINFO)" makepkg --nobuild --nodeps > /dev/null 2>&1 ver="$(makepkg --printsrcinfo \ | sed -En 's/\s*pkgver\s*=\s*(.+)\s*/\1/p')" convver="$ver" if [[ "$1" == "-u" && "$2" == "$lang" ]] || [[ "$1" == "-uaf" ]] then update fi cd .. done cd .. } main "$@"