Я не ожидаю, что это будет выигрышный ответ, но это довольно необычная ситуация. Упоминание на случай, если кто-то кроме меня столкнется с этим.
Сегодня я получил "ожидание блокировки в хранилище" по команде 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 работает вообще, хотя, кажется, за исключением этого толчка.