我写了以下脚本:
#!/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”命令的输出来获取修订号?
有没有pythonic方式来做到这一点?
o / p“hg tags”命令:
提示523:e317b6828206
TOOL_1.4 522:5bb1197f2e36
TOOL_1.3 515:7362c0effe40
TOOL_1.1 406:33379f244971
答案 0 :(得分:2)
正如我之前在答案中所说,在玩Mercurial revsets are your friend时。也就是说,你想要的内容似乎没有被revset文档所涵盖,但在log命令的帮助中提到了。
在您的代码中,您似乎想要diff
“最新”两个标记之间的更改,以下内容应该为您完成这项工作:
hg diff -r "last(tagged(),2)"
我意识到你正在使用Python,但上面的命令将完成繁琐的工作,而你的Python代码可以专注于较少的琐碎任务。重要的部分是引号中的位,我将解释。
tagged()
是已标记的所有修订的列表 - 它应引用与hg tags
相同的修订版,但它只列出每个修订版一次,而hg tags
将显示多个修订版单一修订的标签,如果是这种情况。
last(set,[n])
过滤集合(在本例中为标记集合)以显示最后n
个项目(n
如果省略则为1)。
结果是包含最后两个标记更改的revset,在上面的示例中我们将其传递到hg diff
。
更新:好的,我被Python中的diff
抛出了。在再次阅读时,看起来你基本上想要最后两个标签之间的log
输出?使用revsets会变得有点复杂,但使用上述知识可以创建一个类似的revset:
hg log -r "last(tagged(),2):last(tagged())"
我们正在有效地选择最后两个标签,以及最后一个标签(!!)并在它们之间执行所有包含集的日志。正如LazyBadger在答案中所示,log
输出可以使用--template
进行调整。我会选择一个简单的--template "{node}\t{tags}\n"
,但请查看here以获取有关您可以获得的乐趣的更多信息。
答案 1 :(得分:1)
hg log -r
中的revset标识符,您可以使用任何标识,该标识唯一标识变更集 - 标记名称正常使用
>hg tags
tip 1126:cb4dccc90ff1
1.6 1104:7d47a0f73135
...
登录表单
>hg log -r "1.6"
changeset: 1104:7d47a0f73135
tag: 1.6
...
会找到正确的变更集,如您所见
步骤一步
所有代码:hg log -r "tag()"
最新标记:hg log -r "last(tag())"
倒数第二个标签:hg log -r "first(last(tag(),2)))"
(在某些情况下可能min()
而不是first()
)
最终命令变为
hg log -r "((first(last(tag(),2))):(last(tag())))"
用于测试hgsubversion存储库抛光版本的日志
hg log -r "((first(last(tag(),2))):(last(tag())))" --template "changeset: {node|short}\n{if(tags, 'Tag: {tags}\n')}\n"
产生了这样的输出(跳过中间噪声)
changeset: d0f3a5c2cb56
Tag: 1.5.1
changeset: b5b1fce26f1f
...
changeset: 6e1dbf6cbc92
changeset: 7d47a0f73135
Tag: 1.6
FIX:用于冗余括号和缺少引号
hg log -r "first(last(tag(),2)):last(tag())" ...