#!/bin/sh
#DL_URL=http://your_remove_pkg_host.tld/packages/
# This script is derived from slapt-get FAQ #17 entry
# $Id: metadata_update.sh 71 2008-06-29 01:34:39Z shtrom $

function clean
{
	find . -type d -name 'install' -exec rm -rf {} \; 
	find . -type f -name '.*.meta' -exec rm {} \;
}

function gen_packages_txt
{
	echo '' > PACKAGES.TXT
	find . -type f -name '.*.meta' -exec cat {} \; >> PACKAGES.TXT
}

function gen_md5_checksums
{
	echo '' > CHECKSUMS.md5
	find . -type f -name '*.tgz' -exec md5sum {} \; >> CHECKSUMS.md5
}

function gen_meta
{
	if [ ! -f $1 ]; then
		echo "File not found: $1"
		exit 1;
	fi
	if [ "`echo $1|grep -E '(.*{1,})\-(.*[\.\-].*[\.\-].*).tgz[ ]{0,}$'`" == "" ]; then
		return;
	fi
	
	NAME=$(echo $1|sed -re "s/(.*\/)(.*.tgz)$/\2/")
	METAFILE=.${NAME%tgz}meta
	
	if [ ! -e ${LOCATION}/${METAFILE} -o ${LOCATION}/${NAME} -nt ${LOCATION}/${METAFILE} ]; then 
		LOCATION=$(echo $1|sed -re "s/(.*)\/(.*.tgz)$/\1/")
		SIZE=$( expr `gunzip -l $1 |tail -1|awk '{print $1}'` / 1024 )
		USIZE=$( expr `gunzip -l $1 |tail -1|awk '{print $2}'` / 1024 )
		REQUIRED=$(tar xzOf $1 install/slack-required 2>/dev/null|xargs -r -iZ echo -n "Z,"|sed -e "s/,$//")
		CONFLICTS=$(tar xzOf $1 install/slack-conflicts 2>/dev/null|xargs -r -iZ echo -n "Z,"|sed -e "s/,$//")
		SUGGESTS=$(tar xzOf $1 install/slack-suggests 2>/dev/null|xargs -r )

		echo "PACKAGE NAME:  $NAME" > $LOCATION/$METAFILE
		if [ -n "$DL_URL" ]; then
			echo "PACKAGE MIRROR:  $DL_URL" >> $LOCATION/$METAFILE
		fi
		echo "PACKAGE LOCATION:  $LOCATION" >> $LOCATION/$METAFILE
		echo "PACKAGE SIZE (compressed):  $SIZE K" >> $LOCATION/$METAFILE
		echo "PACKAGE SIZE (uncompressed):  $USIZE K" >> $LOCATION/$METAFILE
		echo "PACKAGE REQUIRED:  $REQUIRED" >> $LOCATION/$METAFILE
		echo "PACKAGE CONFLICTS:  $CONFLICTS" >> $LOCATION/$METAFILE
		echo "PACKAGE SUGGESTS:  $SUGGESTS" >> $LOCATION/$METAFILE
		echo "PACKAGE DESCRIPTION:" >> $LOCATION/$METAFILE
		tar xzf $1 install/slack-desc -O|grep -E '\w+\:'|grep -v '^#' >> $LOCATION/$METAFILE
		echo "" >> $LOCATION/$METAFILE
	fi
}

case "$1" in
	pkg)
	if [ -n "$2" ]; then
		gen_meta $2
	else
		echo "$0 [pkg [file]|all|new|PACKAGESTXT|MD5]"
	fi
	;;
	all)
	for pkg in `find . -type f -name '*.tgz' -print`
	do
		gen_meta $pkg
	done
	$0 PACKAGESTXT
	$0 MD5
	$0 CLEAN
	;;
	new)
	for pkg in `find . -type f -name '*.tgz' -print`
	do
		if [ ! -f ${pkg%tgz}meta ]; then
			gen_meta $pkg
		fi
	done
	;;
	PACKAGESTXT)
	gen_packages_txt
	;;
	MD5)
	gen_md5_checksums
	;;
	CLEAN)
	clean
	;;
	*)
	echo "$0 [pkg [file]|all|new|PACKAGESTXT|MD5|CLEAN]"
	;;
esac
