#!/usr/bin/bash
# Find and remove repeated (RPM) packages, But saving newest!
# Exit code 0 = done successfully
# Exit code 1 = Root permissions needed
# Sun 26 Dec 2010 01:55:22 AM EET 
# Ehab El-Gedawy <ehabsas@gmail.com>
#if [ $UID -ne 0 ] ;then
#    echo -e "$(basename $0): Error: Root permissions needed!"
#    exit 1
#fi
[[ -n $1 && -d $1 ]] ||  exit 1 
TargetDir=$(echo  $1 | sed 's/\/$//')
Red="$(tput setaf 1)"
Green="$(tput setaf 2)"
NC="$(tput sgr0)"

LogFile=/home/$USERNAME/Repeated\ \(RPM\)\ packages.log
PACKSCOUNT=0
FILES_SIZE=0
CheckPacks()
{
    Skip=0
    for b in $(ls -r1 --sort=version $TargetDir/*/packages/$1 2>/dev/null)
    do
        if [ $Skip -ne 0 ] ;then
        File_Size=$[$(cksum "$b" | cut -d " " -f 2)/1024]
        FILES_SIZE=$[$FILES_SIZE+$File_Size]
        [ $UID -ne 0 ] && rm -f $b
        [ $UID -ne 0 ] && echo -e "Removing file: $b"  >> "$LogFile"
        [ $UID -ne 0 ] && echo -e "Repeated file: $b"  >> "$LogFile"
        PACKSCOUNT=$[$PACKSCOUNT+1]
        fi
           Skip=1
     done
}

RemRep()
{
    echo -e "Old packages in $TargetDir will be removed!"
    echo -e '---------------------------------------------------------'
    echo -e "---------------------------------------------------------
    \t\t\t$(date)\nGETREPEATEDANDSOON\nRepeated packages are:" >> "$LogFile" 
    [ $UID -ne 0 ] && echo -e "${Green}Finding and removing files.${NC}"
    for a in $(rpm --nosignature --qf '%{Name}\n' -qp $(ls -r1 $TargetDir/*/packages/*.rpm 2>/dev/null) 2>/dev/null | sort | uniq -d)
    do
        CheckPacks $a-[0-9]*.i*.rpm
        CheckPacks $a-[0-9]*.x*.rpm
        CheckPacks $a-[0-9]*.noarch.rpm
    done
    echo -e '---------------------------------------------------------'
    PACGNUMMSG="$( [ $UID -ne 0 ] && echo "IF " )$PACKSCOUNT repeated packages Removed!, This will save almost $[$FILES_SIZE/1024] MB"
    echo -e $PACGNUMMSG
    sed -i -e "s;GETREPEATEDANDSOON;$PACGNUMMSG;g"  "$LogFile"
    echo -e "Read $LogFile for more detailes"
}
RemRep
chown $USERNAME:$USERNAME "$LogFile"
exit 0
