#!/bin/bash

# Copyright 2021 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 buildifier formatting and lint in files modified vs the specified
# reference commit (default "main")
# See https://github.com/bazelbuild/buildtools/tree/master/buildifier

set -o pipefail

BASE_REF="${1:-main}"

declare -a included_files_patterns=(
  "/BUILD$"
  "\.bazel$"
  "/WORKSPACE$"
  "\.bzl$"
)

declare -a excluded_files_patterns=(
  "/third_party/"
  "^third_party/"
)

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

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

if (( ${#files[@]} == 0 )); then
  echo "No Bazel files changed"
  exit 0
fi

echo "Fixing formatting with Buildifier"
buildifier "${files[@]}"

echo "Fixing automatically fixable lint with Buildifier"
buildifier -lint=fix "${files[@]}"

echo "Checking complicated lint with Buildifier"
# Sometimes people don't write docstrings and I am not going to make that
# blocking.
buildifier -lint=warn -warnings=-module-docstring,-function-docstring "${files[@]}"
