#!/bin/bash
DATADIR=~paul/lib/swv
source $HOME/GitHub/API-Token
unset http_proxy
unset HTTP_PROXY
unset ftp_proxy
unset FTP_PROXY
unset all_proxy
unset ALL_PROXY
ANSIBLE_COLL_LIBVIRT_URL="https://github.com/ansible-collections/community.libvirt/tags"
#BCRYPT_URL='https://pypi.python.org/pypi/bcrypt'
BLUEFISH_URL='http://www.bennewitz.com/bluefish/stable/source/'
BLUEFISH_DEVEL_URL='http://www.bennewitz.com/bluefish/devel/source/'
CARES_URL='http://c-ares.haxx.se/'
CDRTOOLS_DEVEL_URL='http://sourceforge.net/projects/cdrtools/files/alpha/'
CDRTOOLS_URL='http://sourceforge.net/projects/cdrtools/files/'
CHECK_URL='http://sourceforge.net/projects/check/files/check/'
COMMON_SENSE_URL='https://metacpan.org/release/common-sense'
CONTAGGED_URL='https://github.com/cosmocode/contagged/tags'
#CRCMOD_URL='https://pypi.python.org/pypi/crcmod'
CURL_URL='http://curl.haxx.se/'
DAVFS2_URL='http://nongnu.uib.no/davfs2/'
DOVECOT_URL='https://www.dovecot.org/download'
DOVECOT_SIEVE_URL='http://pigeonhole.dovecot.org/releases/2.3/'
#FLUIDITY_SM_URL='https://pypi.org/project/fluidity-sm/'
GETLIVE_URL='http://sourceforge.net/projects/getlive/files/'
GETMAIL_URL='http://pyropus.ca/software/getmail/old-versions/'
GOTMAIL_URL='http://sourceforge.net/projects/gotmail/files/gotmail/'
GREPMAIL_URL='https://metacpan.org/release/grepmail'
GTKWAVE_URL='http://gtkwave.sourceforge.net/'
GTORRENTVIEWER_URL='http://sourceforge.net/projects/gtorrentviewer/files/GTorrentViewer/'
# hotbabe appears to have been disowned by upstream
HOTBABE_URL='http://dindinx.net/hotbabe/download.php'
JUDY_URL='http://sourceforge.net/projects/judy/files/judy/'
LAT_URL='http://sourceforge.net/projects/ldap-at/files/LAT/'
#LEXICON_URL='https://pypi.org/project/lexicon/'
LIBIDN_URL='ftp://ftp.gnu.org/pub/gnu/libidn/'
LIBPNG_URL='ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng10/'
LIBSPF2_URL='http://www.libspf2.org/download.html'
LIBSSH2_URL='http://libssh2.org/download/'
LIBXML2_URL='ftp://xmlsoft.org/libxml2/'
LIBXSLT_URL='ftp://xmlsoft.org/libxslt/'
MILTER_GREYLIST_URL='ftp://ftp.espci.fr/pub/milter-greylist/'
MILTER_REGEX_URL='http://www.benzedrine.ch/milter-regex.html'
MOD_FCGID_URL='http://www.mirrorservice.org/sites/ftp.apache.org/httpd/mod_fcgid/'
MOD_PROFTPD_URL='http://www.castaglia.org/proftpd/'
MOIN_URL='https://moinmo.in/MoinMoinDownload'
MOIN_THEME_SOLENOID_URL="https://launchpad.net/moin-solenoid/+download"
NMAP_URL='http://nmap.org/dist/'
ORACLE_JAVA_URL='http://www.oracle.com/technetwork/java/javase/downloads/index.html'
PARI_URL='http://pari.math.u-bordeaux.fr/pub/pari/unix/'
#PASSLIB_URL='https://pypi.python.org/pypi/passlib'
PHP_URL='http://www.php.net/releases/'
PHP_GTK_URL='http://gtk.php.net/download.php'
PROFTPD_URL='http://www.proftpd.org/'
PROXYCHECK_URL='http://www.corpit.ru/mjt/proxycheck.html'
PPTP_URL='http://sourceforge.net/projects/pptpclient/files/pptp/'
PPTPD_URL='http://sourceforge.net/projects/poptop/files/pptpd/'
PYASN1_URL='http://sourceforge.net/projects/pyasn1/files/pyasn1/'
PYSERIAL_URL='http://sourceforge.net/projects/pyserial/files/pyserial/'
#PY_SETUP_SVN_URL='https://pypi.org/project/setuptools_subversion/'
RBLDNSD_URL='https://rbldnsd.io/'
SCHILY_URL='https://sourceforge.net/projects/schilytools/files/'
SENDMAIL_URL='http://www.sendmail.org/releases/'
SA_MILTER_URL='http://nongnu.uib.no/spamass-milt/'
SHORTEN_URL='http://www.etree.org/shnutils/shorten/dist/src/'
#SHOULD_DSL_URL='https://pypi.org/project/should_dsl/'
SMARTY_URL='http://www.smarty.net/files/'
SMBLDAP_TOOLS_URL='http://download.gna.org/smbldap-tools/sources/latest/'
SMF_SAV_URL='http://smfs.sourceforge.net/smf-sav.html'
SMF_SPF_URL='http://smfs.sourceforge.net/smf-spf.html'
#SPEC_URL='https://pypi.org/project/spec/'
SPFMILTER_URL='http://www.acme.com/software/spfmilter/'
TIDYP_URL='http://github.com/petdance/tidyp/downloads'
TORRENTSNIFF_URL='http://www.highprogrammer.com/alan/perl/torrentsniff.html'
UNRAR_URL='http://www.rarlab.com/rar_add.htm'
WEBLINT_PP_URL='http://sourceforge.net/projects/brian-d-foy/files/weblint++/'
XXDIFF_URL='http://sourceforge.net/projects/xxdiff/files/xxdiff/'
ZOPE_INTERFACE_URL='http://old.zope.org/Products/ZopeInterface/swpackage_releases'
# Run from data directory
cd $DATADIR
# Remove old data
find . -name '[A-Z]*' -a '!' -name versions\* -a -mmin +360 -exec rm -f {} \;
# Grok current versions
if [ "$1" != "nodownload" ]; then
curl --silent --location --output ansible-coll-libvirt "$ANSIBLE_COLL_LIBVIRT_URL" &
#curl --silent --location --output bcrypt "$BCRYPT_URL" &
curl --silent --location --output bluefish "$BLUEFISH_URL" &
curl --silent --location --output bluefish-devel "$BLUEFISH_DEVEL_URL" &
curl --silent --location --output c-ares "$CARES_URL" &
curl --silent --location --output cdrtools-devel "$CDRTOOLS_DEVEL_URL" &
curl --silent --location --output cdrtools "$CDRTOOLS_URL" &
curl --silent --location --output check "$CHECK_URL" &
curl --silent --location --output contagged "$CONTAGGED_URL" &
#curl --silent --location --output crcmod "$CRCMOD_URL" &
curl --silent --location --output curl "$CURL_URL" &
curl --silent --location --output davfs2 "$DAVFS2_URL" &
curl --silent --location --output dovecot "$DOVECOT_URL" &
curl --silent --location --output dovecot-sieve --max-time 30 "$DOVECOT_SIEVE_URL" &
#curl --silent --location --output fluidity-sm "$FLUIDITY_SM_URL" &
curl --silent --location --output getlive "$GETLIVE_URL" &
curl --silent --location --output getmail "$GETMAIL_URL" &
curl --silent --location --output gotmail "$GOTMAIL_URL" &
curl --silent --location --output grepmail "$GREPMAIL_URL" &
curl --silent --location --output gtkwave "$GTKWAVE_URL" &
curl --silent --location --output gtorrentviewer "$GTORRENTVIEWER_URL" &
wait
curl --silent --location --output hot-babe "$HOTBABE_URL" &
curl --silent --location --output judy "$JUDY_URL" &
curl --silent --location --output lat "$LAT_URL" &
#curl --silent --location --output lexicon "$LEXICON_URL" &
curl --silent --location --output libidn "$LIBIDN_URL" &
curl --silent --location --output libpng "$LIBPNG_URL" &
curl --silent --location --output libspf2 "$LIBSPF2_URL" &
curl --silent --location --output libssh2 "$LIBSSH2_URL" &
curl --silent --location --output libxml2 "$LIBXML2_URL" &
curl --silent --location --output libxslt "$LIBXSLT_URL" &
curl --silent --location --output milter-greylist "$MILTER_GREYLIST_URL" &
curl --silent --location --output milter-regex --max-time 30 "$MILTER_REGEX_URL" &
curl --silent --location --output mod_fcgid "$MOD_FCGID_URL" &
curl --silent --location --output mod_proftpd "$MOD_PROFTPD_URL" &
curl --silent --location --output moin "$MOIN_URL" &
curl --silent --location --output moin-theme-solenoid "$MOIN_THEME_SOLENOID_URL" &
curl --silent --location --output oracle-java "$ORACLE_JAVA_URL" &
curl --silent --location --output nmap "$NMAP_URL" &
curl --silent --location --output pari "$PARI_URL" &
#curl --silent --location --output passlib "$PASSLIB_URL" &
curl --silent --location --output perl-common-sense "$COMMON_SENSE_URL" &
curl --silent --location --output php "$PHP_URL" &
curl --silent --location --output php-gtk --max-time 30 "$PHP_GTK_URL" &
wait
curl --silent --location --output pptp "$PPTP_URL" &
curl --silent --location --output pptpd "$PPTPD_URL" &
curl --silent --location --output proftpd "$PROFTPD_URL" &
curl --silent --location --output proxycheck "$PROXYCHECK_URL" &
curl --silent --location --output pyasn1 "$PYASN1_URL" &
curl --silent --location --output pyserial "$PYSERIAL_URL" &
#curl --silent --location --output python-setuptools_subversion "$PY_SETUP_SVN_URL" &
curl --silent --location --output rbldnsd "$RBLDNSD_URL" &
curl --silent --location --output schily "$SCHILY_URL" &
curl --silent --location --output sendmail "$SENDMAIL_URL" &
curl --silent --location --output shorten "$SHORTEN_URL" &
#curl --silent --location --output should_dsl "$SHOULD_DSL_URL" &
curl --silent --location --output smarty "$SMARTY_URL" &
curl --silent --location --output smbldap-tools "$SMBLDAP_TOOLS_URL" &
curl --silent --location --output smf-sav "$SMF_SAV_URL" &
curl --silent --location --output smf-spf "$SMF_SPF_URL" &
curl --silent --location --output spamass-milter --max-time 30 "$SA_MILTER_URL" &
#curl --silent --location --output spec "$SPEC_URL" &
curl --silent --location --output spfmilter "$SPFMILTER_URL" &
curl --silent --location --output tidyp "$TIDYP_URL" &
curl --silent --location --output torrentsniff "$TORRENTSNIFF_URL" &
curl --silent --location --output weblint++ "$WEBLINT_PP_URL" &
curl --silent --location --output unrar "$UNRAR_URL" &
curl --silent --location --output xxdiff "$XXDIFF_URL" &
curl --silent --location --output zope-interface "$ZOPE_INTERFACE_URL" &
wait
fi
mv -f versions versions.last
# Grok the highest-numbered release for a sourceforge project
sf-current-release () {
prog="$1"
prog_prefix=""
[ -n "$2" ] && prog_prefix="${2}-"
sed -e 's|[<]tr title="'"${prog_prefix}"'\([^"]*\)" class="folder[ a-z]*"[>]|\n@@RELEASE@@ \1|' "$prog" |
awk '/^@@RELEASE@@ / {
version = $2
# Skip release candidates
if (version ~ "-rc") { next }
# Skip non-numeric versions
if (version !~ "^[0-9]") { next }
split(version, rel, /[.]/)
if (rel[1]+0 > maxrel[1]+0) {
split(version, maxrel, /[.]/)
maxname = version
} else if (rel[1] == maxrel[1] && rel[2]+0 > maxrel[2]+0) {
split(version, maxrel, /[.]/)
maxname = version
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3]+0 > maxrel[3]+0) {
split(version, maxrel, /[.]/)
maxname = version
}
}
END { printf "%-30s Stable: %s\n", "'"$prog"'", maxname }'
}
# Just take what the sourceforge site says is the latest
# (pyasn1 confused by release candidates)
sf-latest-version () {
prog="$1"
prog_prefix=""
[ -n "$2" ] && prog_prefix="${2}-"
awk '/Looking for the latest version\?/ {
getline
getline
ver = $0
sub(".tar.*$", "", ver)
sub(".zip.*$", "", ver)
sub("-win32$", "", ver)
sub("^.*-", "", ver)
printf "%-30s Stable: %s\n", "'"$prog"'", ver
exit
}' $prog
}
entities_to_ascii () {
sed -e 's/A/A/g; s/B/B/g; s/C/C/g; s/D/D/g; s/E/E/g; s/F/F/g; s/G/G/g; s/H/H/g;
s/I/I/g; s/J/J/g; s/K/K/g; s/L/L/g; s/M/M/g; s/N/N/g; s/O/O/g; s/P/P/g;
s/Q/Q/g; s/R/R/g; s/S/S/g; s/T/T/g; s/U/U/g; s/V/V/g; s/W/W/g; s/X/X/g;
s/Y/Y/g; s/Z/Z/g;
s/_/_/g;
s/a/a/g; s/b/b/g; s/c/c/g; s/d/d/g; s/e/e/g; s/f/f/g; s/g/g/g; s/h/h/g;
s/i/i/g; s/j/j/g; s/k/k/g; s/l/l/g; s/m/m/g; s/n/n/g; s/o/o/g; s/p/p/g;
s/q/q/g; s/r/r/g; s/s/s/g; s/t/t/g; s/u/u/g; s/v/v/g; s/w/w/g; s/x/x/g;
s/y/y/g; s/z/z/g;'
}
cpan_versions () {
prog="$1"
module="$2"
grep -F "
${module}-" $prog |
sed -e 's/.*'"${module}-"'\([^- ]*\).*/\1/' |
awk '{ printf "%-30s Stable: %s\n", "'$prog'", $0 }'
}
# Get latest release of a GitHub project
github_latest_release () {
PROJECT="$1"
REPO="$2"
[ -z "$3" ] && KEY="name" || KEY="$3"
curl --silent \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${GITHUB_API_TOKEN}" \
"https://api.github.com/repos/${PROJECT}/${REPO}/releases/latest" |
python3 -c 'import json,sys; obj=json.load(sys.stdin); print(obj["'${KEY}'"])'
}
# Get latest release of a PyPi project
pypi_latest_release () {
PROJECT="$1"
curl --silent https://pypi.org/pypi/${PROJECT}/json |
cpanel_json_xs -t string -e '$_ = "$_->{info}->{version}\n"'
}
(
# Extract latest ansible-collection-libvirt version
awk '/ansible-collections\/community.libvirt\/archive\/refs\/tags\/[0-9.]*.tar.gz/ {
tarball = $0
sub(".tar.gz\".*$", "", tarball)
sub("^.*/", "", tarball)
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "ansible-coll-libvirt", maxname }' ansible-coll-libvirt
# Extract latest bluefish version
sed -e 's/[<][^>]*[>]/ /g' -e 's/^[[:space:]]*//' bluefish bluefish-devel |
awk '/bluefish-[1-9]\.[0-9]*[02468].*\.tar\.bz2[[:space:]]/ {
tarball = $1
sub("^[^-]*-", "", tarball)
sub(".tar.bz2$", "", tarball)
if (tarball ~ /-|alpha|beta|rc/) {
relname = gensub(/(-?(alpha|beta|rc))([1-9]?)$/, ".\\2.\\3", "g", tarball)
sub("[.]$", "", relname)
split(relname, rel, /[.]/)
if (relname ~ "-2012$") {
next
}
if (rel[1] > maxdevrel[1]) {
split(relname, maxdevrel, /[.]/)
maxdevname = tarball
} else if (rel[1] == maxdevrel[1] && rel[2] > maxdevrel[2]) {
split(relname, maxdevrel, /[.]/)
maxdevname = tarball
} else if (rel[1] == maxdevrel[1] && rel[2] == maxdevrel[2] && rel[3] > maxdevrel[3]) {
split(relname, maxdevrel, /[.]/)
maxdevname = tarball
} else if (rel[1] == maxdevrel[1] && rel[2] == maxdevrel[2] && rel[3] == maxdevrel[3] && rel[4] > maxdevrel[4]) {
split(relname, maxdevrel, /[.]/)
maxdevname = tarball
} else if (rel[1] == maxdevrel[1] && rel[2] == maxdevrel[2] && rel[3] == maxdevrel[3] && rel[4] == maxdevrel[4] && rel[5] > maxdevrel[5]) {
split(relname, maxdevrel, /[.]/)
maxdevname = tarball
}
} else {
postrel = gensub(/^([1-9][0-9]*\.[0-9]*\.[0-9.]*[0-9])(.*)$/, "\\1", "g", tarball)
if (postrel != tarball) {
next
}
split(postrel, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
}
END { printf "%-30s Stable: %-18s Developer: %s\n", "bluefish", maxname, maxdevname }'
# Extract latest c-ares version
sed -e 's/[<][^>]*[>]/ /g' -e 's/^[[:space:]]*//' c-ares |
awk '/^c-ares[[:space:]][1-9][0-9.]*[[:space:]]/ {
version = $2
split(version, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(version, maxrel, /[.]/)
maxname = version
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(version, maxrel, /[.]/)
maxname = version
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(version, maxrel, /[.]/)
maxname = version
}
}
END { printf "%-30s Stable: %s\n", "c-ares", maxname }'
# Extract latest cdrtools versions
(
grep 'cdrtools-[1-9].*tar.*class=.file' cdrtools |
sed -e 's|.*cdrtools-\([1-9].*\)\.tar\..*|\1|' |
sort -u |
tail -n1
grep 'cdrtools-[1-9].*tar.*class=.file' cdrtools-devel |
sed -e 's|.*cdrtools-\([1-9].*\)\.tar\..*|\1|' |
sort -u |
tail -n1
) | awk '{
stable = $1
getline
devel = $1
printf "%-30s Stable: %-18s Developer: %s\n", "cdrtools", stable, devel
exit
}'
# Extract latest check version
sf-current-release check
# Extract latest contagged version
awk '/contagged\/archive.*\/[0-9.]*.zip/ {
tarball = $0
sub(".zip\".*$", "", tarball)
sub("^.*/", "", tarball)
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "contagged", maxname }' contagged
# Extract latest curl version
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' curl |
awk '/^The most recent stable version / {
versionstr = $0
sub("^.*version *", "", versionstr)
sub("^is *", "", versionstr)
sub(",.*$", "", versionstr)
printf "%-30s Stable: %s\n", "curl", versionstr
}'
# Extract latest davfs2 version
sed -e 's/[<][^>]*[>]/ /g' -e 's/^[[:space:]]*//' davfs2 |
awk '/davfs2-[0-9.]*\.t(ar\.)?gz[[:space:]]/ {
tarball = $1
sub("^.*-", "", tarball)
sub(".t(ar.)?gz$", "", tarball)
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "davfs2", maxname }'
# Extract latest dovecot version
sed -e 's|\([a-z]*://[^>]*/dovecot[^>]*[.]tar[.]gz\)|\
\1\
|g' dovecot |
awk ' function addrel ( version ) {
sub("[.]$", "", version)
sub("^v", "", version)
relname = gensub(/(alpha|beta|rc)([1-9])$/, "\\1.\\2", "g", version)
split(relname, rel, /[.]/)
if (version ~ /(alpha|beta|rc)/) {
#printf "Considering devel version %s\n", relname
if (rel[1] > maxdevrel[1]) {
split(relname, maxdevrel, /[.]/)
maxdevname = version
} else if (rel[1] == maxdevrel[1] && rel[2] > maxdevrel[2]) {
split(relname, maxdevrel, /[.]/)
maxdevname = version
} else if (rel[1] == maxdevrel[1] && rel[2] == maxdevrel[2] && rel[3] > maxdevrel[3]) {
split(relname, maxdevrel, /[.]/)
maxdevname = version
} else if (rel[1] == maxdevrel[1] && rel[2] == maxdevrel[2] && rel[3] == maxdevrel[3] && rel[4] > maxdevrel[4]) {
split(relname, maxdevrel, /[.]/)
maxdevname = version
}
#printf "Current latest: %s\n", maxdevname
} else {
#printf "Considering stable version %s\n", relname
if (rel[1] > maxrel[1]) {
split(version, maxrel, /[.]/)
maxname = version
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(version, maxrel, /[.]/)
maxname = version
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(version, maxrel, /[.]/)
maxname = version
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] == maxrel[3] &&
rel[4] > maxrel[4]) {
split(version, maxrel, /[.]/)
maxname = version
}
#printf "Current latest: %s\n", maxname
}
}
/sieve/ { next }
/[.]tar[.]gz$/ {
tarball = $1
sub("^.*/dovecot-", "", tarball)
sub(".tar.gz$", "", tarball)
relname = gensub(/(alpha|beta|rc)([1-9])$/, "\\1.\\2", "g", tarball)
addrel(relname)
}
END {
if (maxdevname != "") {
printf "%-30s Stable: %-18s Developer: %s\n", "dovecot", maxname, maxdevname
} else {
printf "%-30s Stable: %s\n", "dovecot", maxname
}
}'
# Extract latest dovecot-pigeonhole version
sed -e 's/[<]a href="\([^"]*\)"[>]/\1 /' -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' dovecot-sieve |
awk '/^dovecot-[0-9.]*-pigeonhole-[0-9].*\.tar\.gz[[:space:]]/ {
tarball = $1
sub("^[^-]*-[^-]*-[^-]*-", "", tarball)
sub(".tar.gz$", "", tarball)
relname = gensub(/(alpha|beta|rc)([1-9])$/, "\\1.\\2", "g", tarball)
split(relname, rel, /[.]/)
if (tarball ~ /(alpha|beta|rc|pre)/) {
#printf "Considering devel version %s\n", relname
if (rel[1] > maxdevrel[1]) {
split(relname, maxdevrel, /[.]/)
maxdevname = tarball
} else if (rel[1] == maxdevrel[1] && rel[2] > maxdevrel[2]) {
split(relname, maxdevrel, /[.]/)
maxdevname = tarball
} else if (rel[1] == maxdevrel[1] && rel[2] == maxdevrel[2] && rel[3] > maxdevrel[3]) {
split(relname, maxdevrel, /[.]/)
maxdevname = tarball
} else if (rel[1] == maxdevrel[1] && rel[2] == maxdevrel[2] && rel[3] == maxdevrel[3] && rel[4] > maxdevrel[4]) {
split(relname, maxdevrel, /[.]/)
maxdevname = tarball
}
#printf "Current latest: %s\n", maxdevname
} else {
#printf "Considering stable version %s\n", relname
if (rel[1] > maxrel[1]) {
split(version, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(version, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(version, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] == maxrel[3] &&
rel[4] > maxrel[4]) {
split(version, maxrel, /[.]/)
maxname = tarball
}
#printf "Current latest: %s\n", maxname
}
}
END {
if (maxdevname != "") {
printf "%-30s Stable: %-18s Developer: %s\n", "dovecot-pigeonhole", maxname, maxdevname
} else {
printf "%-30s Stable: %s\n", "dovecot-pigeonhole", maxname
}
}'
# Extract latest GeoIP version
printf "%-30s Stable: %s\n" "GeoIP" "$(github_latest_release maxmind geoip-api-c)"
# Extract latest geoipupdate version
printf "%-30s Stable: %s\n" "geoipupdate" "$(github_latest_release maxmind geoipupdate)"
# Extract latest getlive version
# Standard sourceforge script doesn't work
python-html2text --ignore-links getlive |
awk '/^GetLive_[0-9_]*\.tgz[[:space:]]/ {
tarball = $1
sub("^GetLive_", "", tarball)
sub(".tgz$", "", tarball)
sub("_", ".", tarball)
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END {
printf "%-30s Stable: %s\n", "getlive", maxname
}'
# Extract latest getmail versions
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' getmail |
awk '/getmail-[4-9].*\.tar\.gz/ {
tarball = $1
sub("^.*-", "", tarball)
sub(".tar.gz$", "", tarball)
# Skip alpha releases
if (tarball ~ /a/) {
next
}
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
/getmail-3.*\.tar\.gz/ {
tarball = $1
sub("^.*-", "", tarball)
sub(".tar.gz$", "", tarball)
split(tarball, rel, /[.]/)
if (rel[1] > maxrel3[1]) {
split(tarball, maxrel3, /[.]/)
maxname3 = tarball
} else if (rel[1] == maxrel3[1] && rel[2] > maxrel3[2]) {
split(tarball, maxrel3, /[.]/)
maxname3 = tarball
} else if (rel[1] == maxrel3[1] && rel[2] == maxrel3[2] && rel[3] > maxrel3[3]) {
split(tarball, maxrel3, /[.]/)
maxname3 = tarball
}
}
END {
printf "%-30s Stable: %s\n", "getmail3", maxname3
printf "%-30s Stable: %s\n", "getmail", maxname
}'
# Extract latest golang-github-gofrs-flock version
#printf "%-30s Stable: %s\n" "golang-github-gofrs-flock" "$(github_latest_release gofrs flock)"
# Extract latest gotmail version
sf-current-release gotmail
# Extract latest grepmail version
cpan_versions grepmail grepmail
# Extract latest gtkwave version
awk '/gtkwave-gtk3-[0-9.]*[.]tar[.]gz/ {
tarball = $0
sub("^.*gtkwave-gtk3-", "", tarball)
sub("[.]tar[.]gz.*$", "", tarball)
printf "%-30s Stable: %s\n", "gtkwave", tarball
exit
}' gtkwave
# Extract latest GTorrentViewer version
sf-current-release gtorrentviewer
# Extract latest hot-babe version
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' hot-babe |
awk '/^hot-babe-.*.tar.bz2/ {
tarball = $1
sub("^hot-babe-", "", tarball)
sub(".tar.bz2$", "", tarball)
printf "%-30s Stable: %s\n", "hot-babe", tarball; exit }'
# Extract latest Judy version
sf-current-release judy Judy
# Extract latest lat version
sed -i -e 's/LAT - \([0-9.]*\)/lat-\1/' lat
sf-current-release lat lat
# Extract latest libidn version
awk '/libidn-[0-9].*\.tar\.gz$/ {
tarball = $NF
sub("^.*-", "", tarball)
sub(".tar.gz$", "", tarball)
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "libidn", maxname }' libidn
# Extract latest libpng10 version
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' libpng |
awk '/libpng-1\.0\.[0-9]*\.tar\.gz$/ {
tarball = $NF
sub("^.*-", "", tarball)
sub(".tar.gz$", "", tarball)
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "libpng10", maxname }'
# Extract latest libspf2 version
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' libspf2 |
awk '/^libspf2-.*.tar.gz/ {
tarball = $1
sub("^.*-", "", tarball)
sub(".tar.gz$", "", tarball)
printf "%-30s Stable: %s\n", "libspf2", tarball; exit }'
# Extract latest libssh2 version
sed -e 's/[<][^>]*[>]/ /g' -e 's/^[[:space:]]*//' libssh2 |
awk '/^libssh2-[0-9].*\.tar\.gz / {
tarball = $1
sub("^.*-", "", tarball)
sub(".tar.gz$", "", tarball)
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "libssh2", maxname }'
# Extract latest libxml2 version
awk '/libxml2-[0-9].*\.tar\.gz$/ {
tarball = $NF
sub("^.*-", "", tarball)
sub(".tar.gz$", "", tarball)
if (tarball ~ /rc/) {
next
}
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "libxml2", maxname }' libxml2
# Extract latest libxslt version
awk '/libxslt-[0-9].*\.tar\.gz$/ {
tarball = $NF
sub("^.*-", "", tarball)
sub(".tar.gz$", "", tarball)
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "libxslt", maxname }' libxslt
# Extract latest mcrcon version
printf "%-30s Stable: %s\n" "mcrcon" "$(github_latest_release Tiiffi mcrcon tag_name | tr -d v)"
# Extract latest milter-greylist version
awk '/milter-greylist-[0-9].*\.tgz$/ {
tarball = $NF
sub("^.*-", "", tarball)
sub(".tgz$", "", tarball)
if (tarball ~ "(a|b|rc)[0-9]") { next }
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "milter-greylist", maxname }' milter-greylist
# Extract latest milter-regex version
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' milter-regex |
awk '/^milter-regex-.*.tar.gz/ {
tarball = $1
sub("^.*-", "", tarball)
sub(".tar.gz$", "", tarball)
printf "%-30s Stable: %s\n", "milter-regex", tarball; exit }'
# Extract latest miniz version
printf "%-30s Stable: %s\n" "miniz" "$(github_latest_release richgel999 miniz)"
# Extract latest moin version
python-html2text --ignore-links moin |
awk '/^Download: MoinMoin/ {
printf "%-30s Stable: %s\n", "moin", $3
exit
}'
# Extract latest moin-theme-solenoid version
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' moin-theme-solenoid |
awk '/^Solenoid (Theme )?[0-9.]*.zip/ {
zipver = $0
sub("[.]zip.*$", "", zipver)
sub("^.* ", "", zipver)
printf "%-30s Stable: %s\n", "moin-theme-solenoid", zipver; exit }'
# Extract latest mod_fastcgi version
printf "%-30s Stable: %s\n" "mod_fastcgi" "$(github_latest_release FastCGI-Archives mod_fastcgi tag_name)"
# Extract latest mod_fcgid version
sed -e 's/.*\(mod_fcgid-.*\.tar\.bz2\)[^.]/\1\n/g' mod_fcgid |
awk '/^mod_fcgid-.*.tar.bz2/ {
tarball = $1
sub("^[^-]*-", "", tarball)
sub("[.]tar[.]bz2.*$", "", tarball)
split(tarball, rel, /[.]/)
if (tarball ~ /beta|rc[1-9]/) {
if (rel[1] > maxrdevel[1]) {
split(tarball, maxdevrel, /[.]/)
maxdevname = tarball
} else if (rel[1] == maxdevrel[1] && rel[2] > maxdevrel[2]) {
split(tarball, maxdevrel, /[.]/)
maxdevname = tarball
} else if (rel[1] == maxdevrel[1] && rel[2] == maxdevrel[2] && rel[3] > maxdevrel[3]) {
split(tarball, maxdevrel, /[.]/)
maxdevname = tarball
}
} else {
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
}
END {
if (maxdevname != "") {
printf "%-30s Stable: %-18s Developer: %s\n", "mod_fcgid", maxname, maxdevname
} else {
printf "%-30s Stable: %s\n", "mod_fcgid", maxname
}
}'
# Extract latest mod_geoip version
sed -e 's/.*\(mod-geoip-[0-9.]*\.tar\.gz\)/\1\n/g' mod_proftpd |
awk '/^mod-geoip-.*.tar.gz/ {
tarball = $1
sub("^mod-geoip-", "", tarball)
sub("[.]tar[.]gz.*$", "", tarball)
printf "%-30s Stable: %s\n", "mod_geoip", tarball; exit }'
# Extract latest mod_vroot version
sed -e 's/.*\(mod-vroot-[0-9.]*\.tar\.gz\)/\1\n/g' mod_proftpd |
awk '/^mod-vroot-.*.tar.gz/ {
tarball = $1
sub("^mod-vroot-", "", tarball)
sub("[.]tar[.]gz.*$", "", tarball)
printf "%-30s Stable: %s\n", "mod_vroot", tarball; exit }'
# Extract latest nmap version
sed -e 's/[<][^>]*[>]/ /g' -e 's/^[[:space:]]*//' nmap |
awk '/nmap-[3-9].*\.tar\.bz2/ {
tarball = $1
sub("^[^-]*-", "", tarball)
sub(".tar.bz2$", "", tarball)
split(tarball, rel, /[.]/)
if (tarball ~ /(ALPHA|Alpha|BETA|Beta|DC|RC|SOC|TEST)/) {
if (rel[1] > maxdevrel[1]) {
split(tarball, maxdevrel, /[.]/)
maxdevname = tarball
} else if (rel[1] == maxdevrel[1] && rel[2] > maxdevrel[2]) {
split(tarball, maxdevrel, /[.]/)
maxdevname = tarball
}
} else {
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
}
END {
if (maxdevname != "") {
printf "%-30s Stable: %-18s Developer: %s\n", "nmap", maxname, maxdevname
} else {
printf "%-30s Stable: %s\n", "nmap", maxname
}
}'
# Extract latest Oracle Java 8 JDK version
sed -e 's//\n/g; s/[<][^>]*[>]//g; s/^[[:space:]]*//' oracle-java |
tr -d '\r' |
awk '/^[[:space:]]*Java SE 8u/ {
thisrel = $3
sub("^8u", "", thisrel)
printf "%-30s Stable: %s\n", "java-1.8.0-oracle", "1.8.0." thisrel
exit
}'
# Extract latest pari version
awk '/pari-[0-9.]*\.tar\.gz/ {
sub("^.*pari-", "", $0)
sub(".tar.gz.*", "", $0)
tarball = $0
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "pari", maxname }' pari
# Extract latest python-bcrypt version
if /bin/false; then
awk '/bcrypt-[0-9.]*\.tar\.gz/ {
sub("^.*bcrypt-", "", $0)
sub(".tar.gz.*", "", $0)
tarball = $0
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "python-bcrypt", maxname }' bcrypt
fi
# Extract latest python-passlib version
#awk '/passlib-[0-9.]*\.tar\.gz/ {
# sub("^.*passlib-", "", $0)
# sub(".tar.gz.*", "", $0)
# tarball = $0
# split(tarball, rel, /[.]/)
# if (rel[1] > maxrel[1]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# } else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# } else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# }
# }
# END { printf "%-30s Stable: %s\n", "python-passlib", maxname }' passlib
printf "%-30s Stable: %s\n" "python-passlib" "$(pypi_latest_release passlib)"
# Extract latest python-spec version
#awk '/spec-[0-9.]*\.tar\.gz/ {
# sub("^.*spec-", "", $0)
# sub(".tar.gz.*", "", $0)
# tarball = $0
# split(tarball, rel, /[.]/)
# if (rel[1] > maxrel[1]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# } else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# } else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# }
# }
# END { printf "%-30s Stable: %s\n", "python-spec", maxname }' spec
printf "%-30s Stable: %s\n" "python-spec" "$(pypi_latest_release spec)"
# Extract latest python-setuptools_subversion version
#awk '/setuptools_subversion-[0-9.]*\.zip/ {
# sub("^.*setuptools_subversion-", "", $0)
# sub(".zip.*", "", $0)
# tarball = $0
# split(tarball, rel, /[.]/)
# if (rel[1] > maxrel[1]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# } else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# } else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# }
# }
# END { printf "%-30s Stable: %s\n", "python-setuptools_subversion", maxname }' python-setuptools_subversion
printf "%-30s Stable: %s\n" "python-setuptools_subversion" "$(pypi_latest_release setuptools_subversion)"
# Extract latest common-sense version
cpan_versions perl-common-sense common-sense
# Extract latest php4 version
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' php |
awk '/^PHP 4\.[0-9.]* \(tar\.bz2\)/ {
thisrel = $2
printf "%-30s Stable: %s\n", "php4", thisrel
exit
}'
# Extract latest php-gtk version
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' php-gtk |
awk '/^php-gtk-[^ ]* Source/ {
thisrel = $1
sub("^php-gtk-", "", thisrel)
printf "%-30s Stable: %s\n", "php-gtk", thisrel
exit
}'
# Extract latest pptp version
sf-current-release pptp pptp
# Extract latest pptpd version
sf-current-release pptpd pptpd
# Extract latest proftpd versions
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' proftpd |
awk '/^(Maintenance|Stable):/ { stable = $2 }
/^(Release )?Candidate:/ { relcand = $NF }
END { printf "%-30s Stable: %-18s Release Candidate: %s\n", "proftpd", stable, relcand }'
# Extract latest proxycheck version
grep -E '^Latest version' proxycheck |
sed -e 's/[<][^>]*[>]//g' -e 's/.* source code is *\([^, ]*\).*/\1/' |
awk '{ printf "%-30s Stable: %s\n", "proxycheck", $1 }'
# Extract latest pyasn1 version
sf-latest-version pyasn1
# Extract latest pyserial version
sf-current-release pyserial
# Extract latest python-crcmod version
#awk '/crcmod-[0-9.]*\.tar\.gz/ {
# sub("^.*crcmod-", "", $0)
# sub(".tar.gz.*", "", $0)
# tarball = $0
# split(tarball, rel, /[.]/)
# if (rel[1] > maxrel[1]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# } else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# } else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# }
# }
# END { printf "%-30s Stable: %s\n", "python-crcmod", maxname }' crcmod
printf "%-30s Stable: %s\n" "python-crcmod" "$(pypi_latest_release crcmod)"
# Extract latest python-fluidity-sm version
#awk '/^[[:space:]]*fluidity-sm [0-9.]*[[:space:]]*$/ {
# tarball = $NF
# split(tarball, rel, /[.]/)
# if (rel[1] > maxrel[1]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# } else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# } else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# }
# }
# END { printf "%-30s Stable: %s\n", "python-fluidity-sm", maxname }' fluidity-sm
printf "%-30s Stable: %s\n" "python-fluidity-sm" "$(pypi_latest_release fluidity-sm)"
# Extract latest python-lexicon version
#awk '/lexicon-[0-9.]*\.tar\.gz/ {
# sub("^.*lexicon-", "", $0)
# sub(".tar.gz.*", "", $0)
# tarball = $0
# split(tarball, rel, /[.]/)
# if (rel[1] > maxrel[1]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# } else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# } else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# }
# }
# END { printf "%-30s Stable: %s\n", "python-lexicon", maxname }' lexicon
printf "%-30s Stable: %s\n" "python-lexicon" "$(pypi_latest_release lexicon)"
# Extract latest python-should_dsl version
#awk '/should_dsl-[0-9.]*\.tar\.gz/ {
# sub("^.*should_dsl-", "", $0)
# sub(".tar.gz.*", "", $0)
# tarball = $0
# split(tarball, rel, /[.]/)
# if (rel[1] > maxrel[1]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# } else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# } else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
# split(tarball, maxrel, /[.]/)
# maxname = tarball
# }
# }
# END { printf "%-30s Stable: %s\n", "python-should_dsl", maxname }' should_dsl
printf "%-30s Stable: %s\n" "python-should_dsl" "$(pypi_latest_release should_dsl)"
# Extract latest rblcheck version
printf "%-30s Stable: %s\n" "rblcheck" "$(github_latest_release logic rblcheck tag_name | sed -e 's|^rblcheck-||')"
# Extract latest rbldnsd version
awk '/rbldnsd-[0-9.a-z]*.tgz/ { print; exit }' rbldnsd |
sed -e 's|.*rbldnsd-\([0-9.a-z]*\).tgz.*|\1|' |
awk '{ printf "%-30s Stable: %s\n", "rbldnsd", $1 }'
# Extract latest schily version
awk '/\/projects\/schilytools\/files\/latest\/download/ {
sub("^.*title=\"/schily-", "", $0)
sub(".tar.bz2.*$", "", $0)
rel = $0
}
END { printf "%-30s Stable: %s\n", "schily", rel }' schily
# Extract latest sendmail version
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' sendmail |
awk '/^SendmailTM/ { printf "%-30s Stable: %s\n", "sendmail", $NF; exit }'
# Extract latest shorten version
awk '/shorten-[0-9.]*\.tar\.gz/ {
sub("^.*shorten-", "", $0)
sub(".tar.gz.*", "", $0)
tarball = $0
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "shorten", maxname }' shorten
# Extract latest smarty version
awk '/Smarty-[0-9.].*tar\.gz/ {
tarball = gensub("^.*Smarty-([0-9.abrc]*)[.]tar[.]gz.*$", "\\1", "g")
split(tarball, rel, /[.]/)
if (tarball ~ /(b|rc)/) {
if (rel[1] > maxdevrel[1]) {
split(tarball, maxdevrel, /[.]/)
maxdevname = tarball
} else if (rel[1] == maxdevrel[1] && rel[2] > maxdevrel[2]) {
split(tarball, maxdevrel, /[.]/)
maxdevname = tarball
} else if (rel[1] == maxdevrel[1] && rel[2] == maxdevrel[2] && rel[3] > maxdevrel[3]) {
split(tarball, maxdevrel, /[.]/)
maxdevname = tarball
}
} else {
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
}
END {
if (maxdevname != "") {
printf "%-30s Stable: %-18s Developer: %s\n", "smarty", maxname, maxdevname
} else {
printf "%-30s Stable: %s\n", "smarty", maxname
}
}' smarty
# Extract latest smbldap-tools version
sed -e 's/[<][^>]*[>]/ /g' -e 's/[&]nbsp;/\n/g' -e 's/^[[:space:]]*//' smbldap-tools |
awk '/smbldap-tools-.*\.t(ar\.)?gz/ {
tarball = $1
sub("^smbldap-tools-", "", tarball)
sub("[.]t(ar[.])?gz", "", tarball)
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END {
printf "%-30s Stable: %s\n", "smbldap-tools", maxname
exit
}'
# Extract latest smf-sav version
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' smf-sav |
awk '/^smf-sav v/ {
printf "%-30s Stable: %s\n", "smf-sav", substr($2, 2); exit }'
# Extract latest smf-spf version
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' smf-spf |
awk '/^smf-spf v/ {
printf "%-30s Stable: %s\n", "smf-spf", substr($2, 2); exit }'
# Extract latest spamass-milter version
sed -e 's/[<][^>]*[>]/ /g' -e 's/^[[:space:]]*//' spamass-milter |
awk '/spamass-milter-[0-9].*\.tar\.(bz2|gz)[[:space:]]/ {
tarball = $1
sub("^.*-", "", tarball)
sub(".tar.(bz2|gz)$", "", tarball)
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "spamass-milter", maxname }'
# Extract latest spfmilter version
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' spfmilter |
awk '/^Fetch version/ { ver = $3; sub("[.]*$", "", ver); printf "%-30s Stable: %s\n", "spfmilter", ver; exit }'
# Extract latest tidyp version
python-html2text --ignore-links tidyp |
awk '/#### *tidyp-[0-9.]*\.tar\.gz/ {
tarball = $2
sub("^tidyp-", "", tarball)
sub(".tar.gz$", "", tarball)
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "tidyp", maxname }'
# Extract latest torrentsniff version
sed -e 's/[<][^>]*[>]//g' -e 's/^[[:space:]]*//' torrentsniff |
awk '/^Download TorrentSniff/ { printf "%-30s Stable: %s\n", "torrentsniff", $3; exit }'
# Extract latest Sun Java JDK Timezone Update Tool version
sed -e 's/
/\n/g; s/[<][^>]*[>]//g; s/^[[:space:]]*//' oracle-java |
awk '/^[[:space:]]*JDK DST Timezone Update Tool/ {
thisrel = $7
printf "%-30s Stable: %s\n", "tzupdater", thisrel
exit
}'
# Extract latest weblint++ version
sf-current-release weblint++ weblint++
# Extract latest unrar version
awk '/unrarsrc-[0-9].*\.tar\.gz/ {
sub("^.*unrarsrc-", "", $0)
sub(".tar.gz.*", "", $0)
tarball = $0
split(tarball, rel, /[.]/)
if (rel[1] > maxrel[1]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] > maxrel[2]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
} else if (rel[1] == maxrel[1] && rel[2] == maxrel[2] && rel[3] > maxrel[3]) {
split(tarball, maxrel, /[.]/)
maxname = tarball
}
}
END { printf "%-30s Stable: %s\n", "unrar", maxname }' unrar
# Extract latest xxdiff versions
sf-current-release xxdiff
# Extract latest zope interface versions
awk '/[<][^>]*$/ { printf "%s", $0; next } { print }' zope-interface |
sed -e 's/[<][^>]*[>]//g' -e 's/[&]nbsp;/\n/g' -e 's/^[[:space:]]*//' |
awk 'NR == 1, /^Available Releases/ { next }
/^(Development|Stable)$/ {
reltype = $1
next
}
/^zope[.]interface-.*[.]tar[.]gz/ {
tarball = $1
sub("^zope[.]interface-", "", tarball)
sub("[.]tar[.]gz$", "", tarball)
if (reltype == "Development" && devrel == "") { devrel = tarball }
if (reltype == "Stable" && relrel == "") { relrel = tarball }
}
END {
printf "%-30s Stable: %-18s Developer: %s\n", "python-zope-interface", relrel, devrel
}'
) > versions
# Compare with versions from last run
diff versions.last versions