#!/usr/bin/env bash
# changelog — orchestrator for the bin/changelog-* family.
#
# Subcommands:
#   add [--force] <slug> [body...]  add an unreleased fragment
#   cut <version>                   cut fragments into CHANGELOG/<version>.md
#   render                          regenerate CHANGELOG.md
#   new-version <version>           cut + render
set -euo pipefail

self_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

usage() {
  cat <<EOF
usage: changelog <command> [args...]

Commands:
  add [--force] <slug> [body...]   add an unreleased fragment
  cut <version>                    cut unreleased fragments into a version file
  render                           regenerate CHANGELOG.md
  new-version <version>            cut + render

See CHANGELOG/README.txt and docs/proposals/changelog-handling.md.
EOF
}

cmd="${1:-}"
[[ $# -gt 0 ]] && shift

case "$cmd" in
  add)
    exec "$self_dir/changelog-add" "$@"
    ;;
  cut)
    exec "$self_dir/changelog-cut" "$@"
    ;;
  render)
    exec "$self_dir/changelog-render"
    ;;
  new-version)
    if [[ $# -eq 0 ]]; then
      echo "usage: changelog new-version <version>" >&2
      exit 2
    fi
    "$self_dir/changelog-cut" "$1"
    "$self_dir/changelog-render"
    ;;
  -h|--help|help)
    usage
    ;;
  "")
    usage >&2
    exit 2
    ;;
  *)
    echo "unknown command: $cmd" >&2
    usage >&2
    exit 2
    ;;
esac
