91 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/sh
 | |
| # Source validation pre-commit hook
 | |
| #
 | |
| # Adapted from the source validation pre-commit hook used in Peloton.
 | |
| # (see https://github.com/cmu-db/peloton/blob/master/script/git-hooks/pre-commit)
 | |
| #
 | |
| # This script collects all modified files and runs it through our source code
 | |
| # validation script. The validation script returns 0 on success and 1 on any
 | |
| # failure. This script can also run the server and controller tests by
 | |
| # uncommenting lines 26-28 and 31-33, respectively. 
 | |
| #
 | |
| # To enable, symlink this file to '.git/hooks/pre-commit' like so:
 | |
| #   cd $OTTERTUNE_DIR/.git/hooks
 | |
| #   ln -s ../../script/git-hooks/pre-commit ./pre-commit
 | |
| 
 | |
| 
 | |
| FILES=$(git diff --name-only --cached --diff-filter=d | grep -E '.*\.(py|java)$')
 | |
| 
 | |
| WEBSITE_TESTS_RESULT=0
 | |
| ANALYSIS_TESTS_RESULT=0
 | |
| CONTROLLER_TESTS_RESULT=0
 | |
| VALIDATOR_RESULT=0
 | |
| 
 | |
| if [ -n "$FILES" ]; then
 | |
| 
 | |
|     # Uncomment to run the website tests
 | |
|     # cd server/website && python3 manage.py test --noinput -v 2
 | |
|     # WEBSITE_TESTS_RESULT=$?
 | |
|     # cd ../..
 | |
| 
 | |
|     # Uncomment to run the analysis tests
 | |
|     # cd server && python3 -m unittest discover -s analysis/tests -v
 | |
|     # ANALYSIS_TESTS_RESULT=$?
 | |
|     # cd ..
 | |
| 
 | |
|     # Uncomment to run the controller tests
 | |
|     # cd controller && gradle build -q
 | |
|     # CONTROLLER_TESTS_RESULT=$?
 | |
|     # cd ..
 | |
| 
 | |
|     # Run source code validator
 | |
|     python3 script/validators/source_validator.py $FILES
 | |
|     VALIDATOR_RESULT=$?
 | |
| 
 | |
|     if [ "$VALIDATOR_RESULT" -ne 0 ] || [ "$WEBSITE_TESTS_RESULT" -ne 0 ] || [ "$ANALYSIS_TESTS_RESULT" -ne 0 ] || [ "$CONTROLLER_TESTS_RESULT" -ne 0 ]; then
 | |
| 
 | |
|         echo " +------------------------------------------------------------+"
 | |
|         echo " |                                                            |"
 | |
|         echo " |                OTTERTUNE PRE-COMMIT HOOK                   |"
 | |
|         echo " |                                                            |"
 | |
|         echo " +------------------------------------------------------------+"
 | |
|         echo ""
 | |
| 
 | |
|         if [ "$WEBSITE_TESTS_RESULT" -ne 0 ]; then
 | |
|             echo " FAILED website tests!"
 | |
|             echo ""
 | |
|         fi
 | |
| 
 | |
|         if [ "$ANALYSIS_TESTS_RESULT" -ne 0 ]; then
 | |
|             echo " FAILED analysis tests!"
 | |
|             echo ""
 | |
|         fi
 | |
| 
 | |
|         if [ "$CONTROLLER_TESTS_RESULT" -ne 0 ]; then
 | |
|             echo " FAILED controller tests!"
 | |
|             echo ""
 | |
|         fi
 | |
| 
 | |
|         if [ "$VALIDATOR_RESULT" -ne 0 ]; then
 | |
|             echo " FAILED source validation!"
 | |
|             echo ""
 | |
|             echo " Use the formatting script to help format all changed files:"
 | |
|             echo " (ottertune/script/formatting/formatter.py)"
 | |
|             echo ""
 | |
|             echo "      \"python formatter.py --staged-files\""
 | |
|             echo ""
 | |
|         fi
 | |
| 
 | |
|         echo " To temporarily bypass the pre-commit hook, use:"
 | |
|         echo ""
 | |
|         echo "      \"git commit --no-verify\""
 | |
|         echo
 | |
|         echo " Be aware that changed files have to be staged again!"
 | |
| 
 | |
|         exit 1
 | |
|     fi
 | |
| 
 | |
| fi
 | |
| 
 | |
| exit 0
 |