0

我对 Python 和 Django 不是很熟悉。我们使用 Jenkins 作为持续集成的服务器。但是当 Jenkins 克隆存储库时,会省略一些修订(这是自动过程)。当我们需要为测试/生产目的构建一个包时,我们必须用与我们可以在 Mercurial 服务器(存储库)上检查的完全相同的修订号来标记它。我们使用织物。我尝试在一个脚本中结合 Fabric 和 Python(Python 的 Paramiko 将用于连接第三方 Mercurial 服务器并获取正确的修订号)。修订版取自 Jenkins 在本地服务器上制作的包,作为最后一次提交的日期。这很简单:

pipe = subprocess.Popen(
    ['hg', 'log', '-l', '1', '--template', '{date|isodatesec}', env.repo_dir],
    stdout=subprocess.PIPE,
)

但问题是从 Mercurial 服务器获取修订号。我试过了:

stdin, stdout, stderr = ssh_conn.execute('hg log -l 1 --date /"%s to %s/" --template {rev}')

...但没有预期的结果。

4

2 回答 2

1

只是肮脏的想法:

  • 如果您在日志中获得正确的使用日期并以正确的格式提供它们(请参阅hg help dates)(顺便说一句,单个日志记录不仅仅是“
  • 我只看到我的工作命令和你的 in " 字符使用和转义的小差异。JFYI,经过测试(在 Win 端,在 cmd-shell 中)命令

hg log -l 1 --date "Sun Oct 30 10:16:00 2011 +0600 to Sun May 27 19:55:34 2012 +0600" --template "{rev}"

38

(日期是“按原样”从日志输出中获取的,也许模板中的尾随 \n 也可以玩游戏 - 我现在正在考虑麻烦)

笔记:

任何没有 -R 的 hg 命令只有在 $PWD 是 mercurial repo 时才有效。恐怕,任何〜都不是存储库的地方

于 2013-01-11T14:26:21.913 回答
0

更好的解决方法是更改​​您的 Jenkins 克隆以获取所有内容。你说:

但是当 Jenkins 克隆存储库时,会省略一些修订(这是自动过程)。

让詹金斯克隆所有东西——只需要很长时间一次,然后让詹金斯逻辑类似于:

hg pull                   # get everything new
hg update XXXXXXXXXX      # update to the desired revision
./build VERSION=$(hg id)  # do a parameterized build

尝试从远程 mercurial 存储库中获取除了克隆/拉取之外的任何东西很少值得复杂。

于 2013-01-11T14:54:44.797 回答