summaryrefslogtreecommitdiff
path: root/scripts/prepare-commit.sh
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@mines-paris.org>2017-05-15 12:09:45 +0200
committerGitHub <noreply@github.com>2017-05-15 12:09:45 +0200
commit28d2eabca79d06378843d1e94fecfb4a5e22178d (patch)
tree98b3b26eacd4a4d153f41d4e63cca93edf7fea17 /scripts/prepare-commit.sh
parent0ecac46a1db911cbe340c4467000e91cea82c96d (diff)
parentcde210be392d60fbcd8a3e7cacfa62660a95e8d9 (diff)
Merge pull request #919 from rouault/reformat
Add mechanisms to reformat and check code style, and reformat whole codebase (#128)
Diffstat (limited to 'scripts/prepare-commit.sh')
-rwxr-xr-xscripts/prepare-commit.sh112
1 files changed, 112 insertions, 0 deletions
diff --git a/scripts/prepare-commit.sh b/scripts/prepare-commit.sh
new file mode 100755
index 00000000..63dac65c
--- /dev/null
+++ b/scripts/prepare-commit.sh
@@ -0,0 +1,112 @@
+#!/usr/bin/env bash
+###########################################################################
+# prepare-commit.sh
+# ---------------------
+# Date : August 2008
+# Copyright : (C) 2008 by Juergen E. Fischer
+# Email : jef at norbit dot de
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+TOPLEVEL=$(git rev-parse --show-toplevel)
+
+PATH=$TOPLEVEL/scripts:$PATH
+
+cd $TOPLEVEL
+
+# GNU prefix command for mac os support (gsed, gsplit)
+GP=
+if [[ "$OSTYPE" =~ darwin* ]]; then
+ GP=g
+fi
+
+if ! type -p astyle.sh >/dev/null; then
+ echo astyle.sh not found
+ exit 1
+fi
+
+if ! type -p colordiff >/dev/null; then
+ colordiff()
+ {
+ cat "$@"
+ }
+fi
+
+if [ "$1" = "-c" ]; then
+ echo "Cleaning..."
+ remove_temporary_files.sh
+fi
+
+set -e
+
+# determine changed files
+MODIFIED=$(git status --porcelain| ${GP}sed -ne "s/^ *[MA] *//p" | sort -u)
+#MODIFIED=$(find src -name "*.c")
+
+if [ -z "$MODIFIED" ]; then
+ echo nothing was modified
+ exit 0
+fi
+
+# save original changes
+REV=$(git log -n1 --pretty=%H)
+git diff >sha-$REV.diff
+
+ASTYLEDIFF=astyle.$REV.diff
+>$ASTYLEDIFF
+
+# reformat
+i=0
+N=$(echo $MODIFIED | wc -w)
+for f in $MODIFIED; do
+ (( i++ )) || true
+
+ case "$f" in
+ thirdparty/*)
+ echo $f skipped
+ continue
+ ;;
+
+ *.cpp|*.c|*.h|*.cxx|*.hxx|*.c++|*.h++|*.cc|*.hh|*.C|*.H|*.sip|*.py)
+ ;;
+
+ *)
+ continue
+ ;;
+ esac
+
+ m=$f.$REV.prepare
+
+ cp $f $m
+ ASTYLEPROGRESS=" [$i/$N]" astyle.sh $f
+ if diff -u $m $f >>$ASTYLEDIFF; then
+ # no difference found
+ rm $m
+ fi
+done
+
+if [ -s "$ASTYLEDIFF" ]; then
+ if tty -s; then
+ # review astyle changes
+ colordiff <$ASTYLEDIFF | less -r
+ else
+ echo "Files changed (see $ASTYLEDIFF)"
+ fi
+ exit 1
+else
+ rm $ASTYLEDIFF
+fi
+
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached HEAD --
+
+exit 0
+
+# vim: set ts=8 noexpandtab :