Here's a rough Python script I slapped together to do the same thing. Note that I'm
testing on Windows, but I can't see why there'd be any problems when you run it under
Gentoo. Again, very rough, YMMV.
#! /usr/bin/env python
"""Remove outdated tarballs from portage's distfiles directory."""
import os
import string
DISTFILES_DIR = 'h:\distfiles\\'
all_files = os.listdir( DISTFILES_DIR )
by_name = [ string.split( filename, '-', 1 ) for filename in all_files ]
pkg_dict = {}
for pkg in by_name:
if not pkg_dict.has_key( pkg[ 0 ] ):
pkg_dict[ pkg[ 0 ] ] = []
pkg_dict[ pkg[0] ].append( pkg[ 1 ] )
for pkg_name, version_list in pkg_dict.items():
version_list.sort()
version_list.pop()
for version in version_list:
full_filename = DISTFILES_DIR + pkg_name + "-" + version
print "Removing", full_filename, "...",
os.remove( full_filename )
print "done."
Doug Gorley | [EMAIL PROTECTED]
----- Original Message -----
From: Andy Arbon <[EMAIL PROTECTED]>
Date: Monday, March 24, 2003 1:39 pm
Subject: [gentoo-user] Disk space && managing package binaries
> Hello,
>
> Related to my recent question on gentoo-user regarding freeing up
> disk
> space, I've just written a short bash script that helps tidying up
> the
> binary packages that portage builds (see below).
>
> All it does it take each file in the distfiles and packages
> directories
> and use qpkg to see if the package that built/came from it is
> currently
> installed. If it isn't then it's removed.
>
> There are obviously shortcomings with this, but as a rough tool it
> works. One problem is that if you have a package like rsync-1.2.3
> and
> rsync-1.2.3-r1 then rsync-1.2.3 won't get removed until the system
> gets
> upgraded to rsync-1.2.4, as (AFAIK) there's no way to specify
> end-of-string in a query to qpkg (am I wrong about this?)
>
> At the moment it moves packages into a subdirectory ready to be
> removed
> but doesn't actually remove them.
>
> Any comments on this?
>
> Cheers,
>
> Andy
>
> #!/bin/bash
> # Clean out of date packages and distfiles out
>
> PPATH="/usr/portage/packages/All"
> DPATH="/usr/portage/distfiles"
> FILELIST=`find $PPATH| sed -e \
> 's/.*\/\(.*\)\.\(tar.bz2$\|zip\|tar.gz$\|tbz2\|bz2\|gz\)$/\1/g' -e
> '1d'`
> if [[ -z "$PPATH/../old" ]];
> then mkdir "$PPATH/../old"
> fi
>
> for file in $FILELIST; do
> echo -n "Testing $file "
> if [[ ! `qpkg -I $file` ]];
> then mv $PPATH/$file* $PPATH/../old/
> echo "... removing";
> else echo
> fi
> done
>
> # Now we do the distfiles
> FILELIST=`find $DPATH| sed -e \
> 's/.*\/\(.*\)\.\(tar.bz2$\|zip\|tar.gz$\|tbz2\|bz2\|gz\|exe\|wsz\|tgz\|patch\|bin\|tar.Z\)$/\1/g'
>
> -e '1d'`
>
> if [[ -z "$DPATH/../old" ]];
> then mkdir "$DPATH/../old"
> fi
>
> for file in $FILELIST; do
> echo -n "Testing $file "
> if [[ ! `qpkg -I $file` ]];
> then mv $DPATH/$file* $DPATH/../old/
> echo "... removing";
> else echo
> fi
> done
>
>
> --
> [EMAIL PROTECTED] mailing list
>
>
--
[EMAIL PROTECTED] mailing list