mercurial: как синхронизировать патчи mq из основного репозитория как патчи mq с набором репозиториев клонов
Мне нужно выполнить дюжину различных тестов сборки на базе кода, поддерживаемой в ртутном репозитории. Я не хочу запускать эти тесты последовательно в одном и том же хранилище, потому что они изменяют набор общих файлов, и я хочу запускать их параллельно на разных машинах. Кроме того, после запуска всех тестов я хочу получить доступ к последним результатам тестов из этих областей тестирования. В настоящее время я клонирую главный репозиторий десятки раз и запускаю в каждом клоне один отдельный тест. Перед каждым выполнением теста я выполняю последовательность подготовки к извлечению / обновлению / продувке, чтобы начать тестирование в последнем чистом состоянии. Это хорошо для меня.
Я также готовлю новые изменения с использованием расширения mq, которые я бы протестировал на всех клонах, как указано выше, перед их фиксацией. Для тестирования некоторых готовых потенциальных патчей mq я хочу как-то развернуть / синхронизировать их, чтобы они были доступны в тестовых клонах, и применить их, готовые к тестированию, используя некоторую защиту перед запуском теста.
Кто-нибудь делал эту синхронизацию раньше? Какой самый простой способ сделать это? Нужно ли иметь версионные патчи mq для этого?
3 ответа
Патчи могут храниться в их собственном репозитории, если вы передали ключ "-c" в qinit следующим образом
hg qinit -c
Вы все еще можете создать репо патча после того, как
cd .hg/patches
hg init
hg addremove
hg commit -m "my patches"
Но я никогда не пробовал это лично.
тогда.hg/patches можно рассматривать как любой другой ртутный репозиторий. поэтому я думаю, что вы могли бы, вероятно, запустить некоторые сценарии оболочки. попасть в.hg dir ваших клонированных репозиториев и сделать
hg clone http://centralrepo.com/patch_repo ./patches
Вот решение, которое я реализовал. Несколько заметок:
- все патчи, охраняемые с помощью ready_for_testing И те, что не защищены, применяются для тестирования.
- лучше использовать версионные репозитории, потому что мы можем сделать абстракцию реализации репозитория очереди
- Я использую Mercurial 1.5.1
- Мастер репо находится в
master
реж - репозитории клонов находятся в
clone-x
каталоги
Вот шаги (некоторые могут быть необязательными):
один раз: поместите патчи в главный репозиторий при управлении версиями с помощью mercurial:
а.hg -R master init --mq
# не происходит здесь, может быть сделано позже
б.hg -R master commit --mq --addremove --message 'initial patch queue'
# сделать их видимыми для клонирования репозиториевдля каждого клона, один раз после завершения создания клона: при условии, что для клонов еще не созданы патчи, инициализируйте mq sub-repository:
а.hg clone master\.hg\patches clone-x\.hg\patches
б.hg -R clone-x qselect ready_for_testing
для каждого изменения, готового в master (патч, созданный / импортированный в mq repo): сделайте это перед запуском для него тестов
а. просмотр / обновление охранников mq-патчей: включенные для тестирования должны быть неохраняемыми или с +ready_for_testing
б.hg -R master commit --mq -A
# сделать их видимыми для клонирования репозиториевдля каждого клона, для каждой итерации [test] для каждого клона: выполните эту последовательность подготовки перед запуском фактического теста:
а.hg -R clone-x qpop --all --force
б.hg -R clone-x pull
с.hg -R clone-x update --clean
д.hg -R clone-x purge --all
е.hg -R clone-x pull --mq
е.hg -R clone-x update --mq
г.hg -R clone-x qpush --all
Начиная с версии Mercurial 1.5, вы можете создать хранилище очереди исправлений в уже существующем репозитории Mercurial, используя следующую команду:
hg init --mq
Это нормально, чтобы патчи были в очереди при вводе этой команды.