2009-09-02

Новый формат репозиториев Mercurial (fncache)

fncache - новый формат репозиториев для Mercurial, который изменяет правила формирования имен файлов revlog. Впервые введен в Mercurial версии 1.1 и становится форматом по умолчанию для новосоздаваемых репозиториев.

Причиной введения нового формата является улучшение способа именования файлов (из за ограничений некоторых операционных систем и файловых систем). Так зарезервированные имена файлов 'con', 'prn', 'aux', 'nul', 'com1'..'com9', 'lpt1'..'lpt9' ОС MS Windows теперь специальным образом декорируются. Также декорируются пути, длина которых превышает 120 символов (байт?), путем фиксации длины (обрезанием части пути) и добавления SHA1 хэша от оригинального имени.

Вспомним что с подобными проблемами некоторых ОС разработчики Mercurial ранее сталкивались. Только с переходом к версии 0.9.4 Mercurial смог одновременно хранить файлы и каталоги, имена которых различаются только регистром (что невозможно например в файловой системе FAT16/FAT32)!

Новый формат никоим образом не изменил протокол работы Mercurial через http[s] и bundle.

Но локально работать используя старую версию Mercurial (вплоть до 1.0.x) с репозиториями нового формата нельзя. Если Вы попробуете, то получите предупреждение:

abort: requirement 'fncache' not supported!
Эта проверка реализована посредством просмотра содержимого файла "requires":
$ cat repo/.hg/requires revlogv1 store fncache
Ключевое слово "fncache" говорит о необходимости поддержки нового формата утилитой hg.

Если у Вас имеется репозиторий нового формата, но приходится работать с CMS старой версии - можно конвертировать репозиторий в старый формат (правда при этом используя новую версию Mercurial, начиная с 1.1):

$ hg --config format.usefncache=0 clone --pull fncache-repo non-fncache-repo
Использование по умолчанию формата fncache репозиториев может быть отключено в hgrc(5):
[format] usefncache = False
или опцией командной строки "--config format.usefncache=0".

Одной из причин использования мною репозиториев старого формата - наличие в релизе Debian Lenny только версии Mercurial 1.0.1 (когда в Windows я использую версию 1.3.1).

За подробной информацией обращайтесь сюда http://mercurial.selenic.com/wiki/fncacheRepoFormat