我不太熟悉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}')
......但没有预期的结果。
答案 0 :(得分:1)
只是肮脏的想法:
hg help dates
)(顺便说一下,对于单日志记录不仅仅是“
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之外的任何东西很少值得复杂。