104 lines
4.5 KiB
Bash
Executable File
104 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Yes, this script can be improved immensly...
|
|
cd ..
|
|
|
|
result=0
|
|
|
|
echo "No subjects are of invalid size<br>" > too_long_subjects.txt
|
|
echo "No subjects with leading lower case characters<br>" > leading_lowercases.txt
|
|
echo "No subjects with trailing periods<br>" > trailing_periods.txt
|
|
echo "No body lines are too wide<br>" > too_long_body_lines.txt
|
|
echo "No keywords are missing in keywords.txt<br>" > missing_keywords.txt
|
|
|
|
too_long_subjects=`awk 'length > 72' subjects.txt`
|
|
if [ -n "$too_long_subjects" ]; then
|
|
echo "<b>Commit subjects that are too wide (>72 characters):</b>" > too_long_subjects.txt
|
|
echo "$too_long_subjects" >> too_long_subjects.txt
|
|
sed -i -e 's/$/<br>/' too_long_subjects.txt
|
|
result=1
|
|
fi
|
|
leading_lowercases=`awk '/^[[:lower:][:punct:]]/' subjects.txt`
|
|
if [ -n "$leading_lowercases" ]; then
|
|
echo "<b>Commit subjects with leading lowercase characters:</b>" > leading_lowercases.txt
|
|
echo "$leading_lowercases" >> leading_lowercases.txt
|
|
sed -i -e 's/$/<br>/' leading_lowercases.txt
|
|
result=1
|
|
fi
|
|
trailing_periods=`awk '/(\.)$/' subjects.txt`
|
|
if [ -n "$trailing_periods" ]; then
|
|
echo "<b>Commit subjects with trailing periods:</b>" > trailing_periods.txt
|
|
echo "$trailing_periods" >> trailing_periods.txt
|
|
sed -i -e 's/$/<br>/' trailing_periods.txt
|
|
result=1
|
|
fi
|
|
|
|
too_long_body_lines=`awk 'length > 72' bodies.txt`
|
|
if [ -n "$too_long_body_lines" ]; then
|
|
echo "<b>Body lines that are too wide (>72 characters):</b>" > too_long_body_lines.txt
|
|
echo "$too_long_body_lines" >> too_long_body_lines.txt
|
|
sed -i -e 's/$/<br>/' too_long_body_lines.txt
|
|
result=1
|
|
fi
|
|
|
|
missing_keywords=$(for keyword in $(grep -A999 '#if DOXYGEN' MyConfig.h | grep -B999 '#endif' | grep '#define' | awk '{ print $2 '} | grep -e '^MY_'); do grep -q $keyword keywords.txt || echo $keyword; done)
|
|
if [ -n "$missing_keywords" ]; then
|
|
echo "<b>Keywords that are missing from keywords.txt:</b>" > missing_keywords.txt
|
|
echo "$missing_keywords" >> missing_keywords.txt
|
|
sed -i -e 's/$/<br>/' missing_keywords.txt
|
|
result=1
|
|
fi
|
|
|
|
|
|
printf "%s" "<html>" > gitler.html
|
|
awk 'FNR==1{print "<br>"}1' too_long_subjects.txt leading_lowercases.txt trailing_periods.txt too_long_body_lines.txt missing_keywords.txt >> gitler.html
|
|
echo "<br>" >> gitler.html
|
|
if [ $result -ne 0 ]; then
|
|
echo "You should follow <a href="http://chris.beams.io/posts/git-commit">this guide</a> when writing your commit messages.<br>" >> gitler.html
|
|
echo "<br>" >> gitler.html
|
|
echo "To change the commit message for a single-commit pull request:<br>" >> gitler.html
|
|
echo "git checkout <your_branch><br>" >> gitler.html
|
|
echo "git commit --amend<br>" >> gitler.html
|
|
echo "git push origin HEAD:<your_branch_on_github> -f<br>" >> gitler.html
|
|
echo "<br>" >> gitler.html
|
|
echo "To change the commit messages for a multiple-commit pull request:<br>" >> gitler.html
|
|
echo "git checkout <your_branch><br>" >> gitler.html
|
|
echo "git rebase -i <sha_of_parent_to_the_earliest_commit_you_want_to_change><br>" >> gitler.html
|
|
echo "Replace \"pick\" with \"r\" or \"reword\" on the commits you need to change message for<br>" >> gitler.html
|
|
echo "git push origin HEAD:<your_branch_on_github> -f<br>" >> gitler.html
|
|
echo "<br>" >> gitler.html
|
|
fi
|
|
|
|
# Evaluate coding style
|
|
astyle --options=.mystools/astyle/config/style.cfg -nq --recursive "*.h" "*.c" "*.cpp"
|
|
git diff > restyling.patch
|
|
if [ -s restyling.patch ]; then
|
|
echo "<b>This commit is not meeting the coding standards, a mail with a patch has been sent to you that if applied to your PR, will make it meet the coding standards.</b><br>" >> gitler.html
|
|
echo "You apply the patch using:<br>" >> gitler.html
|
|
echo "git apply restyling.patch<br>" >> gitler.html
|
|
echo "<br>" >> gitler.html
|
|
result=1
|
|
else
|
|
echo "This commit is meeting the coding standards, congratulations!<br>" >> gitler.html
|
|
echo "<br>" >> gitler.html
|
|
rm restyling.patch
|
|
fi
|
|
|
|
# Evaluate if there exists booleans in the code tree (not counting this file)
|
|
if git grep -q boolean -- `git ls-files | grep -v gitler.sh`
|
|
then
|
|
echo "<b>This repository currently contain the boolean keyword. This should be avoided.</b><br>" >> gitler.html
|
|
echo "<br>" >> gitler.html
|
|
result=1
|
|
else
|
|
echo "This repository does not contain any boolean keywords. This is good.<br>" >> gitler.html
|
|
echo "<br>" >> gitler.html
|
|
fi
|
|
|
|
if [ $result -ne 0 ]; then
|
|
echo "<b>If you disagree to this, please discuss it in the GitHub pull request thread.</b><br>" >> gitler.html
|
|
echo "<br>" >> gitler.html
|
|
fi
|
|
echo "Yours sincerely, Gitler, on behalf of Jenkins<br>" >> gitler.html
|
|
printf "%s" "</html>" >> gitler.html
|
|
exit $result
|