/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 annotate/gannotate.py

  • Committer: Aaron Bentley
  • Date: 2006-12-15 18:32:34 UTC
  • mto: This revision was merged to the branch mainline in revision 125.
  • Revision ID: abentley@panoramicfeedback.com-20061215183234-ci75l03h667tusii
Annotate showing uncommitted changes

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
 
25
25
from bzrlib import tsort
26
26
from bzrlib.errors import NoSuchRevision
27
 
from bzrlib.revision import NULL_REVISION
 
27
from bzrlib.revision import NULL_REVISION, CURRENT_REVISION
28
28
 
29
29
from colormap import AnnotateColorMap, AnnotateColorSaturation
30
30
from logview import LogView
58
58
        if self.plain:
59
59
            self.span_selector.hide()
60
60
 
61
 
    def annotate(self, branch, file_id, revision_id=None):
 
61
    def annotate(self, tree, branch, file_id):
62
62
        self.revisions = {}
63
63
        self.annotations = []
64
64
        self.branch = branch
 
65
        self.tree = tree
65
66
        self.file_id = file_id
66
 
        self.revision_id = revision_id
 
67
        self.revision_id = getattr(tree, 'get_revision_id', 
 
68
                                   lambda: CURRENT_REVISION)()
67
69
        
68
70
        # [revision id, line number, committer, revno, highlight color, line]
69
71
        self.annomodel = gtk.ListStore(gobject.TYPE_STRING,
78
80
            branch.lock_read()
79
81
            branch.repository.lock_read()
80
82
            for line_no, (revision, revno, line)\
81
 
                    in enumerate(self._annotate(branch, file_id, revision_id)):
 
83
                    in enumerate(self._annotate(tree, file_id)):
82
84
                if revision.revision_id == last_seen and not self.all:
83
85
                    revno = committer = ""
84
86
                else:
136
138
            dotted[revision_id] = '.'.join(str(num) for num in revno)
137
139
        return dotted
138
140
 
139
 
    def _annotate(self, branch, file_id, revision_id):
140
 
        repository = branch.repository
141
 
        if revision_id is None:
142
 
            revision_id = branch.last_revision()
 
141
    def _annotate(self, tree, file_id):
 
142
        current_revision = FakeRevision(CURRENT_REVISION)
 
143
        current_revision.committer = self.branch.get_config().username()
 
144
        current_revision.timestamp = time.time()
 
145
        current_revision.message = '[Not yet committed]'
 
146
        current_revno = '%d?' % self.branch.revno()
 
147
        repository = self.branch.repository
 
148
        if self.revision_id == CURRENT_REVISION:
 
149
            revision_id = self.branch.last_revision()
 
150
        else:
 
151
            revision_id = self.revision_id
143
152
        dotted = self._dotted_revnos(repository, revision_id)
144
 
        rev_tree = repository.revision_tree(revision_id)
145
 
        revision_id = rev_tree.inventory[file_id].revision
146
 
        weave = repository.weave_store.get_weave(file_id,
147
 
                                                 branch.get_transaction())
148
 
        
149
153
        revision_cache = RevisionCache(repository)
150
 
        for origin, text in weave.annotate_iter(revision_id):
 
154
        for origin, text in tree.annotate_iter(file_id):
151
155
            rev_id = origin
152
156
            try:
153
157
                revision = revision_cache.get_revision(rev_id)
155
159
                if len(revno) > 15:
156
160
                    revno = 'merge'
157
161
            except NoSuchRevision:
158
 
                revision = NoneRevision(rev_id)
159
 
                revno = "?"
 
162
                committer = "?"
 
163
                if rev_id == CURRENT_REVISION:
 
164
                    revision = current_revision
 
165
                    revno = current_revno
 
166
                else:
 
167
                    revision = FakeRevision(rev_id)
 
168
                    revno = "?"
160
169
 
161
170
            yield revision, revno, text
162
171
 
228
237
        row = path[0]
229
238
        revision = self.annotations[row]
230
239
        repository = self.branch.repository
231
 
        tree1 = repository.revision_tree(revision.revision_id)
232
 
        if len(revision.parent_ids) > 0:
233
 
            tree2 = repository.revision_tree(revision.parent_ids[0])
 
240
        if revision.revision_id == CURRENT_REVISION:
 
241
            tree1 = self.tree
 
242
            tree2 = self.tree.basis_tree()
234
243
        else:
235
 
            tree2 = repository.revision_tree(NULL_REVISION)
 
244
            tree1 = repository.revision_tree(revision.revision_id)
 
245
            if len(revision.parent_ids) > 0:
 
246
                tree2 = repository.revision_tree(revision.parent_ids[0])
 
247
            else:
 
248
                tree2 = repository.revision_tree(NULL_REVISION)
236
249
        from bzrlib.plugins.gtk.viz.diffwin import DiffWindow
237
250
        window = DiffWindow()
238
251
        window.set_diff("Diff for row %d" % (row+1), tree1, tree2)
325
338
        return box
326
339
 
327
340
 
328
 
class NoneRevision:
 
341
class FakeRevision:
329
342
    """ A fake revision.
330
343
 
331
344
    For when a revision is referenced but not present.
332
345
    """
333
346
 
334
 
    def __init__(self, revision_id):
 
347
    def __init__(self, revision_id, committer='?'):
335
348
        self.revision_id = revision_id
336
349
        self.parent_ids = []
337
 
        self.committer = "?"
 
350
        self.committer = committer
338
351
        self.message = "?"
339
352
        self.timestamp = 0.0
340
353
        self.timezone = 0