#!/bin/sh
#
# Copyright (C) 2012 Karel Zak <kzak@redhat.com> 
#
# Usage:  ko-release-push [<directory> [<version>]]
#
# This script pushs files from <directory>/v<version> to kernel.org. The
# default <directory> is "kernel.org" and the default <version> is the current
# package version.
#
# The <directory>/v<version> files should be generated by ko-release-gen script.
#

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=${2:-$(cat .version)}
VERSION_MAJOR=$(echo $VERSION | sed 's/-rc[0-9]//; s/\(.*\..*\)\..*/\1/')
BASEDIR=${1:-"kernel.org"}
DISTDIR="${BASEDIR}/v${VERSION_MAJOR}"

KO_DIR="/pub/linux/utils/util-linux/v${VERSION_MAJOR}"

die() {
	echo $1
	exit 1
}

function push_file {
	local sig="$1"

	case "$sig" in
	*.tar.sign)
		fl=${sig%%.sign}
		if   [ -f ${fl}.xz ];  then fl=${fl}.xz
		elif [ -f ${fl}.gz ];  then fl=${fl}.gz
		elif [ -f ${fl}.bz2 ]; then fl=${fl}.bz2
		else die "cannot found original file for $sig"
		fi
		;;
	*)
		fl=$(echo "$sig" | sed 's/\.sign//')
		;;
	esac

	echo -n " PUSH $fl ..."
	kup put $fl $sig ${KO_DIR}/${fl##${DISTDIR}/}
	echo " OK "
}

[ -d "$DISTDIR" ] || die "$DISTDIR: Not such directory"

FILES=$(find $DISTDIR -name "*.sign" | sort)
DIRS=$(for f in $FILES; do echo $(dirname ${KO_DIR}/${f##${DISTDIR}/}); done | sort -u)

for d in $DIRS; do
	echo -n " MKDIR $d ..."
	kup mkdir $d
	echo " OK "
done

for f in $FILES; do
	push_file $f
done

