#!/bin/sh
#
# Called by git-commit with no arguments.  This checks to make sure that all
# .jl files are indented correctly before a commit is made.
#
# To enable this hook, make this file executable and place it in
# $GIT_DIR/hooks.

JFDIR=$HOME/.local/share/nvim/site/pack/packer/start/JuliaFormatter.vim
JLFILES=$(git diff --name-only --diff-filter=AM HEAD | grep '.*\.jl$')

export GIT_DIR="${GIT_DIR-$(git rev-parse --git-common-dir)}"

for JLFILE in $JLFILES;
do
  MKTEMPLATE=$(basename "$JLFILE").XXXXXXXX.jl
  TEMPFILE=$(mktemp -t "$MKTEMPLATE") || exit 1
  TEMPFILE_FORMATTED=$(mktemp -t "$MKTEMPLATE") || exit 1
  git show :"$JLFILE" > "$TEMPFILE"
  git show :"$JLFILE" > "$TEMPFILE_FORMATTED"
  julia -J"$JFDIR"/scripts/juliaformatter.so --startup-file=no --color=no --project="$JFDIR" -e "using JuliaFormatter; format(\"$TEMPFILE_FORMATTED\")"
  if diff --color -u "$TEMPFILE" "$TEMPFILE_FORMATTED"
  then
    rm -f "$TEMPFILE" "$TEMPFILE_FORMATTED"
  else
    rm -f "$TEMPFILE" "$TEMPFILE_FORMATTED"
    NEEDS_FORMAT=1
    echo >&2 "$JLFILE needs to be indented with:"
    echo >&2 "   julia -J\"$JFDIR\"/scripts/juliaformatter.so --startup-file=no --color=no --project=\"$JFDIR\" -e \"using JuliaFormatter; format(\\\"$GIT_DIR/../$JLFILE\\\")\""
  fi
done
if [ -z "$NEEDS_FORMAT" ]
then
  exit 0
else
  exit 1
fi
