#!/bin/bash
usage() {
>&2 echo 'Verwendung: '
>&2 echo " $0"' [--32] [-f|--force] [-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
cache_file=$(
{
printf '%s\n' "$1"
printf '%s\n' "$@" | \
sort -u
} | \
sha512sum | \
awk '{print $1}'
)
shift
cache_file="${curl_cache}/${cache_file}"
if [ -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)
curl --compressed -o "${tmp_file}" --connect-timeout 10 -s -x socks5://127.0.0.1:9050 "$@" "${source}"
if grep -qiF 'access denied' "${tmp_file}"; then
: >"${tmp_file}"
fi
if [ ! -s "${tmp_file}" ]; then
curl --compressed -o "${tmp_file}" --connect-timeout 10 -s "$@" "${source}"
fi
cat "${tmp_file}"
local trials=5
while [ ${trials} -gt 0 ] && \
! mv "${tmp_file}" "${cache_file}"; do
sleep 1
trials=$((trials-1))
done
if [ ${trials} -le 0 ]; then
rm -f "${tmp_file}"
fi
}
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:m \
--long 32 \
--long force \
--long jobs: \
--long noUpdate \
-n "$(basename "$0")" \
-- \
"$@" \
|| echo "usage"
)"
args=("$@")
optArgs=()
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
;;
--)
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 */PKGBUILD | tr " " "\n" | sed "s|/PKGBUILD||" | grep '32$') | 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
)"
source=(dummy)
fi
if [ -n "${pkgbase}" ]; then
pkgname="${pkgbase}"
fi
for src in "${source[@]}" "${source_i686[@]}" "${source_x86_64[@]}"
do
if ! ${archlinuxewe}; then
remVer=$(
find '/mnt/archlinux32' -regextype sed \
-type f \
-regex '.*/'"${1%32}"'-[^-]\+-[^-]\+-any\.pkg\.tar\.xz' \
-printf '%f\n' | \
sed '
s/-[^-]\+-[^-]\+$//
s/^.*-//
' | \
sort -V | \
tail -n1
)
srcKnown=true
continue
fi
src_name="${src%%::*}"
src="${src#*::}"
if [ "${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
' \
| sort \
| tail -n1
)
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
' \
| head -n1
)
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 '-' '.' \
| sort -V \
| tail -n1
)
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
' | \
sort -V | \
tail -n1
)
remVer=$(
curl_it "${src%/*/*/*/*}/${centosVer}/x86_64/current/" | \
tr '"' '\n' | \
sed '
s,^ssacli-\([0-9.]\+\)-\([0-9.]\+\)\.x86_64\.rpm$,\1_\2,
t
d
' | \
sort -V | \
tail -n1
)
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
' | \
sort -V | \
tail -n1
)
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|" | \
sort -V | \
tail -n1
)
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|" | \
sort -V | \
tail -n1
)"
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
' | \
sort -V | \
tail -n1
)"
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
'
) | \
sort -V | \
tail -n1
)"
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
} | \
sort -V | \
tail -n1
)
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
' | \
sort -V | \
tail -n1
)"
elif echo "${src}" | \
grep -q '//download\.virtualbox\.org/'
then
quVer="$(
echo "${src}" | \
sed 's|/[^/]\+/[^/]\+$||'
)"
remVer="$(
curl_it "${quVer}/" | \
sed -n '
s,^.*.*$,\1,
T
p
' | \
sort -V | \
tail -n1
)"
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}" | \
sort -V | \
tail -n1
)"
elif echo "${src}" | \
grep -q '^git://anonscm\.debian\.org/\|^git\(+https\?\)\?://git\(hub\.com\|\.archlinux32\.org\)/.*#tag='
then
src="${src#git+}"
src="${src%#*}"
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
' | \
sort -V | \
tail -n1
)
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|" | \
sort -V | \
tail -n1
)"
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|/$||' | \
sort -V | \
tail -n1
)"
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
' | \
sort -V | \
tail -n1
)
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|\.|\\\.|'
)
if [ "${pkgname}" = 'perl-chi' ] || \
[ "${pkgname}" = 'perl-perl-metrics-simple' ]
then
pre='s|\(\...\)$|\10|'
post='s|\(\...\)0$|\1|'
elif [ "${pkgname}" = 'perl-opengl' ] || \
[ "${pkgname}" = 'perl-array-diff' ] || \
[ "${pkgname}" = 'perl-module-cpants-analyse' ] || \
[ "${pkgname}" = 'perl-data-clean' ]
then
pre='s|\(\...\)\(.\)|\1.\2|'
post='s|\(\...\)\.\(.\)|\1\2|'
else
pre=''
post=''
fi
remVer=$( \
curl_it "${quVer}" | \
tr '"<>' '\n' | \
grep "^${quNam}-v\?[0-9.-]*\.${quEnd}\$" | \
sed "s|^${quNam}-v\?\([0-9.-]*\)\.${quEnd}\$|\1|" | \
sed "${pre}" | \
sort -V | \
tail -n1 | \
sed "${post}"
)
elif echo "${src}" | \
grep -q "ftp://"
then
quVer="${src%/*}/"
quNam=${src##*/}
quEnd=$( \
echo "${quNam}" |
sed "s|^.*v\?[0-9.]*[0-9]||" \
)
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|" | \
sort -V | \
tail -n1 \
)
[ "${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|" | \
sort -V | \
tail -n1 \
)
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:]]'
)
remVer=$( \
curl_it "${quVer}" | \
tr "\"" "\n" | \
tr '[[:upper:]]' '[[:lower:]]' | \
grep "^${quNam}\(v\|release%2f\|\)[0-9.]\+\$" | \
sed "s@^${quNam}\(v\|release%2f\|\)@@" | \
(
if [ "${pkgname}" == "conky-irc" ]
then
grep -v '\.999$'
else
cat
fi
) | \
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/\1,
t end
s,^\([^/]\+\)/\(files/\)\?\([^/]\+\)/[0-9.]\+/[^/]\+$,\1/\3,
t end
w /dev/stderr
d
:end
s,/scidavis$,/SciDAVis,
s,\([^/]\+\)/\([^/]\+\),https://sourceforge.net/projects/\1/files/\2/,
'
)
remVer=$( \
curl_it "${quVer}" | \
tr "\"" "\n" | \
grep "^${quVer#*sourceforge.net}\(${pkgname}\(-\|%20\)\)\?[0-9.-]" | \
sed '
'"s@/${pkgname}\(-\|%20\)@/@"'
s|\.tar.*$||
'"s|^${quVer#*sourceforge.net}\([0-9.-]\+\).*\$|\1|"'
s|-$||
s|\.$||
' | \
sort -V | \
tail -n1 \
)
elif echo "${src}" | \
grep -q '//support\.hdfgroup\.org/'
then
quVer="${src%/*/*/*}/"
quNam="${src#${quVer}}"
quNam="${quNam%%.*}"
quNam="$(echo "${quNam}" | tr '[:lower:]' '[:upper:]')"
remVer=$( \
curl_it "${quVer}" | \
tr '"' '\n' | \
grep "^${quNam}\.[.0-9]\+/\$" | \
sed "s|^${quNam}\.\(.*\)/\$|\1|" | \
sort -V | \
tail -n1 \
)
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|' | \
sed 's|\.|\\.|g'
)"
remVer="$(
curl_it "${src%/get/*}/downloads/?tab=tags" | \
tr '"' '\n' | \
grep "${srcEndg}\$" | \
sed "s|^.*/${srcPreNam}\(.*\)${srcEndg}\$|\1|" | \
tr '_' '.' | \
sort -V | \
tail -n1
)"
elif echo "${src}" | \
grep -q '^https\?://lilypond\.org/'
then
quVer="${src%/*}/"
remVer="$( \
curl_it "${quVer}" | \
tr '"<>' '\n\n\n' | \
grep "^lilypond-[0-9.]\+\(-[0-9]\+\.documentation\)\?\.t\(ar\(\.[gx]z\|\.bz2\)\?\|gz\)\$" | \
sed "s@^lilypond-\([0-9.]\+\)\(-[0-9]\+\.documentation\)\?\.t\(ar\(\.[gx]z\|\.bz2\)\?\|gz\)\$@\1@" | \
tr '_' '.' | \
sort -V | \
tail -n1
)"
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/\|' \
'alpine\.freeiz\.com' \
'bitbucket\.org' \
'bindfs\.org' \
'dl\.suckless\.org' \
'download\.osgeo\.org' \
'ftp\.daper\.net' \
'isl\.gforge\.inria\.fr' \
'people\.gnome\.org' \
'pkgbuild\.com' \
'qgis\.org' \
'sources\.archlinux32\.org' \
'webhome\.phy\.duke\.edu' \
'www\.dragonsdawn\.net' \
'www\.gaia-gis\.it' \
'www\.hashcash\.org' \
'www\.iozone\.org' \
'www\.tana\.it' \
'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 '_' '.' | \
sort -V | \
tail -n1
)"
elif echo "${src}" | \
grep -q '^https\?://\(www\.\)\?paraview\.org/files/'
then
remVerz="$(
echo "${src}" | \
sed 's|/v[0-9.]\+/ParaView-v[0-9.]\+\.tar\.gz$|/|' | \
sed 's|^\(http://\)|\1www.|'
)"
for mainVer in $(
curl_it "${remVerz}" | \
tr ' >' '\n' | \
grep '^href="v[0-9.]\+/"$' | \
sed 's|href="v\([0-9.]\+\)/"$|\1|' | \
sort -Vr
)
do
remVer="$(
curl_it "${remVerz}v${mainVer}/" | \
tr ' >' '\n' | \
grep '^href="ParaView-v[0-9.]\+\.tar\.gz"$' | \
sed 's|^href="ParaView-v\([0-9.]\+\)\.tar\.gz"$|\1|' | \
sort -V | \
tail -n1
)"
[ -n "${remVer}" ] && break
done
elif echo "${src}" | \
grep -q '^https://download\.kde\.org/stable/plasma/'
then
remVerz=$(
echo "${src}" | \
sed 's|\(/[^/]\+\)\{2\}$|/|'
)
for mainVer in $(
curl_it "${remVerz}" | \
tr '"' '\n' | \
grep '^[0-9.]\+/$' | \
sed 's|/$||' | \
sort -Vr
)
do
remVer=$(
curl_it "${remVerz}${mainVer}/" | \
tr '"' '\n' | \
grep '^oxygen-fonts-[0-9.]\+\.tar\.xz$' | \
sed 's|^oxygen-fonts-\([0-9.]\+\)\.tar\.xz$|\1|' | \
sort -V | \
tail -n1
)
[ -n "${remVer}" ] && break
done
elif echo "${src}" | \
grep -q '^https://archive\.apache\.org/'
then
remVerz="$(
echo "${src}" | \
sed 's|[^/]\+/[^/]\+$||'
)"
for mainVer in $(
curl_it "${remVerz}" | \
tr '"' '\n' | \
grep "^${pkgname#apache-}-[0-9.]\+/\$" | \
sed "s|^${pkgname#apache-}-\([0-9.]\+\)/\$|\1|" | \
sort -Vr
)
do
remVer="$(
curl_it "${remVerz}${pkgname#apache-}-${mainVer}/" | \
tr '"' '\n' | \
grep "^${pkgname#apache-}-[0-9.]\+\.t\(ar\.\)\?\(gz\|bz2\|xz\)\$" | \
sed "s@^${pkgname#apache-}-\([0-9.]\+\)\.t\(ar\.\)\?\(gz\|bz2\|xz\)\$@\1@" | \
sort -V | \
tail -n1
)"
[ -n "${remVer}" ] && break
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]\+$' | \
sort -n | \
tail -n1
)"
elif echo "${src}" | \
grep -q '://semiletov\.org/[^/]*/dloads/'
then
remVer=$(
curl_it "${source%%/dloads/*}/" | \
tr '"' '\n' | \
sed -n '
s,^\(http://.*/\|dloads/\|\)'"${pkgname}"'-\([0-9.]\+\)\.tar\.bz2$,\2,
T
p
'
)
elif echo "${src}" | \
grep -q '//www.roguetemple.com/'
then
remVer=$(
curl_it "${src%/*}/download.php" | \
sed '
s,^.*[^<>]\+ source code.*$,\1.\2,
t
d
'
)
elif echo "${src}" | \
grep -q '//www\.us\.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
' | \
sort -V | \
tail -n1
)
elif echo "${src}" | \
grep -q '//zircon\.org\.uk/topal/'
then
remVer=$(
curl_it "${src%/*/*}/" | \
sed '
s,^.*\1.*$,\2,
t
d
' | \
sort -V | \
tail -n1
)
else
continue
fi
srcKnown=true
break
done
if ! ${srcKnown}
then
printf '%s: Unknown source:\n' "$1"
printf "'%s'\n" "${source[@]}" "${source_i686[@]}" "${source_x86_64[@]}"
exit 1
fi
if ${maschinenlesbar}
then
echo "remVer='${remVer}'"
echo "pkgver='${pkgver}'"
echo "pkgrel='${pkgrel}'"
else
if [ ! "${pkgver}" == "${remVer}" ]
then
if ! ${archlinuxewe}; then
printf '(32) '
fi
echo "$1: ${pkgname}: ${remVer} vs. ${pkgver}" | \
sed "s|^\([^:]\+\): \1:|\1:|"
fi
fi
elif ${versionenErmitteln}
then
echo "$@" | \
tr " " "\n" | \
parallel -j${jobs} "${me}" "${optArgs[@]}" {} \;
exit $?
else
for s in "$@"
do
grep "^${s}:" "${versionenDatei}"
done
fi