У меня есть репозиторий Mercurial, и я пытаюсь создать хук фиксации, который может отклонить новую входящую отправку, если предыдущая самая последняя отправка произошла в течение последних 15 минут (как форма регулирования, поэтому мы можем убедиться, что наша автоматические тесты успевают завершиться до того, как кто-то другой попадет поверх возможно неработающего кода, а теперь кто-то еще, возможно, приземлится на дважды неработающий код).
Итак, я настроил свой файл hgrc на стороне сервера следующим образом:
[hooks]
prechangegroup.throttlehook = python:path/to/throttlescript.py:hook
Я использую хук prechangegroup, потому что это дает мне доступ к репозиторию в том виде, в каком он существует, без коммитов входящих push-уведомлений.
Хук работает, поскольку код скрипта запускается и может отклонить входящий push, если я верну ненулевой код возврата.
Там, где я сталкиваюсь с трудностями, я получаю отметку времени самого последнего нажатия. В дросселе script.py у меня есть следующее:
import time
def hook(ui, repo, **kwargs):
difference = time.time() - repo['tip'].date()[0] # this should be the difference between the current time and the most recent push
if difference < 900:
print "You are pushing too soon after the most recent push. Please try again later."
return 1
return 0
Но repo['tip'].date()[0]
, похоже, является отметкой времени самой последней фиксации, которая могла произойти задолго до того, как она была отправлена в мой канонический репозиторий, поэтому, вероятно, ей нельзя доверять как отметке времени самой последней отправки.
Есть ли другое место, где я могу найти временную метку push, а не commit? Могу ли я использовать время последнего изменения какого-либо файла в папке .hg репозитория?