ртутный:как синхронизировать патчи mq из главного репозитория как патчи mq с набором репозиториев клонов

StackOverflow https://stackoverflow.com/questions/2629056

  •  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 директории

Вот шаги (некоторые могут быть необязательными):

  1. один раз:поместите патчи в главный репозиторий с управлением версиями с помощью mercurial:
    а. hg -R master init --mq #здесь никаких коммитов не произошло, можно сделать позже
    б. hg -R master commit --mq --addremove --message 'initial patch queue' #сделать их видимыми для репозиториев клонов

  2. для каждого клона, один раз после завершения создания клона:предполагая, что для клонов еще не созданы патчи, инициализируйте подрепозиторий mq:
    а. hg clone master\.hg\patches clone-x\.hg\patches
    б. hg -R clone-x qselect ready_for_testing

  3. для каждого изменения, готового в мастере (патч, созданный/импортированный в репозиторий mq):сделайте это перед запуском тестов для него:
    а.просмотр/обновление патчей mq:включенные для тестирования должны быть незащищенными или иметь +ready_for_testing
    б. hg -R master commit --mq -A #сделать их видимыми для репозиториев клонов

  4. для каждого клона, для каждой [тестовой] итерации для каждого клона:выполните следующую подготовительную последовательность перед запуском фактического теста:
    а. 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

Это нормально, чтобы иметь очередные патчи, когда вы выпустите эту команду.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top