### vim:ft=zsh:fdm=marker
###
### kget - fetch linux kernel tarballs/patches/incremental-patches
### uses  ${FTP_KERNEL_ORG}
###       ${FTP_KERNEL_ORG_DL}
###
### Frank Terbeck <ft@bewatermyfriend.org>
### Last-Modified: Wed Dec 26 14:38:13 2007
###
### URI: <http://ft.bewatermyfriend.org/comp/zsh.html>
###

emulate -L zsh
setopt extendedglob

if [[ $1 == '-c' ]] ; then
    print 'GET /kdist/finger_banner HTTP1.0\n\n' | nc www.kernel.org 80 | grep --color=never latest
    return 0
fi

local server dl_dir file_tar file_sign base old inc lastopt pu

server=${FTP_KERNEL_ORG:-ftp://ftp.kernel.org}
dl_dir=${FTP_KERNEL_ORG_DL:-.}

if [[ ! -d $dl_dir ]] ; then
    dl_dir='.'
fi

while getopts "pist" param; do
    case ${param} in
        (p)
            lastopt='p'
            shift
            print "kget() getting kernel patch $1.$2.$3"
            file_tar="${server}/pub/linux/kernel/v$1.$2/patch-$1.$2.$3.bz2"
            file_sign="${file_tar}.sign"
            ;;
        (i)
            lastopt='i'
            shift
            inc=${3:e}
            base=${3:r}
            old=$((inc - 1))
            print "kget() getting incremental kernel patch $1.$2.${base}.${old}-${inc}"
            file_tar="${server}/pub/linux/kernel/v$1.$2/incr/patch-$1.$2.${base}.${old}-${inc}.bz2"
            file_sign="${file_tar}.sign"
            ;;
        (s)
            lastopt='s'
            shift
            base=${3:r}
            print "kget() getting kernel patch (snapshot) $1.$2.${base}"
            file_tar="${server}/pub/linux/kernel/v$1.$2/snapshots/patch-$1.$2.${base}.bz2"
            file_sign="${file_tar}.sign"
            ;;
        (t)
            lastopt='t'
            shift lastopt
            print "kget() getting kernel tarball $1.$2.$3"
            file_tar="${server}/pub/linux/kernel/v$1.$2/linux-$1.$2.$3.tar.bz2"
            file_sign="${file_tar}.sign"
            ;;
        (*)
            pu=1
            ;;
    esac
done

if [[ ${pu} != 1 && -z ${lastopt} ]] ; then
    print "kget() getting kernel tarball $1.$2.$3"
    file_tar="${server}/pub/linux/kernel/v$1.$2/linux-$1.$2.$3.tar.bz2"
    file_sign="${file_tar}.sign"
fi

if [[ -z $3 || ${pu} == 1 ]] ; then
    print "kget() usage:"
    print "  $0 [-c] major minor patchlevel [-p|-i]"
    print "    [[[ eg.: $0 2 6 14.2 ]]]\n"
    print "    -p gets the patch file"
    print "    -i gets the incremental patch (eg. 2.6.11.4 => 2.6.11.5)"
    print "  if '-c' is the first argument of kget, check for lastest kernel versions"
    return 1
fi

print -- "-  downloads go to: ${dl_dir}"
print -- "-  downloading files from ${server}"
print -- "-  ${file_tar}"

cd ${dl_dir}

wget -c ${file_tar}
wget -c ${file_sign}
file_tar=${file_tar:t}
file_sign=${file_sign:t}

print -- "-  verifying download with signature file"
gpg --verify ${file_sign} ${file_tar}
cd - > /dev/null 2>&1