#!/bin/sh
# 2008 (c) Etersoft www.etersoft.ru
# Public domain
# Author: Vitaly Lipatov <lav@etersoft.ru>
# Thanks Alexey Gladkov <legion@altlinux.ru> for the instructions
#
# See http://www.freesource.info/wiki/ALTLinux/Sisyphus/devel/Unmets
#
# Tests unmets in built int hasher packages

# load common functions, compatible with local and installed script
. `dirname $0`/../share/eterbuild/functions/common
load_mod hasher

make_ordinalbox()
{
	mkdir -p $ORDINALWORKDIR
	echo "Build aptbox in $ORDINALWORKDIR ..."
	#rm -rf $ORDINALWORKDIR
	mkaptbox -f --apt-config=$ORDINALAPTCONF $ORDINALWORKDIR
}

make_testingbox()
{
	mkdir -p $TESTINGWORKDIR
	echo "Build aptbox in $TESTINGWORKDIR ..."
	#rm -rf $TESTINGWORKDIR
	mkaptbox -f --apt-config=$TESTINGAPTCONF $TESTINGWORKDIR
}


Usage="Usage: $name [-M24 -M40]"
function mygetopts()
{
name=${0##*/}
Descr="$name - tests unmets in build packages"

phelp()
{
	echog "$Descr"
	echog "$Usage"
	echog "Options:"
	echog " -s   - get all unmets"
	echog " -M40 - test for distro ALT Linux 4.0"
}

SKIPTST=
while getopts :hs opt; do
    case $opt in
    h) phelp; exit 0;;
	s) SKIPTST=1 ;;
	?) OPTIND=$((OPTIND-1)); break;
    esac
done

# remove args that were options
if [ $# -gt 0 ]; then 
	shift $((OPTIND - 1))
fi

# pass other options to RPM:
LISTRPMARGS=$@
}

# FIXME: needs no args now
parse_cmd_pre "" "$@"

mygetopts $LISTARGS

# Prepare our variables
ORDINALWORKDIR=$OURTMPDIR/WD1
TESTINGWORKDIR=$OURTMPDIR/WD2

ORDINALAPTCONF=$APTCONF

HASHERDIR=$HASHERDIR$MENVARG
if [ ! -d $HASHERDIR/repo ] || [ -n "$SKIPTST" ] ; then
	[ -z "$SKIPTST" ] && fatal "Can't find repo in hasher '$HASHERDIR' dir, use -s for overall check"
	make_ordinalbox
	echo
	echo "All unmets in repo $MENV"
	$ORDINALWORKDIR/aptbox/apt-cache unmet
	rm -rf $ORDINALWORKDIR
	exit 0
fi

echo "Prepare to unmets checking..."
# Prepare our confdir
prepare_aptconfig
TESTINGAPTCONF=$OURAPTCONF
echo "rpm file:$HASHERDIR/repo/ $DEFAULTARCH hasher" >>$OURSOURCES

make_ordinalbox
make_testingbox

echo "Calculate unmets..."
$ORDINALWORKDIR/aptbox/apt-cache unmet > $OURTMPDIR/unmets.old
$TESTINGWORKDIR/aptbox/apt-cache unmet > $OURTMPDIR/unmets.new

echo
echo "New unmets:"
diff -U0 $OURTMPDIR/unmets.{old,new}

if [ ! -d "$SISYPHUSPATH" ] ; then
	echo "Sisyphus repo is not found in '$SISYPHUSPATH'. Set SISYPHUSPATH to compare requires with new packages"
	exit 1
fi

NEWPKGDIR=$HASHERDIR/repo/$DEFAULTARCH/RPMS.hasher/

echo
echo "Compare requires between new packages and their Sisyphus version"
export LESS_PROGRAM=/dev/null
for i in $(echo $NEWPKGDIR/*.rpm) ; do
	OLDPKGNAME=$(rpm -qp $i | sed -e "s|-[0-9].*||g")
	OLDPKG=$(echo $SISYPHUSPATH/*/RPMS.*/$OLDPKGNAME-[0-9]*.rpm)
	if [ ! -r "$OLDPKG" ] ; then
		echo "Cannot find old package for $(basename $i), skipping"
		continue
	fi
	echo "Compare $OLDPKG with new $i"
	compare_packages -a -R -- $OLDPKG  -- $i
done