/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to branchview/linegraph.py

  • Committer: Szilveszter Farkas (Phanatic)
  • Date: 2008-03-03 17:05:53 UTC
  • mto: (423.1.22 trunk) (435.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 435.
  • Revision ID: szilveszter.farkas@gmail.com-20080303170553-t56b61can228uqqm
Fix for #137172 (thanks to Mario del Pozo).

Show diffs side-by-side

added added

removed removed

Lines of Context:
9
9
__copyright__ = "Copyright © 2005 Canonical Ltd."
10
10
__author__    = "Scott James Remnant <scott@ubuntu.com>"
11
11
 
12
 
from bzrlib.revision import NULL_REVISION
13
12
from bzrlib.tsort import merge_sort
14
13
 
15
 
def linegraph(graph, start_revs, maxnum, broken_line_length = None,
 
14
def linegraph(repository, start, maxnum, broken_line_length = None,
16
15
              graph_data = True, mainline_only = False):
17
16
    """Produce a directed graph of a bzr repository.
18
17
 
43
42
    curved, kinked, etc.) and to pick the actual colours for each index.
44
43
    """
45
44
    
46
 
    graph_parents = {}
47
 
    ghosts = set()
 
45
    graph_parents = repository.get_revision_graph(start)
48
46
    graph_children = {}
49
 
    for (revid, parent_revids) in graph.iter_ancestry(start_revs):
50
 
        if parent_revids is None:
51
 
            ghosts.add(revid)
52
 
            continue
53
 
        if parent_revids == (NULL_REVISION,):
54
 
            graph_parents[revid] = ()
55
 
        else:
56
 
            graph_parents[revid] = parent_revids
57
 
        for parent in parent_revids:
58
 
            graph_children.setdefault(parent, []).append(revid)
59
 
        graph_children.setdefault(revid, [])
60
 
    for ghost in ghosts:
61
 
        for ghost_child in graph_children[ghost]:
62
 
            graph_parents[ghost_child] = [p for p in graph_parents[ghost_child]
63
 
                                          if p not in ghosts]
64
 
    graph_parents["top:"] = start_revs
 
47
    for revid in graph_parents.iterkeys():
 
48
        graph_children[revid] = []
65
49
 
66
50
    if len(graph_parents)>0:
67
51
        merge_sorted_revisions = merge_sort(
68
52
            graph_parents,
69
 
            "top:",
 
53
            start,
70
54
            generate_revno=True)
71
55
    else:
72
56
        merge_sorted_revisions = ()
74
58
    if mainline_only:
75
59
        merge_sorted_revisions = [elem for elem in merge_sorted_revisions \
76
60
                                  if len(elem[3])==1 ]
77
 
 
78
 
    assert merge_sorted_revisions[0][1] == "top:"
79
 
    merge_sorted_revisions = merge_sorted_revisions[1:]
80
61
    
81
62
    revid_index = {}
82
63
    revno_index = {}
102
83
        revid_index[revid] = rev_index
103
84
        
104
85
        parents = graph_parents[revid]
 
86
        for parent_revid in parents:
 
87
            graph_children[parent_revid].append(revid)
 
88
        
105
89
        linegraph.append([revid,
106
90
                          None,
107
91
                          [],