【问题标题】:How to get revision number from Mercurial server only by date?如何仅按日期从 Mercurial 服务器获取修订号?
【发布时间】:2013-01-11 22:54:44
【问题描述】:

我对 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}')

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

【问题讨论】:

    标签: python mercurial


    【解决方案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 时才有效。恐怕,任何〜都不是存储库的地方

    【讨论】:

    【解决方案2】:

    更好的解决方法是更改​​您的 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-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      相关资源
      最近更新 更多