Я не ожидаю, что это будет выигрышный ответ, но это довольно необычная ситуация.
Упоминание на случай, если кто-то кроме меня столкнется с ним.
Сегодня я получил «ожидание блокировки в хранилище» по команде hg push.
Когда я убил команду зависшего hg, я не увидел никакой .hg / store / lock
Когда я искал .hg / store / lock, пока команда зависла, она существовала. Но файл блокировки был удален при уничтожении команды hg.
Когда я подошел к цели толчка и выполнил команду hg pull, никаких проблем.
В конце концов я понял, что идентификатор процесса на hg push был сообщением об ожидании блокировки, которое каждый раз менялось. Оказывается, что «hg push» зависал в ожидании блокировки, удерживаемой самой собой (или, возможно, подпроцесса, который я больше не исследовал).
Оказывается, что два рабочих пространства, назовем их A и B, имели деревья .hg, общие для symlink:
A/.hg --symlinked-to--> B/.hg
Это НЕхорошо делать с Mercurial. Mercurial не понимает концепцию двух рабочих пространств, совместно использующих один и тот же репозиторий. Тем не менее, я понимаю, как кто-то может прийти в Mercurial из другой VCS (это может делать Perforce, хотя и не DVCS; как сообщается, это может сделать Bazaar DVCS). Я удивлен, что символическая ссылка REP-ROOT / .hg работает вообще, хотя, кажется, за исключением этого толчка.