Strip trailing white-space as a pre-commit hook
This commit is contained in:
parent
fb14b7ae5f
commit
db02acfccf
1 changed files with 59 additions and 0 deletions
59
scripts/git-prehook-whitespace.sh
Executable file
59
scripts/git-prehook-whitespace.sh
Executable file
|
@ -0,0 +1,59 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# A git hook script to find and fix trailing whitespace
|
||||
# in your commits. Bypass it with the --no-verify option
|
||||
# to git-commit
|
||||
#
|
||||
# Copyright Oldman <imoldman.com@gmail.com> and contributors:
|
||||
# https://github.com/imoldman/config
|
||||
#
|
||||
# Add this to a project's pre-hooks using:
|
||||
# git rev-parse --show-toplevel
|
||||
# ln -s ../../scripts/git-prehook-whitespace.sh .git/hooks/pre-commit
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# detect platform
|
||||
platform="win"
|
||||
uname_result="$(uname)"
|
||||
if [ "$uname_result" = "Linux" ]; then
|
||||
platform="linux"
|
||||
elif [ "$uname_result" = "Darwin" ]; then
|
||||
platform="mac"
|
||||
fi
|
||||
|
||||
# change IFS to ignore filename's space in |for|
|
||||
IFS="
|
||||
"
|
||||
# autoremove trailing whitespace
|
||||
for line in $(git diff --check --cached | sed '/^[+-]/d') ; do
|
||||
# get file name
|
||||
if [ "$platform" = "mac" ]; then
|
||||
file="$(echo "$line" | sed -E 's/:[0-9]+: .*//')"
|
||||
else
|
||||
file="$(echo "$line" | sed -r 's/:[0-9]+: .*//')"
|
||||
fi
|
||||
# display tips
|
||||
echo -e "auto remove trailing whitespace in \\033[31m$file\\033[0m!"
|
||||
# since $file in working directory isn't always equal to $file in index, so we backup it
|
||||
mv -f "$file" "${file}.save"
|
||||
# discard changes in working directory
|
||||
git checkout -- "$file"
|
||||
# remove trailing whitespace
|
||||
if [ "$platform" = "win" ]; then
|
||||
# sed in msys 1.x does not support -i
|
||||
sed 's/[[:space:]]*$//' "$file" > "${file}.bak"
|
||||
mv -f "${file}.bak" "$file"
|
||||
elif [ "$platform" == "mac" ]; then
|
||||
sed -i "" 's/[[:space:]]*$//' "$file"
|
||||
else
|
||||
sed -i 's/[[:space:]]*$//' "$file"
|
||||
fi
|
||||
git add "$file"
|
||||
# restore the $file
|
||||
sed 's/[[:space:]]*$//' "${file}.save" > "$file"
|
||||
rm "${file}.save"
|
||||
done
|
||||
|
||||
# Now we can commit
|
||||
exit
|
Loading…
Add table
Reference in a new issue