#!/bin/sh

# Copyright 1999 Raphaël Hertzog <hertzog@debian.org>
# See the README file for the license

# This script will create the Packages.gz and the Packages.cd files
# First arg = "scan" or "install"
# Second arg = directory of the CD

#set -e

CDPACKAGES=1
DPKG_SCANPACKAGES=$BASEDIR/tools/my-dpkg-scanpackages

if [ "$1"x = "-noPackages.cd"x ] ; then
	shift 1
	CDPACKAGES=0
fi	

BDIR=$TDIR/$CODENAME-$ARCH

PREFIX=`echo $2 | sed "s?$BDIR/CD?$BDIR/?"`

NUM=${PREFIX##$BDIR/}
NUM=`echo $NUM | sed 's/_NONUS//g'`
if [ -n "$NONFREE" -o -n "$EXTRANONFREE" ]; then
  SECTIONS="main contrib non-free"
  SECTIONSNONUS="non-US/main non-US/contrib non-US/non-free"
else
  SECTIONS="main contrib"
  SECTIONSNONUS="non-US/main non-US/contrib"
fi

cd "$2"

if [ "$1" = "install" ]; then

if [ -e "$MIRROR/dists/$CODENAME/Release" ]; then
    # Strip the MD5Sum and SHA1 fields
    # Update some other information as well
    sed -e "s/^Architectures: .*$/Architectures: $ARCH/" \
    $MIRROR/dists/$CODENAME/Release | \
    sed -e "s|^Components: .*$|Components: $SECTIONS|" | \
    perl -ne 'if (/^(MD5Sum|SHA1):/i) { $f=1; next } 
    if ($f) { 
	unless (/^ /) { print; $f=0 }
    } else { print }' > dists/$CODENAME/Release
fi
if [ -n "$NONUS" -a -e "$NONUS/dists/$CODENAME/non-US/Release" ]; then
    # Strip the MD5Sum and SHA1 fields
    # Update some other information as well
    sed -e "/^ /d" -e "s/^Architectures: .*$/Architectures: $ARCH/" \
    $NONUS/dists/$CODENAME/non-US/Release | \
    sed -e "s|^Components: .*$|Components: $SECTIONSNONUS|" | \
    perl -ne 'if (/^(MD5Sum|SHA1):/i) { $f=1; next } 
    if ($f) { 
	unless (/^ /) { print; $f=0 }
    } else { print }' > dists/$CODENAME/non-US/Release
fi

for SECT in $SECTIONS; do
	# Install the release files
	cp $MIRROR/dists/$CODENAME/$SECT/binary-$ARCH/Release \
   		dists/$CODENAME/$SECT/binary-$ARCH/
	if [ -n "$NONUS" -a "$CODENAME" != "slink" ]; then
		cp $NONUS/dists/$CODENAME/non-US/$SECT/binary-$ARCH/Release \
		   dists/$CODENAME/non-US/$SECT/binary-$ARCH/
	fi
	# Install the Packages and Packages.gz files
	grep -v ^X-Medium $PREFIX.Packages-$SECT \
	     >dists/$CODENAME/$SECT/binary-$ARCH/Packages
	grep -v ^X-Medium $PREFIX.Packages-$SECT | gzip --best \
	     >dists/$CODENAME/$SECT/binary-$ARCH/Packages.gz
	if [ -n "$NONUS" -a "$CODENAME" != "slink" ]; then
		grep -v ^X-Medium $PREFIX.Packages-non-US-$SECT \
		     >dists/$CODENAME/non-US/$SECT/binary-$ARCH/Packages
		grep -v ^X-Medium $PREFIX.Packages-non-US-$SECT | gzip --best \
		     >dists/$CODENAME/non-US/$SECT/binary-$ARCH/Packages.gz
	fi
	# Install the Packages.cd and Packages.cd.gz files
	# Each CD know about all prior CDs
	# We use "?.packages" here so that we always use US-safe
	# packages files only - we don't want later (supposedly
	# common) CDs having dependencies on a non-US CD#1...
	if [ $CDPACKAGES -eq 1 ] ; then
		for i in $TDIR/$CODENAME-$ARCH/?.packages; do
			dir=${i%%.packages}
			n=${dir##$TDIR/$CODENAME-$ARCH/}
			if [ $n -le $NUM ]; then
			   cat $dir.Packages-$SECT \
				  >>dists/$CODENAME/$SECT/binary-$ARCH/Packages.cd
			   cat $dir.Packages-$SECT | gzip --best \
				  >>dists/$CODENAME/$SECT/binary-$ARCH/Packages.cd.gz
			   if [ -n "$NONUS" -a "$CODENAME" != "slink" ]; then
				  cat $dir.Packages-non-US-$SECT \
				  >>dists/$CODENAME/non-US/$SECT/binary-$ARCH/Packages.cd
				  cat $dir.Packages-non-US-$SECT | gzip --best \
				  >>dists/$CODENAME/non-US/$SECT/binary-$ARCH/Packages.cd.gz
			   fi
			fi
		done
	fi
done

if [ -n "$NONUS" -a "$CODENAME" = "slink" ]; then
	cp $NONUS/dists/$CODENAME/non-US/binary-$ARCH/Release \
	   dists/$CODENAME/non-US/binary-$ARCH/
	grep -v ^X-Medium $PREFIX.Packages-non-US \
	     >dists/$CODENAME/non-US/binary-$ARCH/Packages
	grep -v ^X-Medium $PREFIX.Packages-non-US | gzip --best \
	     >dists/$CODENAME/non-US/binary-$ARCH/Packages.gz
	for i in $TDIR/$CODENAME-$ARCH/?.packages; do
		dir=${i%%.packages}
		n=${dir##$TDIR/$CODENAME-$ARCH/}
		if [ $n -le $NUM ]; then
		      cat $dir.Packages-non-US \
		          >>dists/$CODENAME/non-US/binary-$ARCH/Packages.cd
		      cat $dir.Packages-non-US | gzip --best \
		          >>dists/$CODENAME/non-US/binary-$ARCH/Packages.cd.gz
		fi
	done
fi

if [ -n "$LOCAL" ]; then
	if [ -e ${LOCALDEBS:-$MIRROR}/dists/$CODENAME/local/binary-$ARCH/Release ]; then
	   cp ${LOCALDEBS:-$MIRROR}/dists/$CODENAME/local/binary-$ARCH/Release \
   		dists/$CODENAME/local/binary-$ARCH/
	fi
	grep -v ^X-Medium $PREFIX.Packages-local \
	     >dists/$CODENAME/local/binary-$ARCH/Packages
	grep -v ^X-Medium $PREFIX.Packages-local | gzip --best \
	     >dists/$CODENAME/local/binary-$ARCH/Packages.gz

	for i in $TDIR/$CODENAME-$ARCH/?.packages; do
		dir=${i%%.packages}
		n=${dir##$TDIR/$CODENAME-$ARCH/}
		if [ $n -le $NUM ]; then
			cat $dir.Packages-local \
			    >>dists/$CODENAME/local/binary-$ARCH/Packages.cd
			cat $dir.Packages-local | gzip --best \
			    >>dists/$CODENAME/local/binary-$ARCH/Packages.cd.gz
		fi
	done
fi


fi

# Creates the temp Packages-$SECT files
if [ "$1" != "scan" ]; then exit 0; fi


if [ ! -e "../overrides" ]; then
    # Create an override file with all sections
    for SECT in $SECTIONS; do
	zcat $MIRROR/indices/override.$CODENAME.$SECT.gz >> ../overrides
	if [ -n "$NONUS" -a "$CODENAME" != "slink" ]; then
	    zcat $NONUS/indices-non-US/override.$CODENAME.$SECT.gz \
	    	 >> ../overrides
	fi
    done
fi

#
# Create a Packages file for all packages on the CD
#
if [ -d pool ]; then
    $DPKG_SCANPACKAGES -m "`cat .disk/info`" -a $ARCH pool ../overrides \
	    > $PREFIX.Packages-BOTH
fi
# We have to scan all possible dists where packages can be
DISTS=""
DISTSNONUS=""
for i in `cd dists; echo *; cd ..`; do
    if [ ! -L "dists/$i" -a -d "dists/$i" ]; then
	if [ -d "dists/$i/main/binary-$ARCH" -o \
	     -d "dists/$i/non-free/binary-$ARCH" -o \
	     -d "dists/$i/contrib/binary-$ARCH" ]; then
	    DISTS="$DISTS $i"
	fi
	if [ -d "dists/$i/non-US/main/binary-$ARCH" -o \
	     -d "dists/$i/non-US/non-free/binary-$ARCH" -o \
	     -d "dists/$i/non-US/contrib/binary-$ARCH" ]; then
	    DISTSNONUS="$DISTSNONUS $i"
	fi
    fi
done
for SECT in $SECTIONS; do
    for DIST in $DISTS; do
	$DPKG_SCANPACKAGES -m "`cat .disk/info`" -a $ARCH dists/$DIST/$SECT/binary-$ARCH \
		../overrides >> $PREFIX.Packages-BOTH
    done
    for DIST in $DISTSNONUS; do
	if [ -n "$NONUS" -a "$CODENAME" != "slink" ]; then
	    $DPKG_SCANPACKAGES -m "`cat .disk/info`" -a $ARCH \
		    dists/$DIST/non-US/$SECT/binary-$ARCH \
		    ../overrides >> $PREFIX.Packages-BOTH
	fi
    done
done
# Separate non-US from the rest
grep-dctrl -FFilename -e '/non-[Uu][Ss]/' $PREFIX.Packages-BOTH \
	> $PREFIX.Packages-ALLNONUS
grep-dctrl -v -FFilename -e '/non-[Uu][Ss]/' $PREFIX.Packages-BOTH \
	> $PREFIX.Packages-ALL

# Split the Packages file by section
for SECT in $SECTIONS; do
    grep-dctrl -FFilename -e "/$SECT/" $PREFIX.Packages-ALL \
    	> $PREFIX.Packages-$SECT
    
    if [ -n "$NONUS" -a "$CODENAME" != "slink" ]; then
	grep-dctrl -FFilename -e "/$SECT/" $PREFIX.Packages-ALLNONUS \
		> $PREFIX.Packages-non-US-$SECT
    fi
done

# Slink special case
if [ -n "$NONUS" -a "$CODENAME" = "slink" ]; then
	$DPKG_SCANPACKAGES -m "`cat .disk/info`" -a $ARCH \
	     dists/$CODENAME/non-US/binary-$ARCH \
	     $NONUS/indices-non-US/override.$CODENAME.gz \
		  	> $PREFIX.Packages-non-US
fi

if [ -n "$LOCAL" ]; then
	$DPKG_SCANPACKAGES -m "`cat .disk/info`" -a $ARCH \
	     dists/$CODENAME/local/binary-$ARCH \
	     /dev/null > $PREFIX.Packages-local

	if [ -d pool/local ]
	then
	    $DPKG_SCANPACKAGES -m "`cat .disk/info`" -a $ARCH \
		 pool/local /dev/null >> $PREFIX.Packages-local
	fi
fi

exit 0
