首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mercurial修订树的可视化

Mercurial修订树的可视化
EN

Stack Overflow用户
提问于 2012-10-27 10:33:27
回答 2查看 938关注 0票数 0

使用Python (理想情况下,Python3)生成Mercurial修订树可视化的最简单方法是什么?

我猜它必须通过两个库的组合:一个提供到Mercurial存储库的接口,另一个可视化图形。

用例:我们已经编写了一个(纯Python)持续集成测试模块。我们希望它显示修订树,将每个节点标记为“通过”、“失败”、“进行中”、“未测试”等。

EN

回答 2

Stack Overflow用户

发布于 2012-11-02 00:17:35

对于可视化部分,我会查看NetworkX。它是一个Python库,允许您进行图形/网络处理、导入/导出和可视化。

票数 1
EN

Stack Overflow用户

发布于 2013-07-06 02:25:02

这里,有我的脚本:

代码语言:javascript
复制
#!/usr/bin/env python
from itertools import chain
import hglib
#from pygraphviz import *

repo = hglib.open('.')

log = dict((t[0], t) for t in repo.log())
def graph(): return dict((v, []) for v in log)

forward, backward, jump = (graph() for i in range(3))

for target in log:
    for parent in repo.parents(target) or []:
        source = parent[0]
        forward[source].append(target)
        backward[target].append(source)

def endpoint(v):
    if len(forward[v]) != 1: return True
    if len(backward[forward[v][0]]) != 1: return True
    if len(backward[v]) != 1: return True
    if len(forward[backward[v][0]]) != 1: return True

for v in forward:
    if endpoint(v):
        w = v
        while len(forward[w]) == 1 == len(backward[forward[w][0]]):
            w = forward[w][0]
        jump[v] = w
    else: del jump[v]

def vertex(tupl): return 'v' + tupl[1][:5]

print 'digraph {'

colors = ['red', 'green', 'blue', 'yellow', 'cyan', 'magenta',
          'orange', 'chartreuse']
authors = dict()

for v in sorted(forward, key=int):
    if not endpoint(v) or v not in jump: continue
    node = 'v%s' % v
    if jump[v] != v:
        sep = '+' if forward[v] == jump[v] else '::'
        label = '%s%s%s' % (v, sep, jump[v])
        assert int(jump[v]) > int(v)
        v = jump[v]
        del jump[v]
    else:
        label = v
    author = log[v][4]
    print '// %s' % author
    if author not in authors: authors[author] = colors[len(authors) %
                                                       len(colors)]
    attrs = dict(color=authors[author], label=label, style='bold').items()
    print '\t%s [%s]' % (node, ','.join('%s="%s"' % kv for kv in attrs))
    for w in forward[v]: print '\t%s -> v%s' % (node, w)

print '}'

可以看出,我使用hglib获取Mercurial数据(hglib.open('.').log()是一个元组列表,每次提交一个元组)。我使用graphviz进行可视化。没有库,我只是“打印”那该死的东西;-)

我像这样运行脚本和graphviz:

代码语言:javascript
复制
python version-dag.py > log.dot ; dot -Tpdf log.dot -o log.pdf

..。然后看看这个出色的.pdf文件。Graphviz可以做png,eps,也许还有其他格式。jump字典用于将单父路径向下压缩到单个节点。享受:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13096729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档