Question

I need to write a Git pre commit hook in Java, which would check if the code commited by the developer is formatted according to a specific eclipse code formatter before actually commiting it, otherwise reject it from commiting. Is it possible to write the pre commit hook in Java?

Was it helpful?

Solution

The idea is to call a script which in turns call your java program (checking the format).

You can see here an example written in python, which calls java.

try:
    # call checkstyle and print output
    print call(['java', '-jar', checkstyle, '-c', checkstyle_config, '-r', tempdir])
except subprocess.CalledProcessError, ex:
    print ex.output  # print checkstyle messages
    exit(1)
finally:
    # remove temporary directory
    shutil.rmtree(tempdir)

This other example calls directly ant, in order to execute an ant script (which in turns call a Java JUnit test suite)

#!/bin/sh

# Run the test suite.
# It will exit with 0 if it everything compiled and tested fine.
ant test
if [ $? -eq 0 ]; then
  exit 0
else
  echo "Building your project or running the tests failed."
  echo "Aborting the commit. Run with --no-verify to ignore."
  exit 1
fi

OTHER TIPS

As of Java 11, you can now run un-compiled main class files using the java command.

$ java Hook.java

If you strip off the .java and add a shebang to the top line like so:

#!/your/path/to/bin/java --source 11
public class Hook {
    public static void main(String[] args) {
        System.out.println("No committing please.");
        System.exit(1);
    }
} 

then you can simply execute it the same way you would with any other script file.

$ ./Hook

If you rename the file pre-commit, and then move it into your .git/hooks directory, you now have a working Java Git Hook.

You can write the hook in any language that can be understood by the shell, with the properly configured interpreter (bash, python, perl) etc.

But, why not write your java code formatter in java, and invoke it from the pre-commit hook.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top