Есть способы сделать это, но прежде чем я начну, вы уверены, что хотите это сделать? Выполнение блокировки, возможно, медленная, отталкивающая от изменений изменения в крючке раздражает ад из людей, и он все время хранит хранилище репозитория, поэтому никто не может нажимать, пока работает скрипт проверки. Можно довольно легко подбросить половину преимуществ производительности DVCS из окна, пытаясь получить небольшой контроль.
Вы можете избежать большинства этих недостатков с помощью двухуровневой настройки репозитория. Что-то вроде project-push
, где люди могут нажимать без проверки валидации и project-pull
, который имеет только изменения, которые прошли некоторую проверку. Затем у вас есть сценарий вне диапазона (cron или hook triggered), который перемещает изменения от project-push
до project-pull
только после подтверждения подтверждения. Поскольку этот тест выполняется вне диапазона, не блокируются, но недействительные изменения никогда не превращают его в project-pull
. Вы можете отправить его по электронной почте автору, когда их толчок переместил project-pull
в состояние, не подлежащее проверке. Пользователи с их .hg/hgrc
сконфигурированные как это не было бы думать о том, что они были два хранилищами на всех:
[paths]
default=http://host//path/to/project-pull
default-push=http://host//path/to/project-push
Они могли бы просто использовать hg push
и hg pull
и все будет «просто работать».
Это сказало, если ваша проверка не требуется доступ ко всем обновленных файлов в то же время вы можете сделать свой тест с чем-то вроде этого во внешнем pretxnchangegroup
крючке:
for thefile in $(hg manifest -r tip) ; do
if ! hg cat -r tip $thefile | ./validate_on_file.sh ; then
exit
fi
done
Если вам нужно работать со всеми файлами сразу (компиляция и т. д.), и вы не хотите создавать структуру с двумя репо, которая освобождает людей для быстрого нажатия, тогда вам нужно отдельное репо для тестирования, но вам не нужно клонировать/создавать его каждый раз. Нечто подобное в pretxnchangegroup
крючка должно сделать:
hg push /scratch/long-lived-testrepo ## Warning: may not work,
## if pretxnchangegroup locks the repo and
## blocks this push to testrepo
hg -R /scratch/long-lived-testrepo update
cd /scratch/long-lived-testrepo
./validation.sh
Спасибо за интересное вводное предупреждение. Однако в этом случае проект по-прежнему относительно невелик в плане людей и времени проверки, поэтому я хотел бы попробовать вашу последнюю идею (все файлы необходимы для проверки, для некоторого статического анализа кода). Один вопрос: в случае валидация не удалась, будет ли простой «hg rollback» (очистить репо)? Будет ли это просто отказаться от всей группы поэтапных наборов изменений? – Gnurfos
Да, откат отменяет нажатие или вытягивание. убедитесь, что используете '-R', или вы будете откатывать возвращаемое репо, а не тестовое репо. –
Спасибо, кажется, отлично работает. (но я просто подключился к репозиторию нуля вместо использования -R). – Gnurfos