aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/distfiles-clean/distfiles-clean')
-rw-r--r--src/distfiles-clean/distfiles-clean78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/distfiles-clean/distfiles-clean b/src/distfiles-clean/distfiles-clean
new file mode 100644
index 0000000..23af32b
--- /dev/null
+++ b/src/distfiles-clean/distfiles-clean
@@ -0,0 +1,78 @@
+#!/bin/sh
+#
+# distfiles-clean
+#
+# Cleans unused files from Portage's distfiles directory.
+#
+# Josť Fonseca <j_r_fonseca@yahoo.co.uk>
+
+PROGRAM=`basename "$0"`
+
+while [ ${#} -gt 0 ]
+do
+ case "$1" in
+ -h|--help)
+ USAGE=y
+ break
+ ;;
+ -i|--ignore)
+ IGNORE="$IGNORE $2"
+ shift 2
+ ;;
+ -I|--ignore-file)
+ IGNORE="$IGNORE `cat "$2"`"
+ shift 2
+ ;;
+ -p|--pretend)
+ PRETEND=y
+ shift
+ ;;
+ *)
+ echo "$PROGRAM: Invalid option \'$1\'" 1>&2
+ USAGE=y
+ break
+ ;;
+ esac
+done
+
+# For PORTDIR and DISTDIR
+. /etc/make.globals
+. /etc/make.conf
+
+if [ "$USAGE" ]
+then
+ echo "Usage: $PROGRAM [-h|--help] [-i|--ignore <glob>] [-I|--ignore-file <globfile>] [-p|--pretend]"
+ echo "Cleans unused files from $DISTDIR directory."
+ exit
+fi
+
+DBDIR=/var/db/pkg
+CACHEDIR=/var/cache/edb/dep
+
+for DIR in "$PORTDIR" "$DISTDIR" "$DBDIR" "$CACHEDIR"
+do
+ if [ ! -d "$DIR" ]
+ then
+ echo "$PROGRAM: \'$DIR\' not found."
+ exit
+ fi
+done
+
+TMPFILE=`mktemp /tmp/$PROGRAM.XXXXXX`
+
+cd "$DISTDIR"
+
+{
+ echo "cvs-src"
+ [ "$IGNORE" ] && ls -1d $IGNORE
+ find "$DBDIR" -name '*.ebuild' | sed -n -e "s:^$DBDIR/\([^/]*\)/\([^/]*\)/\([^/]*\)\.ebuild$:$CACHEDIR/\1/\3:p" | xargs sed -s -e '4!d;/^$/d;s/[[:alnum:]]\+?\|(\|)//g;s/\<[^[:space:]]\+\/\<//g;s/^[[:space:]]\+//g;s/[[:space:]]\+$//g;s/[[:space:]]\+/\n/g'
+} | sort -u > "$TMPFILE" && ls -1 | comm -23 - "$TMPFILE" | {
+ if [ "$PRETEND" ]
+ then
+ cat
+ else
+ xargs rm -f
+ fi
+}
+
+rm "$TMPFILE"