Автоматически запускать проверку хранилища Hg перед запуском / извлечением, без программирования - PullRequest
3 голосов
/ 16 апреля 2019

Мы обнаружили, что наш репозиторий Hg был поврежден несколько недель назад.Эта коррупция, похоже, распространяется: все клоны (центральный репозиторий и пользовательские репозитории) повреждены, довольно сильно, одинаково.Я думаю, что мы могли бы предотвратить это, если бы мы сделали проверку в то время.

Существует ли какая-либо настройка Hg, которая будет вызывать проверку при каждом нажатии и предотвращать толчок в случае сбоя проверки?Я знаю, что мог бы реализовать это как хук в Python, но может ли быть более простое решение?

Можно ли сделать и обратное: убедиться, что удаленный репозиторий проверен перед извлечением?

FWIW, я нахожусь на Windows 10, и мы используем TortoiseHg.

Обновление: я попытался создать ловушки как предложено Jordi.Хг теперь висит в ожидании замков.Вот что я вижу:

c:\Users\username\test-hook>hg init
c:\Users\username\test-hook>cd ..
c:\Users\username>hg clone test-hook test-hook-clone
updating to branch default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved

# At this point I edited clone repository settings to include
# [hooks]
# preoutgoing = hg verify
#
# Then I created a test.txt file and "added" it via TortoiseHg context menu.

c:\Users\username\test-hook-clone>hg commit
c:\Users\username\test-hook-clone>hg status

c:\Users\username\test-hook-clone>hg outgoing
comparing with c:\Users\username\test-hook
searching for changes
changeset:   0:a61d33af6cdb
tag:         tip
user:        username
date:        Mon May 06 20:32:54 2019 +0200
summary:     test file added

c:\Users\username\test-hook-clone>hg push -verbose
pushing to c:\Users\username\test-hook
searching for changes
running hook preoutgoing: hg verify
waiting for lock on repository c:\Users\username\test-hook-clone held by process '16840' on host 'LT407233'

Ответы [ 2 ]

4 голосов
/ 18 апреля 2019

Чтобы ответить на ваш вопрос, ловушка не обязательно должна быть написана на Python. На соответствующем сервере hgrc (либо на уровне хранилища, либо на уровне системы) просто установите

[hooks]
preoutgoing = hg verify
preincoming = hg verify

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

Это приведет к такому выводу, когда клиент попытается извлечь из поврежденного репо:

$ hg clone http://localhost:9000 sample-repo
requesting all changes
remote: abort: preoutgoing hook exited with status 1

и в логах вашего сервера вы должны увидеть вывод, похожий на

127.0.0.1 - - [18/Apr/2019 12:41:09] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=lheads+%3Bknown+nodes%3D x-hgproto-1:0.1 0.2 comp=zstd,zlib,none,bzip2 partial-pull
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
 a@0: broken revlog! (index data/a.i is corrupted)
warning: orphan data file 'data/a.i'
checked 2 changesets with 1 changes to 2 files
1 warnings encountered!
1 integrity errors encountered!
(first damaged changeset appears to be 0)
0 голосов
/ 07 мая 2019

Вы можете включить опцию на стороне сервера, чтобы выполнить дополнительную проверку всего входящего контента, просто установите опцию server.validate=yes на вашем сервере.

Самый простой способ - включить его на глобальном hgrc сервере или в файле .hg/hgrc хранилища, добавив следующие две строки:

[server]
validate = yes

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

(Кстати, какую коррупцию вы видите?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...