From efc1963a7bc6a3c2a80fb26a6645f7c8e1ed1cad Mon Sep 17 00:00:00 2001 From: Roy Keene Date: Thu, 15 Nov 2018 10:28:10 -0600 Subject: [PATCH] Ensure ".clang-format" works with current clang-format tool (#1378) --- .clang-format => .clang-format.base | 0 .gitignore | 3 +++ ci/check-commit-format.sh | 4 +++ ci/clang-format-all.sh | 6 ++++- ci/update-clang-format | 39 +++++++++++++++++++++++++++++ util/makesrc | 2 +- 6 files changed, 52 insertions(+), 2 deletions(-) rename .clang-format => .clang-format.base (100%) create mode 100755 ci/update-clang-format diff --git a/.clang-format b/.clang-format.base similarity index 100% rename from .clang-format rename to .clang-format.base diff --git a/.gitignore b/.gitignore index 57336fae..86b9cc9f 100644 --- a/.gitignore +++ b/.gitignore @@ -72,3 +72,6 @@ Testing # Autogenerated Build Prep artifacts util/build_prep/*/prep.sh + +# Autogenerated Tooling +.clang-format diff --git a/ci/check-commit-format.sh b/ci/check-commit-format.sh index 8b1a4247..505f3ef8 100755 --- a/ci/check-commit-format.sh +++ b/ci/check-commit-format.sh @@ -1,5 +1,9 @@ #!/usr/bin/env bash + REPO_ROOT=$(git rev-parse --show-toplevel) + +"${REPO_ROOT}/ci/update-clang-format" + RESULT=`python $REPO_ROOT/ci/git-clang-format.py --diff -f --commit HEAD~1 --extensions "h,hpp,cpp"` if [ "$RESULT" != "no modified files to format" ] && [ "$RESULT" != "clang-format did not modify any files" ]; then python $REPO_ROOT/ci/git-clang-format.py --diff -f --commit HEAD~1 diff --git a/ci/clang-format-all.sh b/ci/clang-format-all.sh index eb32a84f..635681a4 100755 --- a/ci/clang-format-all.sh +++ b/ci/clang-format-all.sh @@ -1,4 +1,8 @@ #!/bin/bash +set -e + REPO_ROOT=$(git rev-parse --show-toplevel) -find ${REPO_ROOT}/rai -iname '*.h' -o -iname '*.hpp' -o -iname '*.cpp' | xargs clang-format -i +cd "${REPO_ROOT}" +./ci/update-clang-format +find rai -iname '*.h' -o -iname '*.hpp' -o -iname '*.cpp' | xargs clang-format -i diff --git a/ci/update-clang-format b/ci/update-clang-format new file mode 100755 index 00000000..b4d3350b --- /dev/null +++ b/ci/update-clang-format @@ -0,0 +1,39 @@ +#! /usr/bin/env bash + +ci_dir="$(dirname "${BASH_SOURCE[0]}")" + +set -e + +cd "${ci_dir}/.." + +retval='1' + +rm -f .clang-format +cp .clang-format.base .clang-format +for try in {1..10}; do + errors="$(clang-format -dump-config 2>&1 >/dev/null)" || : + if [ -z "${errors}" ]; then + retval='0' + + break + fi + + errors_line="$(echo "${errors}" | awk ' + /^YAML:/{ + sub(/^YAML:/, ""); + sub(/:.*/, ""); + print; + exit; + } + ')" + + if ! [ "${errors_line}" -gt -1 ] 2>/dev/null; then + break + fi + + rm -f .clang-format.new + sed "${errors_line} d" .clang-format > .clang-format.new + mv .clang-format.new .clang-format +done + +exit "${retval}" diff --git a/util/makesrc b/util/makesrc index 07f27f39..25590eed 100755 --- a/util/makesrc +++ b/util/makesrc @@ -28,7 +28,7 @@ function make_source () { fi # XXX:TODO: Update spec file with version information source_information - rm -fr .git* .clang-format .travis.yml appveyor.yml asan_blacklist ci docker util + rm -fr .git* .clang-format* .travis.yml appveyor.yml asan_blacklist ci docker util find . -type f ! -print 2>/dev/null | egrep -v '^\./(MD5SUMS|SHA256SUMS)$' | sort -u | sed s/'^\.\/'/''/ | sed 's/ /\\ /g' | xargs openssl md5 | sed 's@MD5(\(.*\))= \([0-9a-f]*\)@\2 \1@' > MD5SUMS 2>/dev/null find . -type f ! -print 2>/dev/null | egrep -v '^\./(SHA256SUMS)$' | sort -u | sed s/'^\.\/'/''/ | sed 's/ /\\ /g' | xargs openssl sha1 -sha256 | sed 's@SHA256(\(.*\))= \([0-9a-f]*\)@\2 \1@' > SHA256SUMS 2>/dev/null tarball_creation