ртутный:как синхронизировать патчи mq из главного репозитория как патчи mq с набором репозиториев клонов
-
26-09-2019 - |
Вопрос
Мне приходится запускать дюжину различных тестов сборки на основе кода, хранящегося в репозитории mercurial.Я не хочу последовательно запускать эти тесты в одном и том же репозитории, поскольку они изменяют набор общих файлов, и я хочу запускать их параллельно на разных машинах.Кроме того, после запуска всех тестов я хочу иметь доступ к последним результатам тестов из этих рабочих областей.В настоящее время я клонирую главный репозиторий дюжину раз и запускаю в каждом клоне один другой тест.Перед каждым выполнением теста я выполняю последовательность подготовки извлечения/обновления/очистки, чтобы запустить тест в последнем чистом состоянии.Это хорошо для меня.
Я также готовлю новые изменения, используя расширение mq, которые я буду тестировать на всех клонах, как указано выше, прежде чем их фиксировать.Для тестирования некоторых готовых патчей-кандидатов mq я хочу каким-то образом развернуть/синхронизировать их, чтобы они были доступны в тестовых клонах, и применить те, которые готовы к тестированию, с использованием некоторой защиты перед запуском теста.
Кто-нибудь делал такую синхронизацию раньше?Какой самый простой способ сделать это?Нужны ли мне для этого версии патчей mq?
Решение
Патчи могут поддерживаться в своем собственном репозитории при условии, что вы передали переключатель «-C» на QINIT, так
hg qinit -c
Вы все еще можете быть в состоянии создать патч репо после того, как этот факт
cd .hg/patches
hg init
hg addremove
hg commit -m "my patches"
Но я никогда не пробовал это лично.
Тогда .hg / patches можно обрабатывать как любой другой репозиторий Mercurial. Так что я думаю, что вы, вероятно, можете катить несколько сценариев оболочки. чтобы попасть в .hg dir из ваших клонированных REPOS и сделать
hg clone http://centralrepo.com/patch_repo ./patches
Другие советы
Вот решение, которое я реализовал.Несколько примечаний:
- все патчи, защищенные с помощью Ready_for_testing, И те, которые не защищены, применяются для тестирования.
- лучше использовать версионные репозитории, потому что мы можем абстрагировать реализацию репозитория очередей.
- Я использую Меркуриал 1.5.1
- основной репозиторий уже доступен
master
реж. - репозитории клонов находятся в
clone-x
директории
Вот шаги (некоторые могут быть необязательными):
один раз:поместите патчи в главный репозиторий с управлением версиями с помощью mercurial:
а.hg -R master init --mq
#здесь никаких коммитов не произошло, можно сделать позже
б.hg -R master commit --mq --addremove --message 'initial patch queue'
#сделать их видимыми для репозиториев клоновдля каждого клона, один раз после завершения создания клона:предполагая, что для клонов еще не созданы патчи, инициализируйте подрепозиторий mq:
а.hg clone master\.hg\patches clone-x\.hg\patches
б.hg -R clone-x qselect ready_for_testing
для каждого изменения, готового в мастере (патч, созданный/импортированный в репозиторий mq):сделайте это перед запуском тестов для него:
а.просмотр/обновление патчей mq:включенные для тестирования должны быть незащищенными или иметь +ready_for_testing
б.hg -R master commit --mq -A
#сделать их видимыми для репозиториев клоновдля каждого клона, для каждой [тестовой] итерации для каждого клона:выполните следующую подготовительную последовательность перед запуском фактического теста:
а.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, вы можете создать репозиторий в очередь патча в уже существующем reco Mercurial, используя следующую команду:
hg init --mq
Это нормально, чтобы иметь очередные патчи, когда вы выпустите эту команду.