Mercurial Queue特定命令是否与具有--mq参数的Mercurial命令等效?

时间:2011-02-11 15:59:55

标签: mercurial mercurial-queue

我正在尝试学习Mercurial Queues,我很困惑,因为有一堆“hg q *”命令以及许多带有“--mq”参数的普通hg命令。我认为--mq参数是为了替换一些q *命令,但我不确定。似乎没有关于(新的?)首选方法的教程或文档。

2 个答案:

答案 0 :(得分:4)

--mq选项会影响将存储库作为参数的所有命令 - 它实际上将目标repo更改为$(hg root)/.hg/patches,因此它实际上与运行任何mercurial命令相同:< / p>

hg --repository $(hg root)/.hg/patches ....

结果,每个具有-R/--repository选项的命令都有一个--mq选项,并且不需要修改它以获得一个。您之前在mercurial中使用的任何命令:commit,push,pull,summary,id等都可以--mq。这是相关的python代码:

def mqcommand(orig, ui, repo, *args, **kwargs):
    """Add --mq option to operate on patch repository instead of main"""

    # some commands do not like getting unknown options
    mq = kwargs.pop('mq', None)

    if not mq:
        return orig(ui, repo, *args, **kwargs)

    q = repo.mq
    r = q.qrepo()
    if not r:
        raise util.Abort(_('no queue repository'))
    return orig(r.ui, r, *args, **kwargs)

答案 1 :(得分:1)

--mq标记不必要的命令已被标记为已弃用,以便它们从hg help mq中消失。这就是qcommitqinit不再出现的原因。

如果您感到好奇,仍然可以hg qcommit查看该命令的帮助。

就个人而言,我不喜欢--mq标志。相反,我使用shell别名:

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

然后我可以执行mq statusmq commitmq push等。我发现hgmq命令名称之间的区别与我想到了这些行动。请注意,这个简单的别名不会考虑多个队列,所以如果你使用hg qqueue,那么你将不得不延长它。