#!/bin/sh
#
# Release: Manages the release issues for a debian package
#
# Created November 1, Christoph Lameter <clameter@debian.org>
#
# If there is a parameter then do an announcement

LIB=/usr/lib/devscripts

set -e
# Look for debian/changelog

until [ -f debian/changelog ]; do
        cd ..
        if [ `pwd` = "/" ]; then
		echo "Cannot find debian/changelog anywhere."
		exit 1
	fi
done

# Figure out package info we need
LINE=`head -1 debian/changelog`
PACKAGE=`expr "$LINE" : '\(.*\) (.*)'`
VERSION=`expr "$LINE" : '.*(\(.*\))'`
DISTRIB=`expr "$LINE" : '.* (.*) \(.*\);'`

MAILADDR="debian-devel-changes@lists.debian.org"

for i in $DISTRIB; do
	if grep -q "^$i " /etc/upload.sites ; then
		THIRD_PARTY=1;DEBIAN_RELEASE_DESTINATION=$i;break;
	fi
	if grep -q "$i" $LIB/dist-changes; then
		MAILADDR="debian-changes@lists.debian.org"
	fi
done

#MAILADDR=postmaster@localhost


CHANGES=`cd ..;echo $PACKAGE\_$VERSION\_*.changes`
if [ -r ../$CHANGES ]; then
	FILES=`grep -E "^ [0-9a-f]+ [0-9]+ " ../$CHANGES|awk '{ printf "%s ",$5x; }'`
	ARCHIT=`grep -E "^Architecture: " ../$CHANGES|sed -e 's/Architecture: //'`
else
	echo "Cannot find .changes file for this release"
	exit 1
fi

# Check if dupload is to be used
if [ -x /usr/bin/dupload -a "$THIRD_PARTY" = "" ]; then
	if ! dupload ../$CHANGES $*; then
		exit 1
	fi
else

	if [ "$DEBIAN_RELEASE_DESTINATION" = "" ]; then
		DEBIAN_RELEASE_DESTINATION="master"
	fi

	if grep -q "^$1 " /etc/upload.sites; then
		DEBIAN_RELEASE_DESTINATION=$1
		shift
	fi

	X="`grep "^$DEBIAN_RELEASE_DESTINATION " /etc/upload.sites`"
	if [ "$X" = "" ]; then
		echo "Upload site $X unknown"
		exit 1
	fi

	DEST_HOST=`expr "$X" : ".* \(.*\) .* .*"`
	LOC=`expr "$X" : ".* .* \(.*\) .*"`
	METHOD=`expr "$X" : ".* .* .* \(.*\)"`

#	echo "$DEST_HOST $LOC $METHOD"

	if [ "$METHOD" = "aftp" ]; then
		echo "-- Upload to $DEST_HOST via anonymous ftp of $FILES ..."
		ftp -n $DEST_HOST >/dev/null <<EOF
user anonymous release
cd $LOC
binary
prompt
lcd ..
`for i in $FILES; do echo "put $i";done`
put $CHANGES
EOF
#		if cmp -s ../$CHANGES ../u.$CHANGES;	then
#			rm ../u.$CHANGES
			echo "-- Upload to $DEST_HOST complete"
#		else
#			rm ../u.$CHANGES || 
#			echo "** Upload failed"
#			exit 0
#		fi
	else
# SCP Upload procedure
		if [ ! -x /usr/bin/scp ]; then
			echo "Secure Shell package not installed."
			exit 1
		fi

		if [ "$1" = "silent" ]; then
			SILENT=1
			shift
		fi

		if [ "$1" = "announce" ]; then
			NEW=1
			shift
		fi

		echo "-- Copying Package $PACKAGE Release $VERSION to $DEST_HOST"
		(cd ..;scp -B $FILES $DEST_HOST:$LOC 2>&1) |grep -v "^Warning:" >/tmp/$$ || echo
		if [ -s /tmp/$$ ]; then
			cat /tmp/$$
			rm /tmp/$$
			echo "Error transferring files. Aborting"
			exit 1;
		fi

		# Send Changes File
		scp -B ../$CHANGES $DEST_HOST:$LOC
		if [ "$SILENT" = "" ]; then
			echo "-- Announcing the package on $MAILADDR"
			if [ "$NEW" ]; then
				mail $MAILADDR -s"New Package: $PACKAGE $VERSION ($ARCHIT)" <debian/tmp/DEBIAN/control
			else
				mail $MAILADDR -s"$PACKAGE $VERSION ($ARCHIT) uploaded to $DEST_HOST" <../$CHANGES
			fi
		fi
	fi
fi

echo "-- Generating marker debian/RELEASED"
touch debian/RELEASED
echo "-- Package successfully released"
if [ "$THIRD_PARTY" ]; then
	exit 0
fi

if grep -Eq "#[0-9]{4,5}" ../$CHANGES ; then
	BUGS=`perl <../$CHANGES -ne 'while (/#(\d\d\d\d+)/g) { print "$1 "; } '`
	if [ "$BUGS" ]; then
		if [ "$AUTOCLEAR_BUGS" ]; then
			ANS="Y"
		else
			echo -n "Mark Bug# ` echo \"$BUGS\"|tr \" \" \",\"` mentioned in $CHANGES, as done? Y/n"
			read ANS
		fi
		if [ "$ANS" = "Y" -o "$ANS" = "y" -o "$ANS" = "" ]; then
			for i in $BUGS; do
				mail $i-done@bugs.debian.org -s"Fixed in Version $VERSION" <../$CHANGES
			done
			echo -e "-- $BUGS marked as done."
		else
			echo "Warning: Bugs not cleared".
		fi
	else
		echo "-- No bugs mentioned in $CHANGES"
	fi
fi
