#!/bin/bash
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

# Check that there are no "source" files in the repository that
# contain non-ASCII characters.

set -e

# Suffixes of files that are allowed to contain non-ASCII characters.
# These obviously include non-text files, but we also include .md and
# .html because we've used non-ASCII encoding in quite a few of them
# to make documentation easier to write.
allowed_suffixes=(
    png
    ico
    bin
    der
    vsdx
    elf

    md
    html

    # We don't mandate 7-bit ASCII for Python or C/C++ code. The
    # Google style guide, which we inherit suggests avoiding
    # unnecessary non-ASCII text, but doesn't forbid it entirely.
    py
    c
    cc
    h
    hh
)
suff_re=""
for suff in "${allowed_suffixes[@]}"; do
    suff_re="${suff_re}${suff}\\|"
done
suff_re="\\.\\(${suff_re:0:-2}\\)$"

# Other paths that should be excluded from the check. This includes
# vendored files (that we don't control) and other binary files
# without a suffix or non-source files.
excl_paths=(
    '.*/vendor/.*'
    COMMITTERS
    hw/ip/usbdev/pmod/tusb1106pmod-kicad/fp-info-cache
    site/landing/data/partner_quotes.json
)
excl_re=""
for excl in "${excl_paths[@]}"; do
    excl_re="${excl_re}${excl}\\|"
done
excl_re="^\\(${excl_re:0:-2}\\)$"

TMPFILE="$(mktemp)" || {
    echo >&2 "Failed to create temporary file"
    exit 1
}
trap 'rm -f "$TMPFILE"' EXIT

git ls-files | \
    grep -v "${excl_re}" | \
    grep -v "${suff_re}" | \
    env LC_ALL=C xargs grep -d skip -P '[^\0-\x7f]' >"$TMPFILE" || true
if [ -s "$TMPFILE" ]; then
    echo -n "##vso[task.logissue type=error]"
    echo "One or more files have unexpected non-ASCII text:"
    cat "$TMPFILE"
    exit 1
fi
