Переименование тегов при конвертации хранилища Mercurial - PullRequest
3 голосов
/ 23 октября 2011

У меня есть репозиторий Mercurial, и я хочу только подмножество его содержимого в новом репозитории Mercurial.Я знаю, как это сделать с помощью Преобразовать расширение с файлом карты файлов.

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

Я знаю, что могу просто исключить .hgtags, а затем добавить все теги вручную или как переименовать теги , но я на самом деленравится сохранять оригинальные даты и ревизии тегов, чтобы преобразованный репозиторий выглядел «подлинным»

Есть идеи, как это сделать?Я тоже не против написать немного кода на Python.

1 Ответ

3 голосов
/ 10 декабря 2011

Эта функция сегодня не существует, как вы узнали. Написание этого будет забавным небольшим упражнением :-) Вы должны начать с источника для приемника hg и изменить функцию _rewritetags . Он анализирует data (содержимое файла .hgtags для набора изменений, который в настоящее время преобразуется) и перезаписывает хэши наборов изменений в соответствии с новыми хэшами.

Это ваша возможность переписать или исключить теги! Я изменил файл так, чтобы исключить теги ниже версии 2.0 и слегка переписать их:

def _rewritetags(self, source, revmap, data):
    def keep(tag):
        try:
            version = map(int, tag.split('.'))
            return version >= [2, 0]
        except ValueError:
            return False

    def rename(tag):
        return tag + "-partial"

    fp = cStringIO.StringIO()
    for line in data.splitlines():
        s = line.split(' ', 1)
        if len(s) != 2:
            continue
        if not keep(s[1]):
            continue
        revid = revmap.get(source.lookuprev(s[0]))
        if not revid:
            continue
        fp.write('%s %s\n' % (revid, rename(s[1])))
    return fp.getvalue()

Для тестирования я также безоговорочно меняю self.filemapmode на True. В противном случае convert не обнаружит и не отфильтрует пустые коммиты. Поскольку вы уже используете карту файлов, с вами все будет в порядке.

Наконец, удалите дополнительный набор изменений "теги обновления", добавленный convert, и вы снова получите хорошую историю.

...