#!/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"
CODENAME=$3
DI_CODENAME=$4
OUT=$5

for ARCH in $ARCHES
do
    LOCATIONS="$MIRROR/dists/$CODENAME/ $MIRROR/dists/$DI_CODENAME/"
    echo "Looking in $LOCATIONS"

    case $ARCH in
        source)
            FILES=`find $LOCATIONS -name Sources.gz`
            echo "Using MD5 sums from Sources files:"
            echo $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|armel|hppa|i386|ia64|m68k|mips|mipsel|powerpc|s390|sparc|kfreebsd-amd64|kfreebsd-i386)
            FILES=`find $LOCATIONS -name Packages.gz | grep binary-$ARCH`
            echo "Using MD5 sums from Packages files:"
            echo $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_CODENAME/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_CODENAME/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
