Рекурсивно пометить все суб-репозитории с помощью Mercurial - PullRequest
6 голосов
/ 27 июня 2011

Можно ли пометить основной родительский репозиторий и добавить ли этот тег также во все вложенные хранилища?

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

1 Ответ

2 голосов
/ 27 июня 2011

Это возможно возможно, но немного сложно. Вы должны написать свою собственную утилиту tag (возможно, в качестве расширения Mercurial), чтобы помочь собрать необходимую информацию и выполнить дополнительные вызовы к hg tag. Однако я не очень разбираюсь в API при написании расширения, поэтому любые идеи, которые я предлагаю, будут основаны на непосредственном вызове hg с помощью команд.

По умолчанию, когда вы фиксируете в главном репозитории, суб-репозитории фиксируются первыми. Затем он берет новый идентификатор набора изменений для каждого вложенного отчета и помещает их в файл .hgsubstate в формате, подобном следующему:

77ba00000fe8e9ca033d97dc07b85a50dd106837 nested

Рекурсивное тегирование должно было бы получить содержимое файла .hgsubstate, как это было в наборе изменений, который вы тегируете в основном репозитории. Вы можете подумать о hg revert, но это было бы плохой идеей, поскольку это могло бы легко испортить ваш рабочий каталог (hg не нравится делать это на .hgsubstate в любом случае). Лучше всего для этого сделать hg export для этой ревизии и проанализировать полученный дифференциал для строк + в файле .hgsubstate.

Тогда вы бы взяли идентификатор набора и имя подотчета у каждого из них, чтобы вызвать hg -R <subrepopath> tag -r <id> <tag>. И, конечно же, наконец, отметьте основной репо.

Есть все еще потенциальные проблемы с этим, вещи, о которых вы должны будете знать или понять, как жить. Например: что произойдет, если вы совершите сделку с основным репо, но не с одним или несколькими подпунктами? Теперь у вас есть несколько наборов изменений в главном репо, где .hgsubstate перечисляет один и тот же идентификатор набора изменений в этом репо. Таким образом, если вы пометите оба в основном репо, у набора изменений в подпредставлении будет 2 тега.

Я использую TortoisHg 2.0.5 с Mercurial 1.8.4. Пометка субпозиториев сама по себе не вызывает необходимости фиксации в основном репо, в основном она должна работать нормально.

...