-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathpost-commit
executable file
·47 lines (39 loc) · 1.25 KB
/
post-commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash
#
# Copyright (c) 2016 Jacob Young
# MIT License
#
# Remove @commit comments from source files
IGNORED=( ".ccignore" )
# If the script is deployed to the .git directory,
# move to the repository directory so .ccignore file
# can be found
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
if which pcregrep > /dev/null; then
grep_git="pcregrep -o '^.*(?=(\.git))'"
else
grep_git="grep -Po '^.*(?=(\.git))'"
fi
if echo "$DIR" | grep -qs 'git'; then
cd "$( echo "$DIR" | eval "$grep_git" )"
fi
if [ -f ".ccignore" ]; then
while IFS='' read -r line || [[ -n "$line" ]]; do
IGNORED+=( "$line" )
done < ".ccignore"
fi
IFS=$'\n' ADDED_FILES=( $(git ls-files) )
for i in ${!ADDED_FILES[@]}; do
file_path=${ADDED_FILES["$i"]}
filename=$( basename "$file_path" )
if [[ "${IGNORED[*]}" =~ "${filename}" ]]; then
# File should not be read - remove
unset ADDED_FILES["$i"]
fi
done
for fn in "${ADDED_FILES[@]}"; do
# Uncomment sed command to remove '// @commit' comments in all files
sed -ri 's/(([#;*]|\/{1,2})?(\s+)?@commit([-:.\s]+)?)([^\r\n*\/]+)//' "$fn" # GNU sed compatible only
# Uncomment sed command to replace multiple empty lines with a single empty line
# sed '/^$/N;/^\n$/D' "$fn" # GNU sed compatible only
done