#!/bin/sh
set -e
cd "$(dirname "$0")/.."
update="$1"
current_ver=$(./project_version get)
./project_version set "$update"
next_ver=$(./project_version get)
echo "$current_ver -> $next_ver"
changelog_dir=_CHANGELOGS
changelog_ext=md
if [ -n "$(find "$changelog_dir" -type f -name "*.$changelog_ext" 2>/dev/null)" ]; then
  if [ -f CHANGELOG.md ]; then
    pos=$(sed -rn '/^## /{=;q}' CHANGELOG.md)
  else
    cat > CHANGELOG.md <<EOF
# Changelog
All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

EOF
    git add CHANGELOG.md
    pos=
  fi
  [ -n "$pos" ] || pos=$(($(wc -l < CHANGELOG.md) + 1))
  newchlog=$(mktemp)
  (
    head -n$((pos - 1)) CHANGELOG.md
    echo "## $next_ver"
    for category in Fixed Changed Added Removed; do
      logs=$(find "$changelog_dir/$category" -type f -name "*.$changelog_ext" 2>/dev/null|sort)
      if [ -n "$logs" ]; then
        echo "### $category"
        for log in $logs; do
          cat "$log"
          tail -c1 "$log" | grep -q '^$' || echo "" # add newline
          git rm "$log" >/dev/null 2>&1
        done
      fi
    done
    echo ""
    tail "-n+$pos" CHANGELOG.md
  ) > "$newchlog"
  mv "$newchlog" CHANGELOG.md
elif [ -f CHANGELOG.md ]; then
  sed -ri "s/^## Next\$/## $next_ver/" CHANGELOG.md
fi
git add -u
git commit -m "version $next_ver"
git tag -a -f -m "version $next_ver" "v$next_ver"
