/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 viz/graph.py

  • Committer: Aaron Bentley
  • Date: 2007-08-16 14:31:02 UTC
  • Revision ID: abentley@panoramicfeedback.com-20070816143102-27yzfhdgdv3ggo6e
Fix hue selection to use author in gannotate

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/python
2
1
# -*- coding: UTF-8 -*-
3
2
"""Directed graph production.
4
3
 
11
10
__author__    = "Scott James Remnant <scott@ubuntu.com>"
12
11
 
13
12
 
 
13
from bzrlib.revision import Revision
14
14
from bzrlib.tsort import merge_sort
15
15
 
16
16
 
17
 
class DummyRevision(object):
 
17
class DummyRevision(Revision):
18
18
    """Dummy bzr revision.
19
19
 
20
20
    Sometimes, especially in older bzr branches, a revision is referenced
22
22
    When this happens we use an instance of this class instead of the real
23
23
    Revision object (which we can't get).
24
24
    """
25
 
 
26
25
    def __init__(self, revid):
27
 
        self.revision_id = revid
28
 
        self.parent_ids = []
 
26
        super(DummyRevision, self).__init__(revid)
29
27
        self.committer = None
30
 
        self.message = self.revision_id
 
28
        self.timestamp = None
 
29
        self.timezone = None
 
30
        self.message = revid
31
31
 
32
32
 
33
33
class RevisionProxy(object):
64
64
 
65
65
class DistanceMethod(object):
66
66
 
67
 
    def __init__(self, branch, start):
68
 
        self.branch = branch
69
 
        self.start = start
 
67
    def __init__(self, repository, start_revid):
 
68
        self.repository = repository
 
69
        self.start_revid = start_revid
70
70
        self.revisions = {}
71
71
        self.children = {}
72
 
        self.children_of_id = {start: set()}
 
72
        self.children_of_id = {start_revid: set()}
73
73
        self.parent_ids_of = {}
74
 
        self.colours = { start: 0 }
 
74
        self.colours = { start_revid: 0 }
75
75
        self.last_colour = 0
76
76
        self.direct_parent_of = {}
77
77
        self.graph = {}
78
78
 
79
79
    def fill_caches(self):
80
 
        graph = self.branch.repository.get_revision_graph_with_ghosts([self.start])
 
80
        graph = self.repository.get_revision_graph_with_ghosts([self.start_revid])
81
81
        for revid in graph.ghosts:
82
82
            self.cache_revision(DummyRevision(revid))
83
83
        for revid, parents in graph.get_ancestors().items():
84
 
            self.cache_revision(RevisionProxy(revid, parents, self.branch.repository))
 
84
            self.cache_revision(RevisionProxy(revid, parents, self.repository))
85
85
 
86
86
    def cache_revision(self, revision):
87
87
        "Set the caches for a newly retrieved revision."""
236
236
                self.colours[revid] = self.last_colour = self.last_colour + 1
237
237
 
238
238
 
239
 
def distances(branch, start):
 
239
def distances(repository, start_revid):
240
240
    """Sort the revisions.
241
241
 
242
242
    Traverses the branch revision tree starting at start and produces an
245
245
 
246
246
    Returns a tuple of (revids, revisions, colours, children)
247
247
    """
248
 
    distance = DistanceMethod(branch, start)
 
248
    distance = DistanceMethod(repository, start_revid)
249
249
    distance.fill_caches()
250
 
    distance.merge_sorted = merge_sort(distance.graph, distance.start)
 
250
    distance.merge_sorted = merge_sort(distance.graph, distance.start_revid)
251
251
    children = distance.make_children_map()
252
252
    
253
253
    for seq, revid, merge_depth, end_of_merge in distance.merge_sorted: