#!/bin/sh

set -e

check_git () {
  local line="$(git status | head -n 3 | tail -n 1)"
  if [ "$line" != "nothing to commit, working directory clean" ] ; then
    echo "git status is not up to date:"
    git status
    exit 1
  fi
}


release_dir="$1"
if [ -z "$release_dir" ] ; then
  echo "no release dir specified"
  echo "usage: util/release.sh REALEASE_DIR"
  echo "or: make release"
  exit 1;
fi
no_check="$2" # for testing changes to this script--git won't be up-to-date

ver=$(perl -e 'while(<>) { if (/^captrap \((.*?)\) /) { print "$1"; last }}' \
    < changelog)
if [ -z "$ver" ] ; then
  echo "can't parse current version from changelog"
  exit 1
fi
release_name="captrap-$ver"


[ -z "$no_check" ] && check_git

mkdir -p "$release_dir"

tar="$release_name.tar.bz2"
git archive --prefix="$release_name/" HEAD | \
    bzip2 -9 > "$release_dir/$tar"

extracted="$release_dir/$release_name"
# don't forget the trailing '/'
git checkout-index -a --prefix="$extracted/"

cd "$extracted"

make crontest # this runs 'make validate' too
dpkg-buildpackage -b -uc -us
deb="captrap_${ver}_all.deb"

cd ..

echo
echo "Source archive contents:"
tar tvjf "$tar"
echo
echo "Debian package contents:"
dpkg -c "$deb"
echo
echo "File listing:"
ls -l "$tar" "$deb"

echo
echo "Done building archive and deb file. Check the archive/package contents"
echo "for the correct files and check the file listing for appropriate file"
echo "sizes."

echo "Release files are in '$release_dir'."

exit 0
