diff --git a/maintainers/scripts/gnome-latest.sh b/maintainers/scripts/gnome-latest.sh new file mode 100755 index 000000000000..00ec1a105da1 --- /dev/null +++ b/maintainers/scripts/gnome-latest.sh @@ -0,0 +1,105 @@ +#!/bin/sh + +GNOME_FTP="ftp.gnome.org/pub/GNOME/sources" + +project=$1 + +if [ "$project" == "--help" ]; then + echo "Usage: $0 project [major.minor]" + exit 0 +fi + +baseVersion=$2 + +if [ -z "$project" ]; then + echo "No project specified, exiting" + exit 1 +fi + +# curl -l ftp://... doesn't work from my office in HSE, and I don't want to have +# any conversations with sysadmin. Somehow lftp works. +if [ "$FTP_CLIENT" = "lftp" ]; then + ls_ftp() { + lftp -c "open $1; cls" + } +else + ls_ftp() { + curl -l "$1"/ + } +fi + +if [ -z "$baseVersion" ]; then + echo "Looking for available versions..." >&2 + available_baseversions=( `ls_ftp ftp://${GNOME_FTP}/${project} | grep '[0-9]\.[0-9]' | sort -t. -k1,1n -k 2,2n` ) + echo -e "The following versions are available:\n ${available_baseversions[@]}" >&2 + echo -en "Choose one of them: " >&2 + read baseVersion +fi + +FTPDIR="${GNOME_FTP}/${project}/${baseVersion}" + +#version=`curl -l ${FTPDIR}/ 2>/dev/null | grep LATEST-IS | sed -e s/LATEST-IS-//` +# gnome's LATEST-IS is broken. Do not trust it. + +files=$(ls_ftp "${FTPDIR}") +declare -A versions + +for f in $files; do + case $f in + (LATEST-IS-*|*.news|*.changes|*.sha256sum|*.diff*): + ;; + ($project-*.*.9*.tar.*): + tmp=${f#$project-} + tmp=${tmp%.tar*} + echo "Ignored unstable version ${tmp}" >&2 + ;; + ($project-*.tar.*): + tmp=${f#$project-} + tmp=${tmp%.tar*} + versions[${tmp}]=1 + ;; + (*): + echo "UNKNOWN FILE $f" + ;; + esac +done +echo "Found versions ${!versions[@]}" >&2 +version=`echo ${!versions[@]} | sed -e 's/ /\n/g' | sort -t. -k1,1n -k 2,2n -k 3,3n | tail -n1` +echo "Latest version is: ${version}" >&2 + +name=${project}-${version} +echo "Fetching .sha256 file" >&2 +curl -O http://${FTPDIR}/${name}.sha256sum + +extensions=( "xz" "bz2" "gz" ) +echo "Choosing archive extension (known are ${extensions[@]})..." >&2 +for ext in ${extensions[@]}; do + if grep "\\.tar\\.${ext}$" ${name}.sha256sum >& /dev/null; then + ext_pref=$ext + sha256=$(grep "\\.tar\\.${ext}$" ${name}.sha256sum | cut -f1 -d\ ) + break + fi +done +sha256=`nix-hash --to-base32 --type sha256 $sha256` +echo "Chosen ${ext_pref}, hash is ${sha256}" >&2 + +cat <&2