我已经编写了以下脚本:
#!/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"命令的输出来获得修订号?
有什么蟒蛇的方法可以做到这一点吗?
"hg-tags"命令的o/p:
提示523:e317b6828206
工具_1.4 522:5bb1197f2e36
工具1.3 515:7362c0效果40
工具1.1 406:33379f244971
正如我之前在回答中所说,当玩Mercurial revsets时,你是朋友。也就是说,您想要的内容似乎不在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
输出?使用revset,这会变得有点复杂,但使用以上知识,你可以创建这样的revset:
hg log -r "last(tagged(),2):last(tagged())"
我们有效地挑选了最后两个标签和最后一个标签(!!),并对它们之间的全包集进行了日志记录。log
的输出可以通过--template
进行调整,正如LazyBadger在他的回答中所示。我会选择一个简单的--template "{node}t{tags}n"
,但请在这里查看更多关于你可以享受的乐趣的信息。
- 作为
hg log -r
中revset的标识符,您可以使用任何标识,该标识唯一标识变更集-标记名称可以
使用
>hg tags
tip 1126:cb4dccc90ff1
1.6 1104:7d47a0f73135
...
登录表单
>hg log -r "1.6"
changeset: 1104:7d47a0f73135
tag: 1.6
...
将找到正确的变更集,如您所见
- 使用revsets,您可以从生成的命令中完全消除变量
逐步
所有标签: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())" ...