#!/bin/sh
#
# grab_md5
# (c) 2004 Steve McIntyre <steve@einval.com>
#
# GPL v2
#
# Parse Packages and Sources files out of a mirror and pre-process
# them into a single list ready for mkisofs to check later

MIRROR=$1
ARCHES="$2"
SUITE=$3
DI_SUITE=$4
OUT=$5

for ARCH in $ARCHES
do
	LOCATIONS="$MIRROR/dists/$SUITE/ $MIRROR/dists/$DI_SUITE/"
	echo "Looking in $LOCATIONS"

	case $ARCH in
		source)
			FILES=`find $LOCATIONS -name Sources.gz`
			echo -e "Using MD5 sums from Sources files:\n$FILES"
			zcat -f $FILES | awk -v MIRROR=$MIRROR '
				/^Directory:/      {
									DIR = $2
									next
								}
				/^Files:/       {
									in_files = 1
									next
								}
				/^ /            {
									if (in_files) { 
										gsub("^ ", "", $0)
										MD5 = $1
																		   SIZE = $2
										FILE = $3
										printf("%s  %12s  %s/%s/%s\n", MD5, SIZE, MIRROR, DIR, FILE);
										next
									}
								}
				/^[^ ]/            {
										in_files = 0
                                        FILE = ""
                                        DIR = ""
								}' | sort | uniq >> $OUT
			;;
		alpha|amd64|arm|hppa|i386|ia64|m68k|mips|mipsel|powerpc|s390|sparc)
			FILES=`find $LOCATIONS -name Packages.gz | grep binary-$ARCH`
			echo -e "Using MD5 sums from Packages files:\n$FILES"
			zcat -f $FILES | awk -v MIRROR=$MIRROR '
				/^Filename:/    {
									FILE = $2
								}
				/^Size:/        {
									SIZE = $2
								}
				/^MD5sum:/      {
									MD5 = $2
									printf("%s  %12d  %s/%s\n", MD5, SIZE, MIRROR, FILE)
								}' | sort | uniq >> $OUT
            # Use the new D-I images. Do NOT use the "current"
            # link; it causes problems with overlaid files...
            for VER in $MIRROR/dists/$DI_SUITE/main/installer-$ARCH/*
            do
                if [ -d $VER ] && [ ! -L $VER ] ; then
                    FILE=$VER/images/MD5SUMS
					echo "Using MD5 sums from d-i: $FILE"
                    LOC=dists/$DI_SUITE/main/installer-$ARCH/`basename $VER`/images
                    for ENTRY in `cat $FILE | sed 's/  /:/g'`
                    do
                        PATH=`echo $ENTRY | /bin/sed "s?^.*:\./?$MIRROR/$LOC/?g"`
                        MD5=`echo $ENTRY | /bin/sed 's/:.*$//g'`
                        SIZE=`/usr/bin/stat -c %s $PATH`
                        printf '%s  %12.12s  %s\n' $MD5 $SIZE $PATH
                    done | sort | uniq >> $OUT
                 fi
            done
			;;             
		*)
			echo "Unknown arch/source $ARCH!"
			exit 1
			;;
	esac
done

exit 0
