如何仅按日期从Mercurial服务器获取修订号?

时间:2013-01-11 13:23:52

标签: python mercurial

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

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

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

2 个答案:

答案 0 :(得分:1)

只是肮脏的想法:

  • 如果您在日志中使用正确的日期并以正确的格式提供它们(请参阅hg help dates)(顺便说一下,对于单日志记录不仅仅是“
  • 我只看到我的工作命令和你的“chars using and escaping”中的小dfference.JFYI,测试(在Win-side,在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时才会起作用。我担心,任何〜都不是存储库的地方

答案 1 :(得分:0)

更好的解决方法是改变你的Jenkins克隆以获得一切。你说:

  

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

让Jenkins克隆一切 - 只需要很长时间一次,然后将jenkins逻辑设为:

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

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