blob: 3c23230e0a936291dee3f5cde8ef60164a76f632 [file] [log] [blame]
#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
SCRIPT_PATH=$(dirname $0)
CONFIG="$SCRIPT_PATH/uncrustify.cfg"
function Usage() {
echo "Formats code using uncrustify."
echo "Usage: bin/uncrustify.sh --changed # Runs on changed (staged or not) files"
echo " bin/uncrustify.sh --staged # Runs on staged files"
echo " bin/uncrustify.sh --all # Runs on all source files under the current directory"
echo " bin/uncrustify.sh --check-file file # Returns 1 if the given file requires changes, 0 otherwise."
echo " bin/uncrustify.sh files # Runs on the given files"
exit 1
}
function VerifyEnv() {
if ! which uncrustify > /dev/null; then
echo "uncrustify binary not found. Please ensure that it is in your PATH."
echo "Install via homebrew using: brew install uncrustify"
exit 1
fi
}
function FilterFileList() {
#-name "*.[hm]" | grep -v "JSONKit"
#| grep "\.h\|\.m"
for f in "$@"; do
# Filter out deleted files.
[[ ! -e "$f" ]] && continue
# Filter out non .h & .m files.
[[ "$f" != *.[hm] ]] && continue
# Filter out Third-party sources.
[[ "$f" == *JSONKit* ]] && continue
echo $f
done
}
function FilterAndRun() {
files=$(FilterFileList "$@")
if [[ -z "$files" ]]; then
echo No files to uncrustify.
exit 2
else
echo "$files" | xargs uncrustify -l OC --no-backup -c "$CONFIG"
fi
}
if [[ "$1" = "--changed" ]]; then
VerifyEnv
files=$(git status --porcelain | sed s:...::)
FilterAndRun $files
elif [[ "$1" = "--staged" ]]; then
VerifyEnv
files=$(git diff --cached --name-only)
FilterAndRun $files
elif [[ "$1" = "--all" ]]; then
VerifyEnv
files=$(find .)
FilterAndRun $files
elif [[ "$1" = "--check-file" ]]; then
uncrustify -q -l OC -c "$CONFIG" -f "$2" | cmp --quiet - "$2"
elif [[ "$1" = "--filter" ]]; then
FilterFileList "$@"
elif [[ "$1" = -* ]]; then
Usage
else
VerifyEnv
FilterAndRun "$@"
fi