Never Forget to Remove your Debugging Statements with GIT Hooks
I'm as guilty as anyone when it comes to trying to push a release out, racing against the clock and accidentally leaving a debugging statement in the code. It's happened more than once, and it needs to stop.
As a Drupal developer I have a couple that I use regularly by way of the Devel module. This is exceptionally bad when I forget to remove them since I don't push development modules into production (and neither should you). These simple little functions provide the user with a nice White Screen of Death, or, if you have your error messages on, a 'function does not exist' error.
Here's a friendly reminder via GIT hooks to clean up your code before you push those changes.
STEPS
Create a pre-commit hook if you don't already have one.
Add this snippet to review your code.
Adjust the parameters to your desired settings.
Set this in a template hook so all new repos inherit this check.
1. CREATE THE HOOK
In your git project, go to .git/hooks
and copy or rename the file pre-commit.sample
to pre-commit
.
2. ADD THIS CODE
#!/bin/sh
#
# Check for debugging statements before commiting your code.
#
# List of function names to search for in regex format
FUNCTIONS='func1|func2|func3'
# If any functions are found as executable, prevent the commit.
DIEONFAIL=false
echo "Running the debugger check..."
RES=`egrep -nr --exclude-dir=".git" "^(\s*)?[^/{2}]($FUNCTIONS)\(.*\)" .`
if [[ -n "$RES" ]]; then
echo "\n$RES"
echo "\nDebugging functions were found in your code!"
if [[ $DIEONFAIL == true ]]; then
echo "Changes were not committed."
exit 1;
else
echo "You may want to clean these up before you push those changes.\nChanges were committed anyway.\n"
exit 0;
fi
else
echo "\n No debugging functions were found. Nice job, Ace!\n";
exit 0;
fi
3. ADJUST THE PARAMS
Replace the list of functions at the top with any functions you want to search for. Use regex format.
Set $DIEONFAIL
to either true
if you want the commit to die if it finds any listed functions, or leave it as false
if you want the changes to be committed anyway.
4. SET THE TEMPLATE
You can create system-wide templates for your git hooks so they are inherited into every new project. See this post on StackExchange for instructions.
Now, every time you attempt to commit changes on that project, git will warn you if you accidentally left any debugging statements behind.
Drupal Example
Here's the settings for the hook I have set up in my Drupal projects. Notice I added an extra directory exclude for the devel
modules.
# List of function names to search for in regex format
FUNCTIONS='dpm|kpr|qpr|console\.log'
# If any functions are found as executable, prevent the commit.
DIEONFAIL=false
echo "Running the debugger check..."
RES=`egrep -nr --exclude-dir=".git" --exclude-dir="*devel*" "^(\s*)?[^/{2}]($FUNCTIONS)\(.*\)" .`
Written by Chris Albrecht
Related protips
2 Responses
great handy tip.
You are grepping you entire code base!
Use git diff --cached --name-only to get a list of relevant files to search.