Написать крючок предварительной фиксации GIT в java?

Мне нужно написать хук Git перед фиксацией на Java, который проверял бы, отформатирован ли код, зафиксированный разработчиком, в соответствии с определенным форматером кода eclipse перед его фактической фиксацией, в противном случае он отклонялся бы от фиксации. Можно ли написать хук перед фиксацией на Java?


person Jeewantha    schedule 06.11.2012    source источник


Ответы (3)


Идея состоит в том, чтобы вызвать скрипт, который, в свою очередь, вызывает вашу java-программу (проверка формата).

Вы можете см. здесь пример, написанный на python, который вызывает 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)

Этот другой пример напрямую вызывает ant для выполнения сценария ant (который, в свою очередь, вызывает набор тестов Java JUnit)

#!/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
person VonC    schedule 06.11.2012

Начиная с Java 11 теперь вы можете запускать нескомпилированные файлы основного класса с помощью команды java.

$ java Hook.java

Если вы удалите .java и добавите шебанг в верхнюю строку следующим образом:

#!/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);
    }
} 

затем вы можете просто выполнить его так же, как и любой другой файл сценария.

$ ./Hook

Если вы переименуете файл pre-commit, а затем переместите его в свой каталог .git/hooks, у вас теперь будет рабочий Java Git Hook.

person Rudi Kershaw    schedule 19.05.2020
comment
Интересное обновление, более актуальное, чем мой ответ 2012 года. Проголосовал. - person VonC; 19.05.2020

Вы можете написать хук на любом языке, понятном оболочке, с правильно настроенным интерпретатором (bash, python, perl) и т.д.

Но почему бы не написать свой форматировщик java-кода на java и не вызвать его из хука перед фиксацией.

person Alan    schedule 06.11.2012