#!/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/.*<title>'"${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/<tr>/\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/<tr>/\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