#!/bin/sh # cleanold moving the old packages # Call this on the packages directory # # updated 29 July 2006 by John Babiak # # added ability to work with .tlz packages # [ -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 2 = 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 2 fi if [ "$VVER1" \> "$VVER2" ]; then return 1 fi if [ "$VVER2" \> "$VVER1" ]; then return 2 fi if [ "$VER1" == "$VVER1" ]; then return 1 fi if [ "$VER2" == "$VVER2" ]; then return 2 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 for PKG2 in $DNAME/$PNAME-*.tlz; do BNAME2=`basename $PKG2 tlz` [ $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 for PKG2 in $DNAME/$PNAME-*.txz; do BNAME2=`basename $PKG2 txz` [ $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 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 BNAME=`basename $2 .tlz` DNAME=`dirname $2` if ! is_it_newest; then move_pkg fi BNAME=`basename $2 .txz` 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 BNAME=`basename $2 .tlz` DNAME=`dirname $2` if ! is_it_newest; then echo $BNAME is old fi BNAME=`basename $2 .txz` DNAME=`dirname $2` if ! is_it_newest; then echo $BNAME is old fi exit 0 ;; "--update"|"-u") find . -name *.tgz -exec $0 --move {} \; find . -name *.tlz -exec $0 --move {} \; find . -name *.txz -exec $0 --move {} \; exit 0 ;; "-h"|"--help") usage ;; *) find . -name *.tgz -exec $0 --list {} \; find . -name *.tlz -exec $0 --list {} \; find . -name *.txz -exec $0 --list {} \; exit 0 ;; esac