mirror of
https://github.com/KDE/konsole.git
synced 2025-12-23 23:38:08 -05:00
Copy pre-push to konsole/.git/hooks/ folder and it will prevent push if message is not following commit-template.
98 lines
2.8 KiB
Bash
Executable File
98 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# Add this to your konsole/.git/hooks/ folder to prevent push if message is not following commit-template
|
|
# In your konsole folder type:
|
|
# cp ./doc/developer/pre-push ./.git/hooks/pre-push && chmod +x ./.git/hooks/pre-push
|
|
|
|
# Get the current branch and apply it to a variable
|
|
currentbranch=`git branch | grep \* | cut -d ' ' -f2`
|
|
|
|
# Gets the commits for the current branch and outputs to file
|
|
git log $currentbranch --pretty=format:"%H" --not master > shafile.txt
|
|
|
|
if [ ! -f "./shafile.txt" ]
|
|
then
|
|
echo "It is not possible to write temporary files"
|
|
echo "Check Read/Write permissions or remove this"
|
|
echo "pre-push check"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -s "./shafile.txt" ]
|
|
then
|
|
# if size is 0 there is no commit
|
|
rm shafile.txt >/dev/null 2>&1
|
|
exit 0
|
|
fi
|
|
|
|
echo '
|
|
====================
|
|
Commit Message Check
|
|
====================
|
|
'
|
|
|
|
#colors used here
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
NC='\033[0m'
|
|
|
|
passedall=0
|
|
# loops through the file an gets the messages
|
|
for i in `cat ./shafile.txt`;
|
|
do
|
|
passed=0
|
|
# gets the git commit message based on the sha
|
|
git log --format=%B -n 1 "$i" > logfile.txt
|
|
# load this message to an array
|
|
mapfile -t gitmessage < ./logfile.txt
|
|
|
|
# commit title
|
|
echo "- ${gitmessage[0]}"
|
|
|
|
# analise each line
|
|
for (( nline=0; nline<${#gitmessage[@]}+1; nline++ ));
|
|
do
|
|
line=${gitmessage[$nline]}
|
|
if [ ${#line} -gt 72 ]
|
|
then
|
|
echo -e " ${RED}*${NC} You MUST wrap all lines at 72 characters."
|
|
passed=1
|
|
fi
|
|
|
|
if [[ $nline -eq 1 && ${#line} -gt 0 ]]
|
|
then
|
|
echo -e " ${RED}*${NC} Follow the Subject with a blank line."
|
|
passed=1
|
|
fi
|
|
|
|
messagecheck=`echo $line | grep -w "BUG\|FEATURE\|FIXED-IN\|CCBUG\|CCMAIL\|GUI\|CHANGELOG"`
|
|
if [ -n "$messagecheck" ]
|
|
then
|
|
messagecheck=`echo $line | grep ': '`
|
|
if [ -z "$messagecheck" ]
|
|
then
|
|
echo -e " ${RED}*${NC} Your commit message has a formatting error."
|
|
echo " Type ' ' after field specification"
|
|
echo " -> $line"
|
|
passed=1
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Check if all passed
|
|
if [ $passed -gt 0 ]
|
|
then
|
|
echo -e " Commit message ${RED}FAILED${NC}"
|
|
passedall=1
|
|
else
|
|
echo -e " Commit message ${GREEN}PASSED${NC}"
|
|
fi
|
|
echo ""
|
|
done
|
|
# remove temporary files
|
|
rm shafile.txt >/dev/null 2>&1
|
|
rm logfile.txt >/dev/null 2>&1
|
|
# Test mode remove the next '#' to test it
|
|
#exit 1
|
|
# If all passed in the check it will exit 0
|
|
exit $passedall
|