В настоящее время у меня есть простой pre-commit
хук для моего проекта (в R, хотя это не относится к этому вопросу), который выполняет модульные тесты:
#!/bin/sh
a=$(Rscript tests/testthat.R)
exit $a
Где tests/testthat.R
- это файл-обертка, который обрабатываетвсе тесты.
Этот хук имеет проблему, хотя: если я делаю частичные коммиты (такие, что есть изменения, которые остаются незафиксированными), тесты будут выполняться в текущем состоянии рабочего дерева, включаянезафиксированные изменения.
Итак, допустим, я заканчиваю «Шаг 1» чем-то, что я делаю, но забываю зафиксировать это. Затем я начинаю «Шаг 2», но потом понимаю, что забыл совершить «Шаг 1». Если «Шаг 2» в настоящее время находится в нерабочем состоянии из-за незавершенных изменений, я не смогу выполнить частичную фиксацию для «Шаг 1», потому что тесты обнаружат, что «Шаг 2» неисправен.
Итак, есть ли способ для перехвата на версии, которая на самом деле фиксируется? Я думаю, что это будет ловушка, которая фактически временно проверяет фиксацию, запускает тесты для этой проверки, удаляет проверку и затем определяет, разрешить ли прохождение фиксации. Но, учитывая, что этот хук срабатывает до того, как коммит завершен, я предполагаю, что проверить его невозможно.
Я также был бы открыт для хака pre-push
. Это кажется более правдоподобным, поскольку ловушка получает SHA для отправки коммитов, поэтому моя идея выше кажется более разумной: получить последний SHA, создать временный каталог, проверить этот SHA, запустить тесты, удалить каталог. Но тогда у меня возникает вопрос: действительно ли это предлагаемый метод или я слишком усложняю вещи из-за своего невежества?