LINUX.ORG.RU

Mercurial: 00changelog.d: The system cannot find the file specified

 


0

1

При попытке измененния последнего коммита (amend) репозиторий был сломан. Детальной информации не сохранилось, есть только поломанный репозиторий:

hg log
abort: .hg/store/00changelog.d: The system cannot find the file specified

hg verify
abort: unknown version (2) in revlog 00manifest.i!

hg st
warning: ignoring unknown working parent 748e2d9564a0!
abort: unknown version (2) in revlog 00manifest.i!
Хотелось бы как-то восстановить репу, или вытянуть от туда хоть что-то, список коммитов, коментарии, перечисление файлов и т.п. Есть старая копия.

Как-то слабо вериться что процессы стали настолько ненадёжны что можно всё нафиг потерять. До этого репка часто отваливалась в -1 ревизию при банальных move или shelve, лечил стандартным

hg debugsetparent {rev} && hg debugrebuildstate
Зря я это игнорил, но небыло времени на это реагировать.

Mercurial 4.6.1 Python 2.7.13


abort: .hg/store/00changelog.d: The system cannot find the file specified

После такого - боюсь, только бэкапы. И перед началом работы, скопируй их на другой диск и прогони hg verify.

Чисто теоретически, данные файлов можно вытащить из ревлогов, но с битым manifest ревизии не восстановишь.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Как я понял этот файл не обязателен. В «соседней» репке его также нет, но она стабильна, при техже издевательствах над историей коммитов. Хороршо бы как-то прочитать бинарик манифеста как есть без логической целостности и потом попробывать пофиксить ...

За hg debugindex и hg debugdata спасибо. Для начала попробую хотябы восстановить порядок файлов из кэша, хорошо что история в этот период была практически линейная.

Mnior
() автор топика
Ответ на: комментарий от Mnior

Как я понял этот файл не обязателен.

Если hg без него не работает - он обязателен.

В «соседней» репке его также нет

hg verify

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

hg verify

hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
1319 files, 27 changesets, 1985 total revisions

Как я понял, d файлы не обязательны, это дополнение/расширение к i файлам. Даже в кеше в основном i файлы, а d нету (как в «соседней» репке) или один файл (в это поломанном).

Можно пердположить, что в последней команде (amend):

  • а) таки появилось необходимость в файле d (и в кэше он создался), но не успел создаться в базовых файлах (00manifest/00changelog).
  • б) необходимости нету, просто методика чтения 00manifest/00changelog не согласован с многоэтапным процессом записизаписи.

Возможно что изначальную предположительную надёжность (с немутабельной историей) поломала недоработанные (не транзакционные) новые механизмы с изменением истории. Но это демагогия.

Где-то хранятся комменты коммитов помимо 00manifest?

Mnior
() автор топика
Ответ на: комментарий от Mnior

Как я понял, d файлы не обязательны, это дополнение/расширение к i файлам.

ЕМНИП, *.d-файлы появялются, когда данные становятся достаточно большими и их уже невыгодно хранить в *.i-файле (https://www.mercurial-scm.org/wiki/Revlog https://www.mercurial-scm.org/wiki/RevlogNG)

Где-то хранятся комменты коммитов помимо 00manifest?

В manifest храняться списки файлов, соответствующие каждому коммиту. Нет, больше нигде они не хранятся (https://www.mercurial-scm.org/wiki/Repository).

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.