#!/usr/bin/env bash

set -e

# We check only our code, that's why we skip contrib
GIT_ROOT=$(git rev-parse --show-cdup)
GIT_ROOT=${GIT_ROOT:-./}
tmp=$(mktemp)

# Find all *.py, *.python files and executable files without extension
# that are determined as python scripts by 'file' util
# in the repo except the contrib directory.
find_cmd=(
  find "$GIT_ROOT" -type f -not -path "${GIT_ROOT}contrib/*"
    \(
      \(
        -name '*.py' -or -name "*.python" -or
          \(
            -executable -not -name "*.*" -exec sh -c 'file {} | grep -q "Python script"' \;
          \)
      \)
      # We skip modules generated by the protocol buffer compiler from *.proto files.
      -and -not -name '*_pb2.py' -and -not -name '*_pb2_grpc.py'
    \)
)

if ! "${find_cmd[@]}" -exec black --check --diff {} + 1>"$tmp" 2>&1; then
  # Show the result only if some files need formatting
  cat "$tmp"
  # Apply formatting
  "${find_cmd[@]}" -exec black {} + 1>/dev/null 2>&1
  # Automatically add changed files to stage
  "${find_cmd[@]}" -exec git add -u {} + 1>/dev/null 2>&1
fi

rm "$tmp"
