#!/usr/bin/env bash

set -e

usage() {
    local error="$1"

    cat >&2 <<EOF
Usage:
  $0 BRANCH PULL_REQUEST

Synopsis:
  Useful script for merging a GitHub pull request with a custom merge commit
  message.

  Strips "origin" from branch names in title.

Example:
  $0 origin/philip/jael-fix 1953

  Yields:

  Merge branch 'philip/jael-fix' (#1953)

  * origin/philip/jael-fix:
    jael: process all ships in %full update

  Signed-off-by: Jared Tobin <jared@tlon.io>

Error:
  -> $error
EOF

    exit 1
}

args="$@"

if [[ -z "$args" ]]; then
    usage "No arguments specified."
fi

REV=$1
PR=$2

if [[ -z "$PR" ]]; then
    usage "PULL_REQUEST not specified"
fi

KERNEL_CHANGED=`git diff --name-status $REV -- pkg/arvo/sys`
PILLS_CHANGED=`git diff --name-status $REV -- bin`

echo "Pre-merge checklist:"
echo
echo "Arvo:"
echo "* Is this contribution OTA-updateable on top of the latest release?"
echo "* Does this contribution include updated pills, if applicable?"
echo
echo "General:"
echo "* Does this contribution contain tests for sanity checks, regressions, etc.?"
echo "* Are commit prefixes present and accurate?"
echo "* Have all WIP/FIXME/DONTCOMMIT commits been squashed?"
echo "* Do commits contain long-form descriptions, if applicable?"
echo

if [[ ! -z $KERNEL_CHANGED && -z $PILLS_CHANGED ]]
then
  echo "**WARNING**: kernel has changed, but pills have not"
  echo $KERNEL_CHANGED
  echo
fi

TARGET_MSG=$(echo $REV | sed s_origin/__)
MERGE_MSG="Merge branch '$TARGET_MSG' (#$PR)"

read -p "Proceed with merge? (y/n)" -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]
then
  git merge --no-ff --signoff --log -m "$MERGE_MSG" $REV
fi