#!/bin/bash usage() { >&2 echo 'Verwendung: ' >&2 echo " $0"' [--32] [-f|--force] [-n|--no-cache] [-j|--jobs=${jobs}]' >&2 echo ' --32: Versionen in archlinux32 statt archlinuxewe prüfen' >&2 echo ' -f|--force|--noUpdate: prüfe Versionen unhabhängig von Zeit der letzten Prüfung' >&2 echo ' -j|--jobs: Anzahl parallel auszufuehrender Anfragen' >&2 echo ' -m: maschinenlesbare Ausgabe erzeugen' exit 1 } curl_it() { local source="$1" local cache_file local i cache_file=$( { printf '%s\n' "$1" printf '%s\n' "$@" | \ sort -u } | \ sha512sum | \ awk '{print $1}' ) shift cache_file="${curl_cache}/${cache_file}" if ${use_cache} && \ [ -s "${cache_file}" ] && \ [ $(stat -c%Y "${cache_file}") -gt $(($(date +%s)-300)) ] && ! grep -qiF 'access denied' "${cache_file}"; then cat "${cache_file}" return fi tmp_file=$(mktemp) for i in {1..5}; do curl --compressed -o "${tmp_file}" --connect-timeout 10 -s -x socks5h://127.0.0.1:9050 "$@" "${source}" if grep -qiF "$( printf '%s\n' \ 'access denied' \ 'Repository seems to be empty' )" "${tmp_file}"; then : >"${tmp_file}" fi if [ -s "${tmp_file}" ]; then break fi done if [ ! -s "${tmp_file}" ]; then curl --compressed -o "${tmp_file}" --connect-timeout 10 -s "$@" "${source}" fi cat "${tmp_file}" local trials if grep -qiF "$( printf '%s\n' \ 'access denied' \ 'Repository seems to be empty' )" "${tmp_file}"; then trials=-1 else trials=5 while [ ${trials} -gt 0 ] && \ ! mv "${tmp_file}" "${cache_file}"; do sleep 1 trials=$((trials-1)) done fi if [ ${trials} -le 0 ]; then rm -f "${tmp_file}" fi } latest_version() { if [ "x$1" = 'xperl' ]; then local versions versions=$(cat) printf '%s\n' "${versions}" \ | if printf '%s\n' "${versions}" \ | grep -q '\..*\.'; then sort -V else sort -g fi else sort -V fi \ | tail -n1 } me="$(readlink -f $0)" cd $(dirname "${me}") versionenDatei="/var/cache/$(basename "$(dirname "${me}")")/lastVersions" curl_cache="/var/cache/$(basename "$(dirname "${me}")")/curl-cache" jobs=50 maschinenlesbar=false force=false unForce=false archlinuxewe=true eval set -- "$( getopt \ -o fj:mn \ --long 32 \ --long force \ --long jobs: \ --long noUpdate \ --long no-cache \ -n "$(basename "$0")" \ -- \ "$@" \ || echo "usage" )" args=("$@") optArgs=() use_cache=true while true do case $1 in --32) archlinuxewe=false versionenDatei="/var/cache/$(basename "$(dirname "${me}")")/lastVersions32" optArgs[${#optArgs[@]}]="--32" ;; -f|--force) force=true optArgs[${#optArgs[@]}]="-f" ;; --noUpdate) unForce=true optArgs[${#optArgs[@]}]="--noUpdate" ;; -j|--jobs) shift jobs="$1" optArgs[${#optArgs[@]}]="-j" optArgs[${#optArgs[@]}]="$1" ;; -m) optArgs[${#optArgs[@]}]="-m" maschinenlesbar=true ;; -n|--no-cache) use_cache=false ;; --) shift break ;; *) >&2 echo "FEHLER: Verstehe Option \"$1\" doch nicht! Ich beende." rm -rf "${tmpDir}" usage esac shift done [ ! -r "${versionenDatei}" ] && force=true versionenErmitteln=${force} ! ${versionenErmitteln} && [ "$(head -n1 "${versionenDatei}")" -le $[$(date "+%s")-300] ] && versionenErmitteln=true ${maschinenlesbar} && versionenErmitteln=true ${unForce} && versionenErmitteln=false versionenSchreiben=${versionenErmitteln} [ ! -w "${versionenDatei}" ] && versionenSchreiben=false ${maschinenlesbar} && versionenSchreiben=false if [ $# -eq 0 ] then if ${versionenSchreiben} then tmpFile="$(mktemp /tmp/versionen.XXXXXX)" date "+%s" > "${tmpFile}" set -o pipefail if ${archlinuxewe}; then ${me} "${args[@]}" $(echo */PKGBUILD | tr " " "\n" | sed "s|/PKGBUILD||") | tee -a "${tmpFile}" err=$? else if ! mountpoint -q /mnt/archlinux32; then mount /mnt/archlinux32 fi /usr/src/archlinux32/devops/watch-versions | sed 's/$/ (arch32)/' | tee -a "${tmpFile}" ${me} "${args[@]}" $(echo *32/PKGBUILD | tr ' ' '\n' | sed 's|/PKGBUILD||') | tee -a "${tmpFile}" err=$? fi set +o pipefail cat "${tmpFile}" > "${versionenDatei}" rm "${tmpFile}" elif ! ${versionenErmitteln} then sed '1d' "${versionenDatei}" err=$? elif ${archlinuxewe}; then ${me} "${args[@]}" $(echo */PKGBUILD | tr " " "\n" | sed "s|/PKGBUILD||") err=$? else /usr/src/archlinux32/devops/watch-versions | sed 's/$/ (arch32)/' ${me} "${args[@]}" $(echo */PKGBUILD | tr " " "\n" | sed "s|/PKGBUILD||" | grep '32$') err=$? fi exit ${err} elif [ $# -eq 1 ] && ${versionenErmitteln} then unset pkgbase unset pkgname unset pkgver if ${archlinuxewe}; then . $1/PKGBUILD srcKnown=false else eval "$( grep '^pkg\(base\|name\|ver\)=' $1/PKGBUILD )" remVer=$( find '/mnt/archlinux32' -regextype sed \ -type f \ -regex '.*/'"${1%32}"'-[^-]\+-[^-]\+-any\.pkg\.tar\.\(xz\|zst\)' \ -printf '%f\n' | \ sed ' s/-[^-]\+-[^-]\+$// s/^.*-// ' | \ latest_version ) srcKnown=true source=() fi if [ -n "${pkgbase}" ]; then pkgname="${pkgbase}" fi for src in "${source[@]}" "${source_i686[@]}" "${source_x86_64[@]}" do src_name="${src%%::*}" src="${src#*::}" if echo "${src}" | \ grep '^https://archive-server\.archlinux32\.org/' | grep '[&?]t=git' | \ grep '[&?]r=' | \ grep -q '[&?]tag='; then remDir=$( printf '%s\n' "${src}" \ | sed 's,^.*[?&]r=\([^&]\+\)\(\&.*\)\?$,\1,' \ | sed 's/%3D/=/g' ) remTag=$( printf '%s\n' "${src}" \ | sed 's,^.*[?&]tag=\([^&]\+\)\(\&.*\)\?$,\1,' \ | sed 's/%3D/=/g' ) remVer=$( git -C "/usr/src/skripte/archive-server/work/repositories/git/${remDir}" tag \ | sed ' s/^[^0-9.*]*'"$( printf '%s\n' "$remTag" \ | sed 's/[0-9.]\+$/\\([0-9.]\\+\\)/' )"'$/\1/ t d ' \ | latest_version ) elif [ "${pkgname}" = 'python2-sip' ]; then remVer=$( pacman -Ss '^python-sip$' \ | sed ' s@^\S\+/python-sip \([0-9.]\+\)-[0-9]\+\( .*\)\?$@\1@ t d ' ) elif [ "${pkgname}" = 'local-certificates' ]; then remVer=$( curl_it 'https://eckner.net/certs/sha512sums' \ | sed ' s/^\S\+ \([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)T\([0-9]\{2\}\):\([0-9]\{2\}\):\([0-9]\{2\}\)\.\S\+$/\1.\2.\3.\4.\5.\6/ t d ' \ | latest_version ) elif [ "${pkgbase}" = 'bareos' ]; then remVer=$( curl_it 'https://github.com/bareos/bareos/releases' \ | sed ' s,^.* href="/bareos/bareos/archive/Release/\([0-9.]\+\)\.tar\.gz"\( [^>]*\)\?>.*$,\1, t d ' \ | latest_version ) elif [ "${pkgname}" = 'python2-courier-pythonfilter' ] then remVer=$( curl_it 'https://bitbucket.org/gordonmessmer/courier-pythonfilter/downloads/?tab=tags' \ | tr '"' '\n' \ | sed ' s,^/gordonmessmer/courier-pythonfilter/get/release-\([-0-9]\+\)\.tar\.gz$,\1, t d ' \ | tr '-' '.' \ | latest_version ) elif [ "${pkgname}" = 'pacman-static' ] then git submodule update "${pkgname}" eval "$( sed -n ' s/^pkgver=/remVer=/ T p ' "${pkgname}/PKGBUILD" )" elif echo "${src}" | \ grep -qF '/ssacli-'; then centosVer=$( curl_it "${src%/*/*/*/*}/" | \ tr '"' '\n' | \ sed ' s,^\([0-9]\+\)/$,\1, t d ' | \ latest_version ) remVer=$( curl_it "${src%/*/*/*/*}/${centosVer}/x86_64/current/" | \ tr '"' '\n' | \ sed ' s,^ssacli-\([0-9.]\+\)-\([0-9.]\+\)\.x86_64\.rpm$,\1_\2, t d ' | \ latest_version ) elif [ "${pkgname}" = 'adduser' ] then remVer=$( curl_it "${source[0]#*::}" '-L' | \ grep '^# Version: ' | \ sed 's|^# Version: \+||' ) elif [ "${pkgname}" = 'dropbox' ] then remVer=$( curl_it 'https://www.dropboxforum.com/t5/Desktop-client-builds/bd-p/101003016' | \ tr '<>' '\n' | \ sed ' s/^\s*Stable Build \([0-9.-]\+\)\s*$/\1/ t d ' | \ latest_version ) elif [ "${pkgname}" = 'tightvnc' ] then remVer=$( curl_it 'https://www.tightvnc.com/download-old.php' | \ tr '"' '\n' | \ grep -x 'https://www\.tightvnc\.com/download/\([0-9.]\+\)/tightvnc-\1_unixsrc\.tar\.bz2' | \ sed 's|^https://www\.tightvnc\.com/download/\([0-9.]\+\)/tightvnc-\1_unixsrc\.tar\.bz2$|\1|' ) elif [ "${pkgname}" = 'g95' ] then remVer='0.94' elif [ "${pkgname}" = 'pgplot-for-ifeffit' ] then remVer=$( curl_it "ftp://ftp.astro.caltech.edu/pub/pgplot/" | \ grep "\spgplot[0-9.]\+\.tar\.gz -> \S\+\$" | \ sed "s|^.*\spgplot\([0-9.]\+\)\.tar\.gz -> \S\+\$|\1|" | \ latest_version ) elif [ "${pkgname}" == "wurzel-old" ] then remVer="0.1" elif echo "${src}" | \ grep -q '^http://ftp.linux.org.uk/.*/netkit/' then quVer="${src%/*}/" remVer="$( curl_it "${quVer}" | \ tr '<>' '\n' | \ grep "^${pkgname#netkit-}-[0-9.-]\+\.tar\.gz\$" | \ sed "s|^${pkgname#netkit-}-\([0-9.-]\+\)\.tar\.gz\$|\1|" | \ latest_version )" elif [ "${pkgname}" == "archiso32" ] || [ "${pkgname}" == 'archiso-dual' ] then git -C /usr/src/archlinux/archiso fetch upstream git -C /usr/src/archlinux32/archiso32 fetch origin remVer="$( { git -C /usr/src/archlinux/archiso tag git -C /usr/src/archlinux32/archiso32 tag } | \ sed -n ' s/^\(i686-\|dual-\)v// T p ' | \ latest_version )" elif [ "${pkgname}" == 'devtools32' ] then git -C /usr/src/archlinux/devtools fetch upstream git -C /usr/src/archlinux32/devtools32 fetch origin remVer="$( ( git -C /usr/src/archlinux/devtools archive --format=tar upstream/master -- Makefile | \ tar -Ox | \ grep -m1 '^V=[0-9.]\+$' | \ cut -d= -f2 git -C /usr/src/archlinux32/devtools32 tag | \ sed -n ' s/^v// /^[0-9.]\+$/p ' ) | \ latest_version )" elif [ "${pkgname}" == 'pacman-mirrorlist32' ] then git -C "/usr/src/archlinux32/packages" fetch origin >/dev/null 2>&1 remVer=$( { git -C "/usr/src/archlinux32/packages" archive origin/master -- core/pacman-mirrorlist/PKGBUILD | \ tar -Ox | \ grep -m1 '^pkgver=[0-9.]\+$' | \ cut -d= -f2 } | \ latest_version ) elif echo "${src}" | \ grep -q '//www\.abisource\.com/' then quVer="$( echo "${src}" | \ sed 's|\(/[^/]\+\)\{3\}$|/|' )" remVer="$( curl_it "${quVer}" | \ tr '<>' '\n' | \ sed -n ' s,^a href="\([0-9.]\+\)/"$,\1, T p ' | \ latest_version )" elif echo "${src}" | \ grep -q '//download\.virtualbox\.org/' then quVer="$( echo "${src}" | \ sed 's|/[^/]\+/[^/]\+$||' )" remVer="$( curl_it "${quVer}/" | \ sed -n ' s,^.*.*$,\1, T p ' | \ latest_version )" elif echo "${src}" | \ grep -q "//www\.mpich\.org/" then quVer="${src%/*/*}/" aVers="$( curl_it "${quVer}" | \ tr '"' '\n' | \ grep '^[0-9.]\+/$' | \ sed 's|/$||' )" if [ ! "${pkgname}" == "mpich" ] then aVers="$( ( echo "${aVers}" echo "${pkgname#mpich} %%%SCHNIPP%%%" ) | sort -V | \ sed '/%%%SCHNIPP%%%/q' | \ grep -v '%%%SCHNIPP%%%' )" fi remVer="$( echo "${aVers}" | \ latest_version )" elif echo "${src}" | \ grep -q '^git://anonscm\.debian\.org/\|^git\(+https\?\)\?://git\(hub\.com\|\.archlinux32\.org\)/.*#tag=' then src="${src#git+}" src="${src%#*}" src="${src%?signed}" remVer=$( { git ls-remote --tags "${src}" 2>/dev/null || \ git ls-remote --tags "${src//git.archlinux32.org\/archlinux32\//git2.archlinux32.org/archlinux32/}" 2>/dev/null } | \ awk '{print $2}' | \ sed ' s|^refs/tags/'"$( if ! echo "${src}" | \ grep -qF archlinux32; then printf 'v' fi )"'\([0-9.]\+\)$|\1| t d ' | \ latest_version ) elif echo "${src}" | \ grep -q '^git\(+[^:]\+\)\?://[^#]\+\(#commit=[^#]\+\)\?$' then remVer=$( cd "$1" makepkg --verifysource >/dev/null 2>&1 git -C "${src_name}" fetch --all -p >/dev/null 2>&1 _commit='HEAD' srcdir=$(pwd) pkgver ) elif echo "${src}" | \ grep -q '^svn\(+[^:]\+\)\?://[^#]\+\(#revision=[^#]\+\)\?$' then remVer=$( cd "$1" makepkg --verifysource >/dev/null 2>&1 ( cd "${src_name}" svn update >/dev/null ) srcdir=$(pwd) pkgver ) elif echo "${src}" | \ grep -q "^https://pypi\.python\.org/packages/" then qu=$( echo "${src}" | \ sed 's|^.*/packages/.*/\([^/]\+\)-[^/-]\+\.tar\.gz$|https://pypi.org/project/\1/|' ) _pkgname=$( echo "${qu}" | \ sed ' s|/$|| s|^.*/|| ' ) remVer="$( curl_it "${qu}" | \ tr '"' '\n' | \ grep "^/project/\(python-\)\?${_pkgname}/[0-9.-]\+/\$" | \ sed "s|^/project/\(python-\)\?${_pkgname}/\([0-9.-]\+\)/\$|\2|" | \ latest_version )" remHash="$( curl_it "${qu}${remVer}/" | \ tr '"#' '\n' | \ sponge | \ grep -m1 "^https://files\.pythonhosted\.org/packages/.*/[0-9a-f]\{60\}/${_pkgname}-${remVer}\.tar\.\(gz\|bz2\|xz\)\$" | \ sed 's|/[^/]\+$|/|; s|^https://files\.pythonhosted\.org/packages/|/|' )" locHash="$( echo "${src}" | \ sed 's|/[^/]\+$|/|; s|^https://pypi\.python\.org/packages/|/|' )" ${maschinenlesbar} && \ [ "${remHash}" != "${locHash}" ] && \ echo "sed_extra='s@${locHash}@${remHash}@g;'" elif echo "${src}" | \ grep -q "//bundles\.openttdcoop\.org/" then qu="$( echo "${src}" | \ sed 's|^\(https\?://\([^/]\+/\)\{3\}\).*$|\1|' )" remVer="$( curl_it "${qu}" | \ tr "\"" "\n" | \ grep '^[0-9.]\+/$' | \ sed 's|/$||' | \ latest_version )" elif echo "${src}" | \ grep -q "//git\.eckner\.net/" then quVer="${src%/*/*}" quNam=$( printf '%s\n' "${src}" | \ sed ' s,^.*/,, s,-[0-9.]\+\.tar\.xz$,, ' ) remVer=$( \ curl_it "${quVer}" | \ tr "<>'\"" '\n' | \ sed -n ' s,^/'"${quVer#*//*/}"'/snapshot/'"${quNam}"'-\([0-9.]\+\)\.tar\.xz$,\1, T p ' | \ latest_version ) elif echo "${src}" | \ grep -q "//\(search\.m\?\)\?cpan\.org/\|//cpan\.metacpan\.org/authors/\|cpan\.org/modules/by-module/" then quVer=$( \ echo "${src%/*}/" | \ sed 's|//\(search\.m\?\)\?cpan\.org/|//www.cpan.org/|' | \ sed 's|/CPAN/|/|' ) quNam=${src##*/} quNam=${quNam%-*} quEnd=$( \ echo "${src##*-}" | \ sed "s|^v\?[0-9.]*||" | \ sed 's|\.|\\\.|' ) remVer=$( \ curl_it "${quVer}" | \ tr '"<>' '\n' | \ grep "^${quNam}-v\?[0-9.-]*\.${quEnd}\$" | \ sed "s|^${quNam}-v\?\([0-9.-]*\)\.${quEnd}\$|\1|" | \ latest_version 'perl' ) elif echo "${src}" | \ grep -q "ftp://" then quVer="${src%/*}/" quNam="${src##*/}" quEnd=$( \ echo "${quNam}" | sed "s|^.*v\?[0-9.]*[0-9]\(.\)|\1|" ) quNam=$( \ echo ${quNam} | \ sed "s|v\?[0-9.]\+.*\$||" ) tmpVer=$( \ curl_it "${quVer}" | \ awk '{print $9}' | \ grep "^${quNam}v\?[0-9.]*${quEnd}\$" | \ sed "s|^${quNam}v\?\([0-9.]*\)${quEnd}\$|\1|" | \ latest_version ) [ "${pkgname}" == "pgplot" ] \ && [ -n "${tmpVer}" ] \ && remVer="${tmpVer:0:1}.${tmpVer:1:1}.${tmpVer:2}" \ || remVer="${tmpVer}" elif echo "${src}" | \ grep -q '//arch\.eckner\.net/\|//mirror\.archlinux32\.org/' then quVer="${src%/*}" quVer="${quVer#*::}" quNam=${src##*/} quNam=${quNam%-*} quNam=${quNam%-*} quNam=${quNam%-*} quEnd=${src##*-} quEnd=${quEnd#*.} remVer=$( \ curl_it "${quVer}/" | \ tr "\"" "\n" | \ grep "^${quNam}\(-[^-]*\)\{3\}\.${quEnd}\$" | \ sed "s|^${quNam}-\([^-]*\)\(-[^-]*\)\{2\}\.${quEnd}\$|\1|" | \ latest_version ) elif echo "${src}" | \ grep -q '^https\?://github\.com/' then quVer=$( echo "${src#*::}" | \ sed ' s|/archive/\(Release/\)\?[^/]*$|/releases| s|/download/[^/]*/[^/]*$|| s|http:|https:| ' ) quNam=$( echo "/${quVer#*.com/}/tag/" | \ tr '[[:upper:]]' '[[:lower:]]' ) if [ "${pkgname}" == 'boulder' ]; then extra_chars='-' else extra_chars='' fi remVer=$( \ curl_it "${quVer}" | \ tr "\"" "\n" | \ tr '[[:upper:]]' '[[:lower:]]' | \ grep "^${quNam}\(v\|release\(%2f\|-\)\|\)[${extra_chars}0-9.]\+\$" | \ sed "s@^${quNam}\(v\|release\(%2f\|-\)\|\)@@" | \ if [ -n "${extra_chars}" ]; then tr "${extra_chars}" '_' else cat fi | \ if [ "${pkgname}" == "conky-irc" ]; then grep -v '\.999$' else cat fi | \ latest_version ) elif echo "${src}" | \ grep -q "//\(\(pr\)\?downloads\.\)\?sourceforge\.net/code-snapshots/svn/" then quVer=$( echo "${src}" \ | sed ' s@^\([^/]\+//[^/]\+/\)code-snapshots/svn/\([^/]\)/\(\2[^/]\)\(/\3[^/]\+/[^/]\+\)/[^/]\+$@\1p\4/HEAD/@ ' ) remVer=$( curl_it "${quVer}" \ | sed ' s@^.*>Commit \[\([^][]\+\)].*$@\1@ t d ' \ | sort -V \ | tail -n1 ) elif echo "${src}" | \ grep -q "//\(\(pr\)\?downloads\.\)\?sourceforge\.net/" then quVer=$( \ echo "${src}" | \ sed ' s,^https\?://\(\(pr\)\?downloads\.\)\?sourceforge\.net/,, s,^sourceforge/,, s,^projects\?/,, ' | \ sed ' s,^\([^/]\+\)/[^/]\+$,\1/files/\1, t end s,^\([^/]\+\)/\(files/\)\?\([^/]\+\)/[0-9.]\+/[^/]\+$,\1/files/\3, t end s,^\([^/]\+\)/\(files/\)\?branch_[0-9.]\+/[^/]\+$,\1/files, t end s,^\([^/]\+\)/\(\1-[0-9.]\+\)/\2\.tar\.gz$,\1/files, t end w /dev/stderr d :end s,/scidavis$,/SciDAVis, s,^.*$,https://sourceforge.net/projects/\0/, ' ) remVer=$( \ curl_it "${quVer}" | \ if [ -z "${pkgname##*-devel}" ]; then cat else sed ' \@]*-devel/@,\@@ d ' fi | \ sed -n ' \@]* href="[^"<>]*/latest/download"@,\@@ { s@^.*\(\('"${pkgname}"'\|'"${_pkgname}"'\)\([-.]\|%20\)\)\?\([0-9.]\+\)\(\.tar\.\([xgl]z\|bz2\)\|\.zip\|-win-dist\.msi\)\( [^<>]*\)\?.*$@0 \4@ T p } s@^.*"'"${quVer#*sourceforge.net}"'\('"${pkgname}"'\([-.]\|%20\)\)\?\([0-9.-]\+[^"/%]*\)["/%].*$@2 \3@ T p ' | \ sed ' s/-$// s/\.$// ' | \ if [ "${pkgname}" = 'qwt5' ]; then grep '^\S\+ 5\.' else cat fi | \ sort -k1n,1 | \ sed ' /^0/ a 1 cut ' | \ sort -k1n,1 | \ sed ' /^1 cut$/ q ' | \ sed ' /^1 cut$/ d s/^\S\+ // ' | \ latest_version ) elif echo "${src}" | \ grep -q '//support\.hdfgroup\.org/' then quVer="${src%/*/*/*}/" quNam="${src##*/}" quNam="${quNam%-*}" quNAM="${src#${quVer}}" quNAM="${quNAM%%.*}" quNAM="$(echo "${quNAM}" | tr '[:lower:]' '[:upper:]')" remVer=$( curl_it "${quVer}" \ | tr '"' '\n' \ | sed " s|^${quNAM}\.\(.*\)/\$|\1| t d " \ | sort -Vr \ | while read -r verKandidat; do curl_it "${quVer}${quNAM}.${verKandidat}/src/" \ | sed ' s@^.*.*$@\1@ t d ' \ | sort -Vr \ | grep -Fm1 '' \ && break done ) elif echo "${src}" | \ grep -q 'https://bitbucket\.org/.*/get/[^/]\+$' then srcPreNam="$( echo "${src}" | \ sed 's|^.*/\([^/0-9]\+[-_]\)[0-9][^/]\+$|\1|' )" srcEndg="$( echo "${src}" | \ sed ' s|^.*\(\.tar[^/]*\)$|\1| s|\.|\\.|g ' )" remVer="$( curl_it "${src%/get/*}/downloads/?tab=tags" | \ tr '"' '\n' | \ sed ' s|^.*/'"${srcPreNam}"'\(.*\)'"${srcEndg}"'$|\1| t d ' | \ tr -- '-_' '.' | \ latest_version )" elif echo "${src}" | \ grep -q '^https\?://lilypond\.org/' then if echo "${src}" \ | grep -q '/v\?\([^/]\+\)/[^/]\+-\1[^/]\+$'; then quVers=$( curl_it "${src%/*/*}/" \ | sed ' s@^.*\1/.*$@\1/@ t d ' \ | sort -Vr \ | sed 's@^@'"${src%/*/*}/"'@' ) else quVers="${src%/*}/" fi for quVer in ${quVers}; do remVer=$( curl_it "${quVer}" \ | tr '"<>' '\n' \ | sed ' s@^lilypond-\([0-9.]\+\)\(-[0-9]\+\.documentation\)\?\.t\(ar\(\.[gx]z\|\.bz2\)\?\|gz\)$@\1@ t d ' \ | tr '_' '.' \ | latest_version ) if [ -n "${remVer}" ]; then break fi done elif echo "${src}" | \ grep -qF '//www.cybernoia.de/'; then quVer="${src%/*}.html" remVer=$( curl_it "${quVer}" | \ tr '<>' '\n' | \ sed -n ' s,^a href="'"${pkgname}/${pkgname}"'-\([0-9.]\+\)\.tar\.gz"$,\1, T p ' ) elif echo "${src}" | \ grep -q "$( printf '^https\\?://%s/\|' \ 'bitbucket\.org' \ 'bindfs\.org' \ 'dl\.suckless\.org' \ 'download\.osgeo\.org' \ 'downloads\.powerdns\.com' \ 'ftp\.daper\.net' \ 'isl\.gforge\.inria\.fr' \ 'www\.vanheusden\.com'\ 'people\.gnome\.org' \ 'pkgbuild\.com' \ 'qgis\.org' \ 'sources\.archlinux\(32\)\?\.org' \ 'webhome\.phy\.duke\.edu' \ 'www\.dragonsdawn\.net' \ 'www\.gaia-gis\.it' \ 'www\.hashcash\.org' \ 'www\.iozone\.org' \ 'www\.tana\.it' \ 'www\.tinc-vpn\.org' \ 'www\.vandenoever\.info' \ 'www\.wurzel\.org' \ 'www.xcrysden.org' \ | sed 's@\\|$@\n@' )" then for _pkgname in "${provides[@]}"; do if [ "${pkgname#${_pkgname%=*}}" != "${pkgname}" ]; then pkgname="${_pkgname%=*}" break fi done quVer="${src%/*}/" remVer="$( \ curl_it "${quVer}" | \ tr '"<>' '\n\n\n' | \ grep "^${pkgname#python2-}\(-src\)\?-\?v\?[0-9._]\+[a-z]\?\.t\(ar\(\.[gx]z\|\.bz2\)\?\|gz\)\$" | \ sed "s@^${pkgname#python2-}\(-src\)\?-\?v\?\([0-9._]\+[a-z]\?\)\.t\(ar\(\.[gx]z\|\.bz2\)\?\|gz\)\$@\2@" | \ tr '_' '.' | \ latest_version )" elif echo "${src}" | \ grep -qF "$( printf '%s\n' \ 'https://www.kernel.org/pub/linux/utils/cryptsetup' \ 'https://archive.apache.org/' )"; then fileName=$( printf '%s\n' "${src}" \ | sed ' s@^.*/@@ s@-[0-9.]\+[^0-9]\+$@@ ' ) for mainVer in $( curl_it -L "${src%/*/*}/" \ | sed ' s@^.*\1/.*$@\1@ t d ' \ | sort -Vr ); do remVer=$( curl_it -L "${src%/*/*}/${mainVer}/" \ | sed ' s@^.*\1.*$@\2@ t d ' \ | latest_version ) if [ -n "${remVer}" ]; then break fi done elif echo "${src}" | \ grep -q "http://www\.mkgmap\.org\.uk/download" then remUrl="$( echo "${src}" | \ sed 's|-r[0-9]\+\.zip$|.html|' )" remVer="r$( curl_it "${remUrl}" | \ grep '"text: current()\.version"' | \ tr '<>' '\n' | grep '^[0-9]\+$' | \ latest_version )" elif echo "${src}" | \ grep -qF '//www.roguetemple.com/' then remVer=$( curl_it "${src%/*}/download.php" | \ sed -n ' s,^.*[^<>]\+ source code.*$,\1.\2.\3, T s,\.$,, p ' ) elif echo "${src}" | \ grep -q '//www\.apache\.org/dist/spamassassin/source/' then remVer=$( curl_it 'https://spamassassin.apache.org/downloads.cgi' | \ tr '"' '\n' | \ sed ' s,^.*/Mail-SpamAssassin-\([0-9.]\+\)\.tar\.gz$,\1, t d ' | \ latest_version ) elif echo "${src}" | \ grep -q '//zircon\.org\.uk/topal/' then remVer=$( curl_it "${src%/*/*}/" | \ sed ' s,^.*\1.*$,\2, t d ' | \ latest_version ) elif echo "${src}" \ | grep -q 'https://download\.qt\.io/archive/qt/'; then for major in $( curl_it 'https://download.qt.io/archive/qt/' \ | sed -n ' s@^.*\1.*$@\1@ T s@/$@@ /^'"${pkgname#qt}"'/ p ' \ | sort -rV ); do remVer=$( curl_it 'https://download.qt.io/archive/qt/'"${major}"'/' \ | sed -n ' s@^.*\1.*$@\1@ T s@/$@@ p ' \ | sort -V \ | tail -n1 ) if [ -n "${remVer}" ]; then break; fi done elif echo "${src}" \ | grep -q 'https://www\.quinapalus\.com/'; then remVer=$( curl_it 'https://www.quinapalus.com/qxwdownload.html' \ | sed ' s@^