#!/bin/bash

# git-merge-in -- atomically fast-forward-merge a branch.
#
# The branch must be fast-forward-able.

usage() {
    cat >&2 <<EOF
Usage: $(basename "$0") branch
  -h, --help    Show this help

Atomically merge ‹branch› to here.

The merge must be fast-forward.
EOF
    exit 2
}

TEMP="$(getopt -o 'h' --long help \
        -n "$(basename "$0")" -- "$@")" || usage
eval set -- "$TEMP"
unset TEMP

ARGS=()
while true; do
    case "$1" in
        -h|--help)   usage ;;
        --)
            shift
            ARGS=("$@")
            break ;;
        *) echo "$(basename "$0"): internal error: $1" >&2; exit 2 ;;
    esac
done

LOCK=.git/merge-in.lock
if ! shlock -p $$ -f ${LOCK} ; then
    echo Locked by `cat ${LOCK}`
    exit 1
fi
trap 'rm -f ${LOCK}' 0 1 2 3 15

set -e
git merge --ff-only $1
echo "Branch '$1' merged."
