How to swap Mercurial Queues in and out of a repository

余生长醉 提交于 2019-12-02 21:07:29

Interesting use of Mercurial Queues :)

I assume here that you are already versioning your mercurial queues somewhere. If you don't/for those that don't know how to do this, have a look at the relevant section from the hgbook: it's a great way to collaborate/save incrementally your work without applying the patches.

Three named branches

It should be possible to maintain three different named branches, one for each platform, in your MQ repository.

To switch platform, just switch the active branch.

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

First create a windows branch:

$ mq branch windows
marked working directory as branch windows

created, but not yet committed.

Do some stuff, add patches:

$ hg qnew windowspatch
... do some stuff

Refresh, pop and commit:

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

You now have the default branch and the new windows branch:

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

Now create an Unix branch.

First switch back to the base default branch:

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

Create a new unix branch and add a unix-specific patch:

$ 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)

Usage

Don't forget to qpop -a before operating on the mq repos...

Push all the windows patches

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

Three physical repos

Maintaining three separate (mercurial queue) branches can look a bit scary. If so, you can just use three different MQ repositories: one for each platform, each of them versioned in a different place.

For example :

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

To work on different platforms, just switch folders (repos). The concept is similar to the first approach. But instead of having three internal branches in one MQ repo, you use three separate MQ repos.

To make an equivalent Windows alias for "mq", create a batch file in the same directory as "hg.exe" (e.g., "C:\Program Files\TortoiseHg"), name it "mq.cmd", and paste this code:

@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

I know this question is old, but may be someone could be interested to know there's another solution. I think this wasn't possible at the time the question got asked, but here it is more info regarding this situation: Multiple Patch Queues on MQ

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!