#!/bin/bash

# Copyright 2020 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

# Checks for tabs in files modified vs the specified reference commit (default
# "main")

set -o pipefail

BASE_REF="${1:-main}"

declare -a excluded_files_patterns=(
  "^\.gitmodules$"
  "/third_party/"
  "^third_party/"
  "*Makefile*"
  "^integrations/tensorflow/iree-dialects$"
)

# Join on |
excluded_files_pattern="$(IFS="|" ; echo "${excluded_files_patterns[*]?}")"

readarray -t files < <(\
  (git diff --name-only --diff-filter=d "${BASE_REF}" || kill $$) \
    | grep -v -E "${excluded_files_pattern?}")

diff="$(grep --with-filename --line-number --perl-regexp --binary-files=without-match '\t' "${files[@]}")"

grep_exit="$?"

if (( "${grep_exit?}" >= 2 )); then
  exit "${grep_exit?}"
fi

if (( "${grep_exit?}" == 0 )); then
  echo "Changed files include tabs. Please use spaces.";
  echo "$diff"
  exit 1;
fi
