#!/bin/sh
# cleanold moving the old packages
# Call this on the packages directory

[ -z "$UPKG_BASE" ] && UPKG_BASE="../old"

usage() {
cat<< EOF
cleanold - move old packages to other directory
usage: cleanold [-u| --update]

EOF
exit 0
}

if [ ! -d $UPKG_BASE ]; then
    $UPKG_BASE=""
fi

pkgname() {
name=${1%%-*}
ver_rest=${1#$name-}
while [ 0 ]; do
   if echo $ver_rest | grep -qe "^[0-9]*\."; then
      break
   fi  
   if echo $ver_rest | grep -qe "^[0-9]*-"; then
      break
   fi  
   if echo $ver_rest | grep -qe "^[0-9]*_"; then
      break
   fi  
   case `echo $ver_rest | cut -f1 -d-` in
      noarch|i386|i486|i586|i686|i786|i886|i986)
         break
      ;;
   esac
   extra=${ver_rest%%-*}
   ver_rest=${ver_rest#$extra-}
   if [ "$ver_rest" = "$extra" ]; then
      break
   fi
   name="${name}-${extra}"
done
echo $name
}

pkgversion() {
name=`pkgname $1`
ver_rest=${1#$name-}
ver=${ver_rest%%-*}
ver_rest=${ver_rest#$ver-}
while [ "$ver_rest" ]; do
   case `echo $ver_rest | cut -f1 -d-` in
      noarch|i386|i486|i586|i686|i786|i886|i986)
        break
      ;;
   esac
   extra=${ver_rest%%-*}
   ver_rest=${ver_rest#$extra-}
   if [ "$ver_rest" = "$extra" ]; then
      break
   fi
   ver="${ver}-${extra}"
done
echo $ver
}

# return 0 = same
# return -1 = older
# return 1 = newer
vercompare() {

VER1=$1
VER2=$2
if [ "$VER1" == "$VER2" ]; then
    return 0
fi

while [ 0 ]; do
    VVER1=${VER1%%.*}
    VVER2=${VER2%%.*}
    if [ ${#VVER1} -gt ${#VVER2} ]; then
	return 1    
    fi
    if [ ${#VVER1} -lt ${#VVER2} ]; then
	return -1    
    fi
    if [ "$VVER1" \> "$VVER2" ]; then
	return 1
    fi
    if [ "$VVER2" \> "$VVER1" ]; then
	return -1
    fi
    if [ "$VER1" == "$VVER1" ]; then
	return 1
    fi
    if [ "$VER2" == "$VVER2" ]; then
	return -1
    fi
    VER1=${VER1#*.}
    VER2=${VER2#*.}
done
}

## check if this is the newest package on the dir
is_it_newest()
{
    PNAME=`pkgname $BNAME`
    for PKG2 in $DNAME/$PNAME-*.tgz; do
	BNAME2=`basename $PKG2 tgz`
	[ $BNAME == $BNAME2 ] && continue
	PNAME2=`pkgname $BNAME2`
	[ $PNAME != $PNAME2 ] && continue
	PVER1=`pkgversion $BNAME`
	PVER2=`pkgversion $BNAME2`
	vercompare $PVER2 $PVER1
	if [ $? = 1 ]; then
	    return 1
	fi
    done
    return 0
}

move_pkg()
{
    if [ "$UPKG_BASE" ]; then
	echo moving $BNAME to $UPKG_BASE/$DNAME >&2
	mkdir -p $UPKG_BASE/$DNAME > /dev/null
	mv $DNAME/$BNAME.* $UPKG_BASE/$DNAME > /dev/null
    else
	echo deleting $BNAME to $UPKG_BASE/$DNAME >&2
	rm -f $DNAME/$BNAME.*
    fi
}

case "$1" in
    "--move")
    BNAME=`basename $2 .tgz`
    DNAME=`dirname $2`
    if ! is_it_newest; then
	move_pkg
    fi
    exit 0
    ;;
    "--list")
    BNAME=`basename $2 .tgz`
    DNAME=`dirname $2`
    if ! is_it_newest; then
	echo $BNAME is old
    fi
    exit 0
    ;;
    "--update"|"-u")
    find . -name *.tgz -exec $0 --move {} \;
    exit 0
    ;;
    "-h"|"--help")
    usage
    ;;
    *)
    find . -name *.tgz -exec $0 --list {} \;
    exit 0
    ;;
esac

