Как поменять Mercurial Queues в репозитории и обратно - PullRequest
9 голосов
/ 09 июня 2009

У меня есть репозиторий ртутного кода с нейтральной платформой под названием "Симулятор"

и хотите применить исправления, которые нацелены на оптимизацию конкретной платформы перед сборкой.

Согласно руководству, мы можем сделать это с помощью патчей с защитой.

  • Windows Experimental.patch + windows
  • Unix Experimental.patch + unix
  • Mac Experimental.patch + mac

Однако он начинает становиться громоздким, потому что наша очередь исправлений содержит более 100 патчей, названных как windows-memory-оптимизация.patch + windows, unix-memory-оптимизация.patch + unix, windows-io-экспериментальный-bug-fix.patch + окна и т. д. и т. д. Мы организовали его как группы в файле серии, но файл становится огромным, а использование qseries / qapplied становится неуправляемым

Вместо этого мы хотели бы иметь очередь для Windows, Unix и Mac.

Так что патчи могут быть организованы как:

  • Стек исправлений Windows: memory-opt.patch, io-opt.patch и т. Д.
  • Стек исправлений Unix: disk.patch, graphics.patch и т. Д.
  • Пакет исправлений Mac: io-fix.patch, io-opt.patch, экспериментальный. Патч и т. Д.

Затем поменяйте местами патчи для каждой платформы в репозитории симулятора и из него. Так что я могу работать со стеком патчей Windows, извлекать / выгружать различные патчи оптимизации подсистем и работать с ними независимо от стеков патчей unix или mac.

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

Есть ли способ, кроме ручного копирования каталога .hg / patches в репо и из него, выполнить "обмен" стеками патчей?

Ответы [ 3 ]

17 голосов
/ 09 июня 2009

Интересное использование Mercurial Queues:)

Я предполагаю, что вы уже где-то управляете своими ртутными очередями. Если вы не / для тех, кто не знает, как это сделать, взгляните на соответствующий раздел hgbook : это отличный способ для постепенного сотрудничества / сохранения вашей работы без применения исправлений .

Три названные ветви

В вашем хранилище MQ должна быть возможность поддерживать три различных именованных ветви , по одной для каждой платформы.

Чтобы переключить платформу, просто переключите активную ветвь.

alias mq='hg -R $(hg root)/.hg/patches')

Сначала создайте ветку Windows:

$ mq branch windows
marked working directory as branch windows

создано, но еще не зафиксировано.

Делать некоторые вещи, добавлять патчи:

$ hg qnew windowspatch
... do some stuff

Обновление, вставка и фиксация:

$ hg qref
$ hg qpop -a
$ mq ci -m 'new windows branch'

Теперь у вас есть ветвь по умолчанию и новая ветвь windows:

$ mq branches
windows                       65:5fd4ef0b96c9
default                       64:06c1a56a3c08 (inactive)

Теперь создайте ветку Unix.

Сначала переключитесь на базовую ветку по умолчанию:

$ mq up default
1 files updated, 0 files merged, 1 files removed, 0 files unresolved

Создайте новую ветку Unix и добавьте патч для Unix:

$ mq branch unix
marked working directory as branch unix
$ hg qnew unixpatch
... blahblah
$ hg qref
$ hg qpop -a
$ mq ci -m 'adding unix branch'
$ mq branches
unix                          66:c51bb2c7b413
windows                       65:5fd4ef0b96c9
default                       64:06c1a56a3c08 (inactive)

Использование

Не забудьте qpop -a перед работой с репозиториями mq ...

Нажмите все патчи Windows

$ mq up windows
xx files updated, yy files merged, zz files removed, ww files unresolved
$ hg qpush -a

Три физических репо

Поддержание трех отдельных ветвей (ртутной очереди) может показаться немного пугающим. Если это так, вы можете просто использовать три разных MQ-репозитория: по одному для каждой платформы, каждый из которых имеет свои версии в разных местах.

Например:

$ cd mqs
$ hg qclone mq-windows windows
$ hg qclone mq-unix unix
$ hg qclone mq-mac mac

Для работы на разных платформах просто переключайте папки (репо). Концепция похожа на первый подход. Но вместо трех внутренних веток в одном MQ-репо вы используете три отдельных MQ-репо.

5 голосов
/ 21 ноября 2010

Я знаю, что этот вопрос старый, но, возможно, кому-то будет интересно узнать, что есть другое решение. Я думаю, что это было невозможно в то время, когда был задан вопрос, но здесь есть больше информации относительно этой ситуации: Несколько очередей исправлений на MQ

5 голосов
/ 05 сентября 2009

Чтобы сделать эквивалентный псевдоним Windows для «mq», создайте пакетный файл в том же каталоге, что и «hg.exe» (например, «C: \ Program Files \ TortoiseHg»), назовите его «mq.cmd», и вставьте этот код:

@echo off
FOR /F "tokens=1 delims=" %%A in ('hg root') do SET hgRoot=%%A
hg -R %hgRoot%/.hg/patches %1 %2 %3 %4 %5 %6 %7 %8 %9
...