#!/bin/sh -e
# $Id: sisyphus_cleanup_dups,v 1.2 2003/11/02 12:04:05 ldv Exp $

. /etc/sisyphus/config

WORKDIR="`mktemp -dt dups.XXXXXXXXXX`"

exit_handler()
{
        local rc=$?
        trap - EXIT
        rm -rf -- "$WORKDIR"
        exit $rc
}
trap exit_handler EXIT HUP INT PIPE TERM QUIT

echo "Making dups in repositories..."

reps="$DISTRIBUTION/RPMS.classic SRPMS.classic"
for rep in $reps; do
	mkdir -p -m700 -- "$WORKDIR/$rep"
	pushd "$PREFIX/$rep" >/dev/null
	(
		echo "entering $rep."
		>"$WORKDIR/$rep/dups" || { echo "failed $rep."; exit 1; }
		for n in `ls -1 |grep '.rpm$' |cut -c1 |LC_COLLATE=C sort -u`; do
			rpmrdups "$n"*.rpm >>"$WORKDIR/$rep/dups" &&
			echo "done $rep/$n." ||
			{ echo "failed $rep/$n."; exit 1; }
		done
		echo "leaving $rep."
	) &
	popd >/dev/null
done
echo "Waiting for rpmrdups..."
wait

echo "Done."

for rep in $reps; do
	if [ -s "$WORKDIR/$rep/dups" ]; then
		echo "Duplicated files found in \"$rep\" repository:"
		cat -- "$WORKDIR/$rep/dups"
		echo

		pushd "$PREFIX/$rep" >/dev/null
			cut -d\  -f2- -- "$WORKDIR/$rep/dups" |xargs -r ls -Llt --
			while :; do
				echo "Really purge files listed above? (yes/no)"
				read
				if [ "$REPLY" = no ]; then
					echo Cancelled!
					continue 2;
				fi
				if [ "$REPLY" = yes ]; then
					break;
				fi
			done

			cut -d\  -f2- -- "$WORKDIR/$rep/dups" |xargs -r realpath |xargs -r rm -v --
		popd >/dev/null
	fi
done
