mercurial:如何将主存储库中的mq补丁作为mq补丁同步到一组克隆存储库

时间:2010-04-13 11:25:00

标签: mercurial mercurial-queue

我必须在mercurial存储库中维护的代码库上运行十几个不同的构建测试。我不想在同一个存储库上连续运行这些测试,因为它们修改了一组公共文件,我想在不同的机器上并行运行它们。此外,在运行所有测试后,我希望能够访问这些测试工作区域的最新测试结果。目前我正在克隆主存储库十几次,并在每个克隆中运行一个不同的测试。在每次测试执行之前,我会执行拉/更新/清除准备序列,以便在最新的清洁状态下开始测试。这对我有好处。

我也正在准备使用mq扩展的新更改,我将在提交它们之前对所有克隆进行测试。为了测试一些准备好的候选mq补丁,我想以某种方式部署/同步它们以便在测试克隆中可用,并在运行测试之前使用一些防护应用那些准备进行测试。

之前有人做过同步吗?最简单的方法是什么?我需要有版本化的mq补丁吗?

3 个答案:

答案 0 :(得分:7)

如果您将“-c”开关传递给qinit,可以在自己的存储库中维护补丁

hg qinit -c

您可能仍然可以通过

创建补丁回购
cd .hg/patches
hg init
hg addremove
hg commit -m "my patches"

但我个人从未尝试过。

然后.hg / patches可以像任何其他mercurial存储库一样对待。所以我认为你可能会推出一些shell脚本。进入克隆回购的.hg目录并做一个

hg clone http://centralrepo.com/patch_repo ./patches

答案 1 :(得分:2)

这是我实施的解决方案。几个笔记:

  • 所有使用ready_for_testing保护的补丁和那些无人看守的补丁都会用于测试。
  • 使用版本化的repos更好,因为我们可以对队列存储库实现进行抽象
  • 我使用mercurial 1.5.1
  • 主仓库位于master dir
  • clone repos位于clone-x dirs

以下是步骤(有些可能是可选的):

  1. 一次:使用mercurial在版本控制下将补丁放入主存储库中:
    一个。 hg -R master init --mq #no commit在这里发生,可以在以后完成 湾hg -R master commit --mq --addremove --message 'initial patch queue'#使克隆repos可见

  2. 对于每个克隆,克隆创建完成后:假设克隆上尚未创建补丁,请初始化mq子存储库:
    一个。 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#使克隆repos可见

  4. 对于每个克隆,对于每个克隆的每个[测试]迭代:在运行实际测试之前执行此准备序列:
    一个。 hg -R clone-x qpop --all --force
    hg -R clone-x pull
    C。 hg -R clone-x update --clean
    d。 hg -R clone-x purge --all
    hg -R clone-x pull --mq
    F。 hg -R clone-x update --mq
    G。 hg -R clone-x qpush --all

答案 2 :(得分:1)

从Mercurial 1.5版开始,您可以使用以下命令在现有的Mercurial仓库中创建补丁队列存储库:

hg init --mq

发出该命令时排队补丁是可以的。