Я конвертирую большой (около 9000 наборов изменений) репозиторий Subversion в Mercurial. Он связан с системой отслеживания ошибок Trac, поэтому в журналах фиксации есть много перекрестных ссылок на другие идентификаторы ревизий, а также номера заявок.
Я пытаюсь hgsubversion и конвертировать расширение. Кажется, что оба хорошо работают с нашим репозиторием, но идентификаторы ревизий, указанные в журналах фиксации, не конвертируются.
(Часть Trac довольно проста - мы можем просто отсканировать базу данных и преобразовать все вхождения ссылки на идентификатор редакции.)
Итак, я изменил исходный код расширения для преобразования следующим образом:
(mercurial_sink
класс в hg.py)
def _rewritedesc(self, desc, source, revmap):
# Only for subversion source.
# We assume that no future revision is mentioned in commit logs.
rx_revision = re.compile(r'(r(\d+)|\[(\d+)\])') # it's actually defined in module header.
def replacer(m):
if m is None:
return m.group(0)
new_revid = revmap.get(source.source.revid(m.group(2) or m.group(3)))
print 'converting commit log : %s -> [%s]' % (m.group(0), new_revid)
if new_revid is None:
return m.group(0)
return '[%s]' % new_revid[:12]
return rx_revision.sub(replacer, desc)
def putcommit(self, files, copies, parents, commit, source, revmap):
...
text = self._rewritedesc(commit.desc, source, revmap)
...
Кажется, это работает, но проблема в том, что процесс преобразования не сканирует наборы изменений в порядке их фиксации. Есть много пропущенных результатов конверсии.
На самом деле, расширение для преобразования предоставляет несколько вариантов сортировки, включая «исходную сортировку», которая обрабатывает наборы изменений в порядке фиксации, но поддерживается только для ртутных источников. «Сортировка дат», похоже, работает лучше, чем «Сортировка филиалов», но не так хорошо, как я хочу.
Я выяснил, могу ли я изменить журналы фиксации после завершения процесса преобразования (в то время у нас была полная карта идентификаторов ревизий, сгенерированная расширением), но это невозможно - существуют известные хаки, использующие расширение mq и histedit, но изменяет идентификатор повторной регистрации.
Есть ли люди, которые пытались сделать это или помочь мне?