X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=tools%2Fformat-cpp;h=56064ce0c1f7c4acca5329db90a0caf917999d81;hp=48703c29bbd643fb55dedd0589ee4c1c33bcc8f5;hb=5ce9818ba4e76858b2ef12c81ba75c1306f195d3;hpb=b61d54652477503ef2b058fd8304e6c16cd5cef8 diff --git a/tools/format-cpp b/tools/format-cpp index 48703c29..56064ce0 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=14 + +# 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"