#!/usr/bin/env bash set -e # We check only our code, that's why we skip contrib GIT_ROOT=$(git rev-parse --show-cdup) GIT_ROOT=${GIT_ROOT:-./} tmp=$(mktemp) # Find all *.py, *.python files and executable files without extension # that are determined as python scripts by 'file' util # in the repo except the contrib directory. find_cmd=( find "$GIT_ROOT" -type f -not -path "${GIT_ROOT}contrib/*" \( \( -name '*.py' -or -name "*.python" -or \( -executable -not -name "*.*" -exec sh -c 'file {} | grep -q "Python script"' \; \) \) # We skip modules generated by the protocol buffer compiler from *.proto files. -and -not -name '*_pb2.py' -and -not -name '*_pb2_grpc.py' \) ) if ! "${find_cmd[@]}" -exec black --check --diff {} + 1>"$tmp" 2>&1; then # Show the result only if some files need formatting cat "$tmp" # Apply formatting "${find_cmd[@]}" -exec black {} + 1>/dev/null 2>&1 # Automatically add changed files to stage "${find_cmd[@]}" -exec git add -u {} + 1>/dev/null 2>&1 fi rm "$tmp"