Получил несовместимое состояние Mercurial под-репозитория (RepoLookupError) два раза в день. Как это возможно? - PullRequest
2 голосов
/ 20 января 2012

Недавно перенесен в Mercurial.

Из-за интенсивного использования внешних ресурсов в старых репозиториях SVN мы соответственно используем Subrepos и имеем CI-сервер, который часто тянет / толкает центральные репозитории. Поэтому довольно сложно отследить, что именно произошло, и разработчики не могут воспроизвести точные шаги.

Но, после перетягивания мы получили ошибки вроде этого:

RepoLookupError: unknown revision '766981bc81dc78fe24d5fe5c7d68e36c66858e73'
abort: unknown revision '766981bc81dc78fe24d5fe5c7d68e36c66858e73'!

И такие наборы изменений не могут быть найдены нигде, ни на сервере, ни в локальных репозиториях. Получал эту ситуацию дважды в день.

Каким-то образом с сервера приходит .hgsubstate, который ссылается на неизвестный набор изменений репозитория.

И мы не сделали ничего потенциально опасного, просто обычные коммиты / вытягивания / слияния.

Насколько мы понимаем, это невозможная ситуация (вы не можете зафиксировать .hgsubstate со ссылкой на незафиксированный или не существующий набор изменений репозитория).

Есть идеи, что мы можем делать неправильно или как это может произойти?

edit : mq также не используется

1 Ответ

2 голосов
/ 28 января 2012

Чтобы создать неизвестную (невидимую) ревизию, выполните следующие действия.

Клиент 1

  1. Подтвердите изменение в подпункте
  2. Свяжите фиксацию в репо с фиксацией в репо (идентификатор набора изменений субрепо будет обновлен в файле .hgsubstate)
  3. Откатите коммит субрепо (теперь вы получили ссылку в главном репо нанесуществующая ревизия в подпункте)
  4. Передать оба репозитория на сервер

Клиент 2

  1. Извлечь с сервера

Произошла ошибка!

...