Forked from davetron5000/Checkstyle pre-commit hook
Last active
August 29, 2015 14:13
-
-
Save DominikDary/d51d07aabf2306031eed to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
# | |
# Pre-commit hook for running checkstyle on changed Java sources | |
# | |
# To use this you need: | |
# 1. checkstyle's jar file somewhere | |
# 2. a checkstyle XML check file somewhere | |
# 3. To configure git: | |
# * git config --add checkstyle.jar <location of jar> | |
# * git config --add checkstyle.checkfile <location of checkfile> | |
# * git config --add java.command <path to java executale> [optional | |
# defaults to assuming it's in your path] | |
# 4. Put this in your .git/hooks directory as pre-commit | |
# | |
# Now, when you commit, you will be disallowed from doing so | |
# until you pass your checkstyle checks. | |
$command = "git-diff-index --cached HEAD 2>&1 | sed 's/^:.* //' | uniq"; | |
open (FILES,$command . "|") || die "Cannot run '$command': $!\n"; | |
$CONFIG_CHECK_FILE = "checkstyle.checkfile"; | |
$CONFIG_JAR = "checkstyle.jar"; | |
$CONFIG_JAVA = "java.command"; | |
$check_file = `git config --get $CONFIG_CHECK_FILE`; | |
$checkstyle_jar = `git config --get $CONFIG_JAR`; | |
$java_command = `git config --get $CONFIG_JAVA`; | |
if (!$check_file || !$checkstyle_jar) | |
{ | |
die "You must configure checkstyle in your git config:\n" | |
. "\t$CONFIG_CHECK_FILE - path to your checkstyle.xml file\n" | |
. "\t$CONFIG_JAR - path to your checkstyle jar file\n" | |
. "\t$CONFIG_JAVA - path to your java executable (optional)\n" | |
; | |
} | |
$java_command = "java" if (!$java_command); | |
chomp $check_file; | |
chomp $checkstyle_jar; | |
chomp $java_command; | |
$command = "$java_command -jar $checkstyle_jar -c $check_file"; | |
@java_files = (); | |
foreach (<FILES>) | |
{ | |
chomp; | |
next if (!(/\.java$/)); | |
push @java_files,$_; | |
$command .= " "; | |
$command .= $_; | |
} | |
if ($#java_files >= 0) | |
{ | |
if (&run_and_log_system ($command)) | |
{ | |
print STDERR "Commit aborted.\n"; | |
exit -1; | |
} | |
} | |
exit 0; | |
sub run_and_log_system | |
{ | |
($cmd) = @_; | |
system $cmd; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment