我有一个名为“模拟器”的平台中立的mercurial代码仓库
并希望在构建之前应用针对特定平台优化的修补程序。
根据指南,我们可以通过使用带防护装置的补丁来实现这一目标。
然而它开始变得麻烦,因为我们的补丁队列包含100多个名为windows-memory-optimization.patch + windows的补丁,unix-memory-optimization.patch + unix,windows-io-experimental-bug-fix.patch + windows等等我们把它组织成系列文件中的组,但文件变得越来越大,使用qseries / qapplied变得无法管理
相反,我们希望有一个windows,unix和mac的队列。
因此补丁可以组织为:
然后将每个平台的补丁堆栈交换进出模拟器仓库。这样我就可以在Windows补丁堆栈上工作并弹出/推送各种子系统优化补丁,并独立于unix或mac补丁堆栈来处理它们。
看起来我不能这样做,除了为每个平台制作3个不同的repos并以这种方式维护补丁堆栈。
除了手动复制.hg / patches目录进出repo之外,还有办法实现“交换”补丁堆栈吗?
答案 0 :(得分:17)
有趣地使用Mercurial队列:)
我在这里假设你已经在某个地方对你的mercurial队列进行了版本控制。如果你没有/那些不知道如何做的人,请看看the relevant section from the hgbook:这是一种很好的方式,可以在不应用补丁的情况下逐步协作/保存你的工作。
应该可以在MQ存储库中为每个平台维护三个不同的named branches。
要切换平台,只需切换活动分支。
(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)
在操作mq repos之前不要忘记qpop -a
...
推送所有Windows补丁
$ mq up windows
xx files updated, yy files merged, zz files removed, ww files unresolved
$ hg qpush -a
维护三个独立的(mercurial队列)分支看起来有点可怕。如果是这样,您可以使用三个不同的MQ存储库:每个平台一个,每个平台在不同的位置进行版本化。
例如:
$ cd mqs
$ hg qclone mq-windows windows
$ hg qclone mq-unix unix
$ hg qclone mq-mac mac
要在不同平台上工作,只需切换文件夹(repos)即可。这个概念与第一种方法类似。但是,不是在一个MQ repo中有三个内部分支,而是使用三个单独的MQ repos。
答案 1 :(得分:5)
要为“mq”创建等效的Windows别名,请在与“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
答案 2 :(得分:5)
我知道这个问题很老,但可能有人可能有兴趣知道还有另一个解决方案。我认为在提出这个问题时这是不可能的,但是这里有关于这种情况的更多信息:Multiple Patch Queues on MQ