[pacman-dev] Another clean repo script
Mark Constable
markc at renta.net
Sun Feb 17 12:44:21 EST 2008
On 18 Feb 2008 02:14, Roman Kyrylych wrote:
> ...
> Then we can forget about this corner case, it can be worked
> around by cache cleanup scripts based on filename parsing
> (available on BBS and ML).
Along these lines this could be useful for someone searching
through the list archives. It just removes old duplicates. I
need it to clean up my local custom repo when I move $PKGDEST
contents into it before rebuilding the repo database.
This construct has so far caught every package name I've thrown
at it...
pkgname=$(echo $FILENAME|sed 's/^\(.*[^-][^0-9]\)-[0-9].*/\1/')
mpkg_cleanrepo()
{
[ -n "$1" ] && WORK=$1 || WORK=/var/cache/pacman/pkg
[ -d $WORK ] && cd $WORK || {
echo "ERROR: $WORK does not exist" && return
}
local TMP=($(echo *.pkg*)) # to prevent set -e failing
[ ${#TMP[@]} -gt 1 ] && FILES=$(/bin/ls -v *.pkg*) || return
BEFORE_DU=$(du -sb|cut -f1)
for FILE in $FILES; do
NAME=$(echo $FILE|sed 's/^\(.*[^-][^0-9]\)-[0-9].*/\1/')
if [ "$PREV_NAME" = "$NAME" ]; then
# msg "$PREV_FILE\n" 0 "REMOVED" 31
sudo rm $PREV_FILE
CNT_RM=$(($CNT_RM+1))
else
CNT_NOTRM=$(($CNT_NOTRM+1))
fi
PREV_FILE=$FILE
PREV_NAME=$NAME
done
AFTER_DU=$(du -sb|cut -f1)
DIFF_DU=$(($BEFORE_DU-$AFTER_DU))
CURRENT_DU=$(echo $((AFTER_DU/1000000))|sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')
REMOVED_DU=$(echo $((DIFF_DU/1000000))|sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')
if [ $CNT_RM -gt 0 ]; then
# msg "$(pwd)\n" 33 "Package Path:" 31
printf "%-24s %4d %8sM\n" "Packages removed" $CNT_RM $REMOVED_DU
printf "%-24s %4d %8sM\n" "Remaining packages" $CNT_NOTRM $CURRENT_DU
fi
}
--markc
More information about the pacman-dev
mailing list