Извлечь дату фиксации из пакета Mercurial - PullRequest
1 голос
/ 04 декабря 2011

В двух словах:

В каком формате находятся пакеты Mercurial?Как извлечь информацию о дате фиксации?

Вся история:

Я начал использовать HgSubversion .Это расширение Mercurial позволяет вам работать с репозиторием Mercurial и выдвигать и извлекать из Subversion.

Вчера я отодвинул за два месяца изменения в Subversion.Два сюрприза:

  • Для hg push понадобилось около двух часов для 200 коммитов.
  • Исходная дата hg commit потеряна и заменена на дату hg push.

Я нашел объяснение медлительности push в списке рассылки .Хорошо, я могу легко адаптироваться к этому: давить рано, часто нажимать.Вам просто нужно знать , что вы должны сделать это.

Я разочарован потерянной первоначальной датой коммита.Я вижу, что замена даты, принятая HgSubversion, имеет смысл для большинства сценариев.Однако для моего сценария это не имеет смысла.

К счастью, исходная дата фиксации содержится в файлах резервного копирования .Эти файлы находятся в .hg/strip-backup/;кажется, они называются связками .(Они создаются, когда при нажатии на Subversion поддеревья повторно удаляются из дерева для повторного присоединения после того, как коммит SVN, созданный hg push, возвращается в Mercurial. См. Ссылку «медлительность» выше и найдите на странице Патрика.Комментарии Mézards.) Я мог бы извлечь дату из пакета, а затем сбросить svn:date в Subversion .

Но как я могу получить доступ к информации, содержащейся в пакете?Это не похоже на известный формат сжатия.

$ mkdir bundle
$ cd bundle
$ cp ~/RepoHgSvn/.hg/strip-backup/ecbe9ff1cf0b-backup.hg .
$ file ecbe9ff1cf0b-backup.hg
ecbe9ff1cf0b-backup.hg: Mercurial changeset bundle (bzip2 compressed)
# Okay then ...
$ bzip2 -d ecbe9ff1cf0b-backup.hg
bzip2: Can't guess original name for ecbe9ff1cf0b-backup.hg
       -- using ecbe9ff1cf0b-backup.hg.out
bzip2: ecbe9ff1cf0b-backup.hg is not a bzip2 file.
# Okay, the file utility often goes wrong ...
$ mv ecbe9ff1cf0b-backup.hg ecb.bz2
$ bzip2 -d ecb.bz2
bzip2: ecb.bz2 is not a bzip2 file.
$ mv ecb.bz2 ecb.gz
$ gzip -d ecb.gz
gzip: ecb.gz: not in gzip format
$ mv ecb.gz ecb.zip
$ unzip ecb.zip
Archive:  ecb.zip
  End-of-central-directory signature not found.
$ 7z l ecb.zip
Error: ecb.zip: is not supported archive

В каком формате находится пакет и как можно извлечь информацию о дате фиксации?

1 Ответ

1 голос
/ 04 декабря 2011

Вы можете получить репозиторий со старыми ревизиями по

mkdir foo
cd foo
hg init
hg pull ~/RepoHgSvn
hg pull ~/RepoHgSvn/.hg/strip-backup/ecbe9ff1cf0b-backup.hg

, тогда у вас будет репо, где svn-ревизии соответствуют исходным ревизиям.

Но когда вы меняете даты фиксациив SVN необходимо повторить клонирование исходного репозитория SVN, так как метаданные SVN в репозитории, из которого вы выдвинули наборы изменений в Subversion, неверны после изменения свойства SVN (текущий клон SVN имеет все ревизии, установленные для их pushраз, и может оказаться невозможным повторно получить эти измененные ревизии).

...