Python 如何仅按日期从Mercurial服务器获取修订号?
我不太熟悉Python和Django。 我们使用Jenkins作为持续集成的服务器。但是,当Jenkins克隆存储库时,一些修订被复制(这是一个自动过程)。 当我们需要为测试/生产目的构建一个包时,我们必须使用与可以在Mercurial server(存储库)上检查的版本号完全相同的版本号来标记它。 我们使用布料。 我尝试在一个脚本中结合Fabric和Python(Python的Paramiko将用于连接第三方Mercurial服务器并获得正确的修订号)。 该修订版取自Jenkins在本地服务器上制作的包,作为上次提交的日期。很简单:Python 如何仅按日期从Mercurial服务器获取修订号?,python,mercurial,Python,Mercurial,我不太熟悉Python和Django。 我们使用Jenkins作为持续集成的服务器。但是,当Jenkins克隆存储库时,一些修订被复制(这是一个自动过程)。 当我们需要为测试/生产目的构建一个包时,我们必须使用与可以在Mercurial server(存储库)上检查的版本号完全相同的版本号来标记它。 我们使用布料。 我尝试在一个脚本中结合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}')
…但没有预期的结果。只是肮脏的想法:
- 如果您在日志中获得正确的使用日期,并以正确的格式提供这些日期(请参阅hg help dates)(顺便说一句,对于单个日志记录来说,不仅仅是“
- 我只看到我的工作命令和您的in“chars using and escaping.JFYI,tested(在Win端,在cmdshell中)命令之间有很小的差异
hg日志-l 1--日期“2011年10月30日星期日10:16:00+0600至2012年5月27日星期日19:55:34+0600”--模板“{rev}”
38
(日期是从日志输出“按原样”抓取的,可能模板中的尾随\n也会玩游戏-我现在想有麻烦了)
注意:
任何不带-R的hg命令只有在$PWD是mercurial repo时才有效。恐怕any~不是存储库的位置更好的解决方法是更改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存储库中获取克隆/拉取之外的任何东西都不值得这么复杂。这个问题:让我明白了。如果没有更好地搜索知识,我会被这个问题搞得一团糟…;-)