| #!/usr/bin/env bash | 
 |  | 
 | # Format all source files in the project. | 
 | # | 
 | # Set CLANG_FORMAT_CMD environment variable to specify executable used (default: `clang-format`). | 
 |  | 
 | set -e | 
 |  | 
 | ################################################################################ | 
 | # Configuration | 
 |  | 
 | # folders to search | 
 | FOLDERS=" | 
 |     include | 
 |     internal | 
 |     examples | 
 | " | 
 |  | 
 | # paths to ignore | 
 | EXCLUDE_PATHS=" | 
 |     internal/ceres/gtest/* | 
 |     internal/ceres/gmock/* | 
 |     internal/ceres/gmock_gtest_all.cc | 
 |     internal/ceres/gmock_main.cc | 
 |     internal/ceres/generated/* | 
 |     internal/ceres/generated_bundle_adjustment_tests/* | 
 |     internal/ceres/schur_eliminator.cc | 
 |     internal/ceres/partitioned_matrix_view.cc | 
 |     internal/ceres/schur_templates.cc | 
 | " | 
 |  | 
 | ################################################################################ | 
 | # Implementation | 
 |  | 
 | # directory of this script and the repository root | 
 | SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" | 
 | REPO_DIR="$SCRIPT_DIR/.." | 
 |  | 
 | # set default for CLANG_FORMAT_CMD | 
 | CLANG_FORMAT_CMD=${CLANG_FORMAT_CMD:-clang-format} | 
 | echo "Formatting with $CLANG_FORMAT_CMD (`$CLANG_FORMAT_CMD --version`)" | 
 |  | 
 | # prepare arguments to exclude ignored paths | 
 | EXCLUDE_ARGS="" | 
 | for p in $EXCLUDE_PATHS; do | 
 |     EXCLUDE_ARGS="-not -path */$p $EXCLUDE_ARGS" | 
 | done | 
 |  | 
 | # for each folder, format header and source dirs | 
 | for d in $FOLDERS; do | 
 |     d="$REPO_DIR/$d" | 
 |     find "$d" \( -name "*.h" -or -name "*.cc" \) $EXCLUDE_ARGS | xargs $CLANG_FORMAT_CMD -verbose -i | 
 | done |