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 каталоги

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

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

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

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

  4. для каждого клона, для каждой итерации [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

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

Другие вопросы по тегам