--- /usr/bin/versionpkg.old 2006-09-29 21:20:54.000000000 -0400 +++ /usr/bin/versionpkg 2006-09-30 09:25:29.000000000 -0400 @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # name: versionpkg # desc: a makepkg wrapper for building CVS/SVN/Mercurial pkgs @@ -9,7 +9,85 @@ # makepkg configuration [ -f /etc/makepkg.conf ] && source /etc/makepkg.conf -[ "${1}" = "-f" ] && force="true" +myver="0.6.3" + +version() { + echo "versionpkg version $myver" +} + +usage() { + version + echo + echo "Usage: $0 [options]" + echo + echo "Options:" + echo " update SVN/CVS/MERCURIAL version numbers and call makepkg." + echo "-f, --force force version replacement and build even if package versions" + echo " are the same." + echo "-c, --check-only check for newer versions and print to screen." + echo "-m, --modify-only modify the PKGBUILD with newer version and omit building." + echo "-o <\"\-\-OPTS\"> pass OPTS to makepkg. Must enclose in double quotes and use" + echo " escape characters as shown." + echo "-v, --version display version and exit." + echo "-h, --help show this help message and exit." + echo +} + +FORCE=0 +CHECK_ONLY=0 +MODIFY_ONLY=0 +MAKEPKG_OPTS="" + +while [ "$#" -ne "0" ]; do + case $1 in + --force) FORCE=1 ;; + --check-only) CHECK_ONLY=1 ;; + --modify-only) MODIFY_ONLY=1 ;; + --version) + version + exit 0 + ;; + --help) + usage + exit 0 + ;; + --*) + usage + exit 1 + ;; + -*) + while getopts "fcmo:vh-" opt; do + case $opt in + f) FORCE=1 ;; + c) CHECK_ONLY=1 ;; + m) MODIFY_ONLY=1 ;; + v) + version + exit 0 + ;; + o) MAKEPKG_OPTS=$(echo $OPTARG |sed 's|\\||g') + ;; + h) + usage + exit 0 + ;; + -) + break + ;; + *) + usage + exit 1 + ;; + esac + done + ;; + *) + true + ;; + esac + shift +done + # SUBROUTINES plain() { @@ -40,50 +118,93 @@ echo "==> ERROR: $1" >&2 fi } + +# main functions update_pb() { - if [ "${force}" = "true" ] || [ "$1" != "$oldpkgver" ] ; then - sed -i "1,11 s/pkgver=$oldpkgver/pkgver=$1/" ./PKGBUILD - else - error "No newer revision, use versionpkg -f to force update." - exit 1 - fi + sed -i "1,11 s/pkgver=$oldpkgver/pkgver=$1/" ./PKGBUILD } + revert_pb() { error "Reverting pkgver..." sed -i "1,11 s/pkgver=[^ ]*/pkgver=$oldpkgver/" ./PKGBUILD exit 1 } -source PKGBUILD +if [ -f ./PKGBUILD ]; then + source PKGBUILD || exit 1 +else + error "./PKGBUILD not found" + exit 1 +fi + oldpkgver=$pkgver +if [ "$MAKEPKG_OPTS" != "" ]; then + msg "using makepkg opts \`$MAKEPKG_OPTS'" +fi if [ ! -z ${_cvsroot} ] && [ ! -z ${_cvsmod} ] ; then - cvsdate=`date +%Y%m%d` - update_pb $cvsdate - makepkg $@ || revert_pb - exit 0 + msg "determining latest cvs revision... \\c" + latestver=$(date +%Y%m%d) + echo $latestver elif [ ! -z ${_svntrunk} ] && [ ! -z ${_svnmod} ] ; then - svnrevno=`svn log $_svntrunk --limit 1 | sed -n 's/^r\([^ ]*\) .*$/\1/p'` - msg "Current revision number is $svnrevno" - update_pb $svnrevno - makepkg $@ || revert_pb - exit 0 + msg "retrieving latest revision number from svn... \\c" + latestver=$(svn log $_svntrunk --limit 1 | sed -n 's/^r\([^ ]*\) .*$/\1/p') + echo "$latestver" elif [ ! -z ${_hgroot} ] && [ ! -z ${_hgrepo} ] ; then if [ -d ./src/$_hgrepo ] ; then + msg "retrieving latest revision number from hg... \\c" cd ./src/$_hgrepo make clean hg pull hg update else + msg "determining latest hg revision... \\c" hg clone $_hgroot/$_hgrepo ./src/$_hgrepo cd ./src/$_hgrepo fi - hgtip=`hg tip | sed -n '1s/[^0-9]*\([^:]*\):.*$/\1/p'` + latestver=$(hg tip | sed -n '1s/[^0-9]*\([^:]*\):.*$/\1/p') + echo "$latestver" cd ../../ - update_pb $hgtip - makepkg $@ || revert_pb - exit 0 else - error "No SVN, CVS, or Mercurial variables found! Aborting..." + error "No SVN, CVS, or Mercurial variables found! Aborting... " exit 1 fi + +if [ "$latestver" = "" ]; then + error "unable to retrieve revision number" + exit 1 +elif [ "$latestver" != "$oldpkgver" ]; then + msg "newer revision detected: $latestver" + if [ "$CHECK_ONLY" = "1" ]; then + exit 0 + fi + if [ "$MODIFY_ONLY" = "1" ]; then + msg "modifying PKGBUILD to pkgver=$latestver... " + update_pb $latestver + exit 0 + fi + update_pb $latestver + makepkg $MAKEPKG_OPTS || revert_pb + exit 0 +else + warning "PKGBUILD pkgver is $oldpkgver, no newer revision available" + if [ "$CHECK_ONLY" = "1" ]; then + exit 0 + fi + if [ "$MODIFY_ONLY" = "1" ]; then + true + # don't exit yet, check if FORCE flag is set + fi + if [ "$FORCE" = "1" ]; then + msg "forcing pkgver to $latestver... " + update_pb $latestver + if [ "$MODIFY_ONLY" = "1" ]; then + exit 0 + fi + makepkg $MAKEPKG_OPTS || revert_pb + exit 0 + else + error "exiting now, use versionpkg -f to force update" + exit 1 + fi +fi