aboutsummaryrefslogtreecommitdiff
path: root/update.bash
diff options
context:
space:
mode:
authorEinhard Leichtfuß <alguien@respiranto.de>2022-04-29 14:58:55 +0200
committerEinhard Leichtfuß <alguien@respiranto.de>2022-04-29 14:58:55 +0200
commit915faab9c074a0a30b8321c3836d0b35f475e94d (patch)
tree522b4109f2d43ff06db001b329ec1e09884cf6c8 /update.bash
parent90a0069d9bb72bf3caf59e2411a144f9e3afd2d3 (diff)
Use proper .bash suffix
Diffstat (limited to 'update.bash')
-rwxr-xr-xupdate.bash211
1 files changed, 211 insertions, 0 deletions
diff --git a/update.bash b/update.bash
new file mode 100755
index 0000000..324dfa1
--- /dev/null
+++ b/update.bash
@@ -0,0 +1,211 @@
+#!/usr/bin/env bash
+#
+# update.bash - script to check for updates and perform them (on the PKGBUILDs)
+#
+# Copyright 2018,2022 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 <https://www.gnu.org/licenses/>.
+#
+
+# 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.bash" || exit 1
+
+
+function main
+{
+ if [ "$#" -lt 2 ]
+ then
+ echo "Usage: $0 <base_dir> <type> [--nopull] [-u <xy>-<zw>|-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 == <base directory>/<type>/<lang>
+#
+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 == <base directory>
+#
+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 == <base directory>
+#
+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 "$@"