如何使用python脚本提取mercurial中最后两个标记之间的变更集(或提交)?
我写了以下脚本:如何使用python脚本提取mercurial中最后两个标记之间的变更集(或提交)?,python,python-2.7,mercurial,dvcs,Python,Python 2.7,Mercurial,Dvcs,我写了以下脚本: #!/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:
#!/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标签”命令的o/p:
提示523:e317b6828206
工具1.4 522:5bb1197f2e36
工具_1.3 515:7362C040
TOOL_1.1 406:33379f244971,正如我在前面的回答中所说,在玩Mercurial时。也就是说,revset文档中似乎没有包含您想要的内容,但是在命令的帮助中提到了 在您的代码中,您似乎希望了解“最新”两个标记之间发生了什么变化,以下内容可以帮助您完成这项工作:
hg diff -r "last(tagged(),2)"
我意识到您正在使用Python,但是上面的命令将完成繁重的工作,并且您的Python代码可以专注于不那么琐碎的任务
taged()
是所有已标记修订的列表-它应该引用与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
进行调整,正如Lazybacker在他的回答中所示。我会选择一个简单的--template“{node}\t{tags}\n“
,但请查看有关您可以享受的乐趣的更多信息。正如我在前面的回答中所说,在玩Mercurial时。也就是说,revset文档似乎没有涵盖您想要的内容,但是在命令的帮助中提到了
在您的代码中,您似乎希望了解“最新”两个标记之间发生了什么变化,以下内容可以帮助您完成这项工作:
hg diff -r "last(tagged(),2)"
我知道您使用的是Python,但是上面的命令将完成繁重的工作,并且您的Python代码可以专注于不那么琐碎的任务。重要的部分是引号中的部分,我将对此进行解释
taged()
是所有已标记修订的列表-它应该引用与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())"
我们正在有效地选取最后两个标记和最后一个标记(!!),并对它们之间的所有包含集进行日志记录。可以使用
--template
调整日志
输出,正如懒獾在回答中所示。我会选择一个简单的--模板“{node}\t{tags}\n”
,但我想了解更多关于您可以享受的乐趣的信息。正如我在前面的回答中所说,在玩Mercurial时。也就是说,revset文档似乎没有涵盖您想要的内容,但是在命令的帮助中提到了
在您的代码中,您似乎希望了解“最新”两个标记之间发生了什么变化,以下内容可以帮助您完成这项工作:
hg diff -r "last(tagged(),2)"
我知道您使用的是Python,但是上面的命令将完成繁重的工作,并且您的Python代码可以专注于不那么琐碎的任务。重要的部分是引号中的部分,我将对此进行解释
taged()
是所有已标记修订的列表-它应该引用与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())"
我们正在有效地选取最后两个标记和最后一个标记(!!),并对它们之间的所有包含集进行日志记录。可以使用--template
调整日志
输出,正如懒獾在回答中所示。我会选择一个简单的--模板“{node}\t{tags}\n”<
hg log -r "first(last(tag(),2)):last(tag())" ...