#!/usr/bin/env bash
# Copyright 2021 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

set -o errexit
set -o pipefail

main_ref="origin/HEAD"
if ! git rev-parse "$main_ref" > /dev/null; then
    exit 0
fi

# Ref that we'll use as the "base" when determining which files have been
# changed and should be validated. We use the common ancestor of JIRI_HEAD and
# the current commit to avoid checking files that have been modified by other
# commits on JIRI_HEAD when we're on a branch whose latest merged ancestor
# commit is behind JIRI_HEAD.
base_ref="$(git merge-base "$main_ref" HEAD)"

# Check that files are properly formatted by Black. Ideally we would check the
# git index rather than the current version of the file on disk, but `git show
# HEAD:<file>` is an order of magnitude slower than just reading the current
# version on disk, so it would take a noticeable amount of time with more than
# ~5 changed Python files.
#
# This is only best-effort, so it's OK so skip if Black isn't available via the
# user's $PATH.
if command -v black > /dev/null; then
    black_output_path=$(mktemp)
    changed_files="$(git diff "$base_ref" --diff-filter=d --name-only -- "*.py")"
    if ! echo "$changed_files" | xargs black --check 2> "$black_output_path"; then
        >&2 echo "Files not properly formatted. Run 'black .' and then 'git add'."
        # Only print Black's output in case of failure; it's confusing to show
        # the "all good" output in case of success.
        cat "$black_output_path"
        exit 1
    fi
fi

# Check that recipe DEPS are properly formatted.
cd "$(dirname "${BASH_SOURCE[0]}")/../.."
./scripts/cleanup_deps.py --check
