X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=tools%2Fformat-cpp;h=370baef9553dabf2aefce9d08e5bd89cc56d4d87;hb=9021ae77076ea1805eb09d0d93f8d1a4081b633c;hp=48703c29bbd643fb55dedd0589ee4c1c33bcc8f5;hpb=ff7ea753d4069f125953d690df066c5b8c83e4c2;p=babeltrace.git diff --git a/tools/format-cpp b/tools/format-cpp index 48703c29..370baef9 100755 --- a/tools/format-cpp +++ b/tools/format-cpp @@ -2,11 +2,56 @@ # # SPDX-License-Identifier: GPL-2.0-only # -# Copyright (C) 2020 Philippe Proulx - -FORMATTER="${FORMATTER:-clang-format -i}" -root_dir="$(dirname "${BASH_SOURCE[0]}")/.." -find "$root_dir" \( -name '*.cpp' -o -name '*.hpp' \) \ - ! -wholename '*/cpp-common/optional.hpp' \ - ! -wholename '*/cpp-common/string_view.hpp' \ - -exec $FORMATTER '{}' ';' +# Copyright (C) 2020-2022 Philippe Proulx + +expected_formatter_major_version=13 + +# Runs the formatter, making sure it's the expected version. +format_cpp() { + local formatter=$1 + local version + + version=$($formatter --version) + + # shellcheck disable=SC2181 + if (($? != 0)); then + echo "Cannot execute \`$formatter --version\`." >&2 + return 1 + fi + + if [[ "$version" != *"clang-format version $expected_formatter_major_version"* ]]; then + echo "Expecting clang-format $expected_formatter_major_version." >&2 + echo >&2 + echo Got: >&2 + echo >&2 + echo "$version" >&2 + return 1 + fi + + local root_dir + + root_dir="$(dirname "${BASH_SOURCE[0]}")/.." + + # Using xargs to fail as soon as the formatter fails (`-exec` + # won't stop if its subprocess fails). + # + # shellcheck disable=SC2086 + find "$root_dir" \( -name '*.cpp' -o -name '*.hpp' \) \ + ! -wholename '*/cpp-common/optional.hpp' \ + ! -wholename '*/cpp-common/string_view.hpp' \ + -print0 | xargs -n1 -0 $formatter +} + +if [[ -n "$FORMATTER" ]]; then + # Try using environment-provided formatter + formatter=$FORMATTER +elif command -v clang-format-$expected_formatter_major_version &> /dev/null; then + # Try using the expected version of clang-format + formatter="clang-format-$expected_formatter_major_version -i" +else + # Try using `clang-format` as is + formatter='clang-format -i' +fi + +# Try to format files +format_cpp "$formatter"