Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python脚本提取mercurial中最后两个标记之间的变更集(或提交)?_Python_Python 2.7_Mercurial_Dvcs - Fatal编程技术网

如何使用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())" ...