|
| 1 | +#!/usr/bin/env bash |
| 2 | + |
| 3 | +set -eou pipefail |
| 4 | + |
| 5 | +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) |
| 6 | +pushd "${SCRIPT_DIR}" > /dev/null || exit 1 |
| 7 | +pushd "$(git rev-parse --show-toplevel)" > /dev/null || exit 1 |
| 8 | + |
| 9 | +. tools/.library.sh |
| 10 | + |
| 11 | +if [[ $# -eq 0 ]]; then |
| 12 | + FILES=$(git_files | xargs) |
| 13 | +else |
| 14 | + FILES=$* |
| 15 | +fi |
| 16 | +SHEBANG_FIXED=() |
| 17 | +WHITESPACE_TO_FIX=() |
| 18 | +# default to 5 MB |
| 19 | +FILE_SIZE=${FILE_SIZE:-5000000} |
| 20 | +TOO_BIG=() |
| 21 | +exit_code=0 |
| 22 | + |
| 23 | +for fn in ${FILES}; do |
| 24 | + set +e |
| 25 | + shebang=$(grep -l "^#!/" "${fn}") |
| 26 | + if [[ -n "${shebang}" && ! -x "${fn}" ]]; then |
| 27 | + chmod +x "${fn}" |
| 28 | + SHEBANG_FIXED+=("${fn}") |
| 29 | + exit_code=1 |
| 30 | + fi |
| 31 | + set +e |
| 32 | + # grep exits non-0 when it doesn't find anything |
| 33 | + whitespace=$(grep -l ' +$' "${fn}") |
| 34 | + set -e |
| 35 | + if [[ -n "${whitespace}" ]]; then |
| 36 | + WHITESPACE_TO_FIX+=("${whitespace}") |
| 37 | + exit_code=1 |
| 38 | + fi |
| 39 | + size=$(stat --printf="%s" "${fn}") |
| 40 | + if [[ "${size}" -gt "${FILE_SIZE}" ]]; then |
| 41 | + TOO_BIG+=("${fn}: ${size}") |
| 42 | + exit_code=1 |
| 43 | + fi |
| 44 | +done |
| 45 | + |
| 46 | +if [[ "${#SHEBANG_FIXED[@]}" -gt 0 ]]; then |
| 47 | + echo "Fixed executable bit on:" |
| 48 | + printf '\t%s\n' "${SHEBANG_FIXED[@]}" |
| 49 | +fi |
| 50 | +if [[ "${#WHITESPACE_TO_FIX[@]}" -gt 0 ]]; then |
| 51 | + echo "Should clean whitespace on:" |
| 52 | + printf '\t%s\n' "${WHITESPACE_TO_FIX[@]}" |
| 53 | +fi |
| 54 | + |
| 55 | +if [[ "${#TOO_BIG[@]}" -gt 0 ]]; then |
| 56 | + echo "Files larger than ${FILE_SIZE}:" |
| 57 | + printf '\t%s\n' "${TOO_BIG[@]}" |
| 58 | +fi |
| 59 | + |
| 60 | +popd > /dev/null || exit 1 |
| 61 | +popd > /dev/null || exit 1 |
| 62 | +exit "${exit_code}" |
0 commit comments