4

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

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

以前有人做过这种同步吗?最简单的方法是什么?我需要为此提供版本化的 mq 补丁吗?

4

3 回答 3

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
于 2010-04-13T12:20:05.633 回答
2

这是我实施的解决方案。几点注意事项:

  • 使用 ready_for_testing 保护的所有补丁和未保护的补丁都将用于测试。
  • 使用版本化存储库更好,因为我们可以抽象队列存储库实现
  • 我使用水银 1.5.1
  • 主仓库在master目录 中
  • 克隆仓库在clone-x目录中

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

  1. 一次:使用 mercurial 在版本控制下将补丁放在主存储库中
    hg -R master init --mq #这里没有提交,可以稍后完成
    b. hg -R master commit --mq --addremove --message 'initial patch queue'#使它们对克隆存储库可见

  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
    b. hg -R master commit --mq -A#使它们对克隆存储库可见

  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
    e. hg -R clone-x pull --mq
    F。hg -R clone-x update --mq
    G。hg -R clone-x qpush --all

于 2010-04-13T15:19:52.053 回答
1

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

hg init --mq

当您发出该命令时,可以有排队的补丁程序。

于 2010-11-03T02:54:24.773 回答