Это отчасти связано с этот вопрос но это другой вопрос.
У нас есть центральный репозиторий Hg, обслуживаемый пользователями через SSH и меркуриальный сервер. К нему подключается ряд клиентов Mac, Linux и Windows.
Дважды случалось, что один из пользователей Windows повредил свой репозиторий, а затем вернулся к центральному, повредив его. Я хочу написать входящий скрипт перехвата в центральном репозитории, чтобы предотвратить принятие транзакции, если она повредит центральное репо.
Хотя, к сожалению, я недостаточно знаю Mercurial, чтобы написать такой скрипт. Есть ли вероятность, что кто-то еще сталкивался с этим? Лично я не совсем уверен, почему hg не делает этого по умолчанию.
Последние версии Mercurial (начиная с 1.5) поддерживают проверку входящих данных. Добавить
[server]
validate = True
в конфигурацию hg вашего сервера (либо .hg/hgrc
или конфигурация hgwebdir должна работать нормально), чтобы сервер проверял входящие данные и отклонял недопустимые нажатия. Затем клиент увидит ошибку, похожую на:
remote: abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify
Надеюсь, это поможет!
Возможно, вам следует вообще избегать нажатия в репозиторий. С Mercurial и его распределенной природой каждый может иметь свою ветку, и когда они чувствуют, что готовы, они сообщают вам, и вы от них беретесь. Никаких проблем с доступом к фиксации, никакого толчка, который сломает все ...
По крайней мере, это совет, который мне дал мой друг, когда я переходил с SVN на Mercurial.
Я не знаю, подходит ли вам этот вариант, но настройка личного репозитория для всех и последующее получение информации от людей, которые вам нужны, может потребовать меньше усилий, чем попытки поймать опасные толчки.
Не могли бы вы сделать то же самое, что и Блог Дэвида Херрона, но вместо того, чтобы делать это при предварительной маршрутизации, сделать это на крюке precommit в центральном репо?
Одна из возможных альтернатив:
Это решение не то, что вам нужно, но, по крайней мере, вы получаете возможность откатить репозиторий в случае повреждения.