#!/usr/bin/env bash
# Refuse to push refs/heads/<b> unless this machine holds refs/wip/lease/<b>
# (or there is no lease). Install: cp hooks/pre-push .git/hooks/ && chmod +x
ME="${MACHINE_ID:-$(git config --get wip.machine)}"
remote="$1"
while read -r lref lsha rref rsha; do
  case "$rref" in refs/heads/*) b="${rref#refs/heads/}";; *) continue;; esac
  l="$(git ls-remote "$remote" "refs/wip/lease/$b" | cut -f1)"
  [ -n "$l" ] || continue
  git fetch -q "$remote" "+refs/wip/lease/$b:refs/wip-remote/lease/$b"
  owner="$(git log -1 --format=%B "refs/wip-remote/lease/$b" | sed -n 's/^owner=//p')"
  if [ "$owner" != "$ME" ]; then
    echo "pre-push: $b was handed off to $owner; $ME may not push it. (wip-takeover on $ME first, or ask $owner to hand it back)" >&2
    exit 1
  fi
done
exit 0
