我写了以下脚本:
#!/usr/bin/python
import os
os.system('hg tags > tags.txt')
file = 'tags.txt'
path = os.path.join(os.getcwd(), file)
fp = open(path)
for i, line in enumerate(fp):
if i == 1:
latestTagLine = line`
elif i == 2:
previousTagLine = line
elif i > 4:
break
fp.close()
revLatestTag = latestTagLine.split(':')
l = revLatestTag[0].split(' ')
revPreviousTag = previousTagLine.split(':')
p = revPreviousTag[0].split(' ')
command = 'hg log -r {}:{} > diff.txt'.format(l[-1],p[-1])
os.system(command)
有没有什么方法可以不必解析“hg tags”命令的输出来获得修订号?在
有什么Python式的方法吗?在
“hg tags”命令的o/p:
提示523:e317b6828206
工具1.4 522:5bb1197f2e36
工具_1.3 515:7362cEffe40
工具1.1 406:33379f244971
正如我之前在回答中所说的,在玩Mercurial revsets are your friend时。也就是说,revset文档中并没有包含您想要的内容,而是在log命令的帮助中提到了这一点。在
在您的代码中,您似乎想要一个
diff
的“最新”两个标记之间发生了什么变化,下面的内容应该可以为您完成这项工作:我知道您使用的是Python,但是上面的命令将完成繁重的工作,并且您的Python代码可以专注于不那么低级的任务。最重要的部分是引号中的一点,我会解释的。在
tagged()
是所有已标记修订的列表-它应该引用与hg tags
相同的修订,但是它只列出每个修订一次,而{last(set,[n])
过滤集合(在本例中是标记集)以显示最后的n
项(如果省略,n
为1)。在其结果是一个revset,其中包含最后两个标记的更改,在上面的示例中,我们将其传递到
hg diff
。在更新:好的,我被Python中的
^{pr2}$diff
抛出了。再次阅读时,看起来您基本上想要最后两个标记之间的log
输出?使用revset这会变得更加复杂,但是使用上面的知识,您可以创建一个revset,如下所示:我们有效地挑选了最后两个标签和最后一个标签(!!)并在它们之间执行包含所有集合的日志。
log
输出可以用template
调整,正如lazybacker在他的回答中所显示的那样。{{a3}你可以去寻找更简单的信息。在hg log -r
中revset的标识符,您可以使用任何标识,它唯一地标识变更集-标记名是可以的与
登录窗体
^{pr2}$将找到正确的变更集,如您所见
一步一步
所有标记:
hg log -r "tag()"
最新标记:
hg log -r "last(tag())"
倒数第二个标记:})
hg log -r "first(last(tag(),2)))"
(在某些情况下,可能是min()
而不是{最终命令变成
hg log -r "((first(last(tag(),2))):(last(tag())))"
用于测试hgsubversion存储库抛光版的日志
产生这样的输出(跳过中等噪音)
修复:对于多余的括号和缺少的引号
相关问题 更多 >
编程相关推荐