#!/bin/sh
#
# Copyright (C) 2012 Karel Zak <kzak@redhat.com>
#
# Usage: ko-release-gen [<directory>]
#
# This script prepares a new release for publishing on kernel.org. The
# hierarchy of release files is created in the <directory> (default directory
# is "kernel.org"). Use case:
#
#  make distcheck
#  make changelog
#  tools/ko-release-gen
#  tools/ko-release-push
#

cd "$(git rev-parse --show-toplevel)" || {
  echo "error: failed to chdir to git root"
  exit 1
}

[ -f ".version" ] || \
	echo "error: cannot found version file (call make distcheck)"

VERSION=$(cat .version)
VERSION_MAJOR=$(echo $VERSION | sed 's/-rc[0-9]//; s/\(.*\..*\)\..*/\1/')
VERSION_DOCS=$(echo $VERSION | sed 's/-rc[0-9]//')
DISTDIR=${1:-"kernel.org"}/v${VERSION_MAJOR}

GPG_PROG=${GPG_PROG:-"gpg"}
GPG_CMD="$GPG_PROG --use-agent --armor --detach-sign --quiet"

die() {
	echo $1
	exit 1
}

add_file() {
	local src="$1"
	local name=$(basename $1)
	local subdir=$DISTDIR/${2:-""}

	mkdir -p $subdir
	cp $src $subdir || die "$src: copy failed"

	[ -f $subdir/$name ] || die "$name not found"
	echo -n " $subdir/$name ..."

	case "$name" in
	*.tar.xz)
		local sig=$(echo "$name" | sed 's/\.tar\.xz/.tar.sign/')
		xz -d -c $subdir/$name | $GPG_CMD --output $subdir/$sig
		;;
	*.tar.gz)
		local sig=$(echo "$name" | sed 's/\.tar\.gz/.tar.sign/')
		gzip -d -c $subdir/$name | $GPG_CMD --output $subdir/$sig
		;;
	*.tar.bz2)
		local sig=$(echo "$name" | sed 's/\.tar\.bz2/.tar.sign/')
		bzip2 -d -c $subdir/$name | $GPG_CMD --output $subdir/$sig
		;;
	*)
		local sig="${name}.sign"
		cat $subdir/$name | $GPG_CMD --output $subdir/$sig
		;;
	esac
	echo " OK "
}

add_html_dir() {
	local src="$1"		# source dir
	local tgt="$2"		# target dir
	
	for fl in $(ls $src/*.html $src/*.css $src/*.png); do
		add_file $fl $tgt
	done
}

rm -rf $DISTDIR

eval $(gpg-agent --daemon)

add_file	util-linux-${VERSION}.tar.xz
add_file	v${VERSION}-ChangeLog
add_file	Documentation/releases/v${VERSION_DOCS}-ReleaseNotes
add_html_dir	libmount/docs/html libmount-docs
add_html_dir	libblkid/docs/html libblkid-docs
add_html_dir	libsmartcols/docs/html libsmartcols-docs
add_html_dir	libfdisk/docs/html libfdisk-docs

killall gpg-agent

