|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
# In case it hasn't been set, assume we're being run from the root of the local
|
|
|
|
# Kaleidoscope repository.
|
|
|
|
: "${KALEIDOSCOPE_DIR:=$(pwd)}"
|
|
|
|
|
|
|
|
# This variable is a git ref that should point to the current master branch of
|
|
|
|
# the primary Kaleidoscope repository. In most cases, this would be
|
|
|
|
# `origin/master`.
|
|
|
|
: "${KALEIDOSCOPE_MERGE_BASE:=origin/master}"
|
|
|
|
|
|
|
|
# Don't do anything if the working tree has unstaged changes, to avoid
|
|
|
|
# unintentional combining of contentful changes with formatting changes.
|
|
|
|
if ! git diff -z --exit-code --quiet; then
|
|
|
|
echo "Working tree has unstaged changes; aborting."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Run git-diff so we only run IWYU on files that differ from `master`. This
|
|
|
|
# isn't necessarily what we want, but if the current branch has been rebased, it
|
|
|
|
# shouldn't touch any extra files.
|
|
|
|
git diff -z --name-only "${KALEIDOSCOPE_MERGE_BASE}" -- src plugins \
|
|
|
|
| "${KALEIDOSCOPE_DIR}/bin/iwyu.py" -z -v
|
|
|
|
|
|
|
|
# After running it on Kaleidoscope source files, run it on the test simulator,
|
|
|
|
# which requires some additional include dirs.
|
|
|
|
git diff -z --name-only "${KALEIDOSCOPE_MERGE_BASE}" -- testing \
|
|
|
|
| "${KALEIDOSCOPE_DIR}/bin/iwyu.py" \
|
|
|
|
-z -v \
|
|
|
|
-I="${KALEIDOSCOPE_DIR}" \
|
|
|
|
-I="${KALEIDOSCOPE_DIR}/testing/googletest/googlemock/include" \
|
|
|
|
-I="${KALEIDOSCOPE_DIR}/testing/googletest/googletest/include"
|
|
|
|
|
|
|
|
# Always run clang-format after IWYU, because they have different indentation
|
|
|
|
# rules for comments added by IWYU.
|
|
|
|
git diff -z --name-only "${KALEIDOSCOPE_MERGE_BASE}" -- src plugins testing \
|
|
|
|
| "${KALEIDOSCOPE_DIR}/bin/format-code.py" \
|
|
|
|
-z -v \
|
|
|
|
--exclude-dir='testing/googletest' \
|
|
|
|
--exclude-file='generated-testcase.cpp' \
|
|
|
|
--force \
|
|
|
|
--check \
|
|
|
|
--verbose
|