| #!/bin/bash | 
 |  | 
 | # This script reformats source files using the clang-format utility. | 
 | # | 
 | # Files are changed in-place, so make sure you don't have anything open in an | 
 | # editor, and you may want to commit before formatting in case of awryness. | 
 | # | 
 | # This must be run on a clean repository to succeed | 
 | # | 
 | # Input parmameter must be full path to git repo to scan | 
 |  | 
 | DIR=$1 | 
 | cd ${DIR} | 
 |  | 
 | set -e | 
 |  | 
 | echo "Formatting code under $DIR/" | 
 |  | 
 | if [[ -f "setup.cfg" ]]; then | 
 |   pycodestyle --show-source . | 
 |   rc=$? | 
 |   if [[ ${rc} -ne 0 ]]; then | 
 |     exit ${rc} | 
 |   fi | 
 | fi | 
 |  | 
 | # Allow called scripts to know which clang format we are using | 
 | export CLANG_FORMAT="clang-format-6.0" | 
 | IGNORE_FILE=".clang-ignore" | 
 | declare -a IGNORE_LIST | 
 |  | 
 | if [[ -f "${IGNORE_FILE}" ]]; then | 
 |   readarray -t IGNORE_LIST < "${IGNORE_FILE}" | 
 | fi | 
 |  | 
 | ignorepaths="" | 
 | ignorefiles="" | 
 |  | 
 | for path in "${IGNORE_LIST[@]}"; do | 
 |   # Check for comment, line starting with space, or zero-length string. | 
 |   # Checking for [[:space:]] checks all options. | 
 |   if [[ -z "${path}" ]] || [[ "${path}" =~ ^(#|[[:space:]]).*$ ]]; then | 
 |     continue | 
 |   fi | 
 |  | 
 |   # All paths must start with ./ for find's path prune expectation. | 
 |   if [[ "${path}" =~ ^\.\/.+$ ]]; then | 
 |     ignorepaths+=" -o -path ${path} -prune" | 
 |   else | 
 |     ignorefiles+=" -not -name ${path}" | 
 |   fi | 
 | done | 
 |  | 
 | if [[ -f ".clang-format" ]]; then | 
 |   find . \( -regextype sed -regex ".*\.[hc]\(pp\)\?" ${ignorepaths} \) \ | 
 |     -not -name "*mako*" ${ignorefiles} -not -type d -print0 |\ | 
 |     xargs -0 "${CLANG_FORMAT}" -i | 
 |   git --no-pager diff --exit-code | 
 | fi | 
 |  | 
 | # Sometimes your situation is terrible enough that you need the flexibility. | 
 | # For example, phosphor-mboxd. | 
 | if [[ -f "format-code.sh" ]]; then | 
 |   ./format-code.sh | 
 |   git --no-pager diff --exit-code | 
 | fi |