/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: Jelmer Vernooij
  • Date: 2008-06-29 19:18:34 UTC
  • mto: This revision was merged to the branch mainline in revision 515.
  • Revision ID: jelmer@samba.org-20080629191834-ha2ecpv5szt96nge
Make sure signed testament matches repository data.

Show diffs side-by-side

added added

removed removed

Lines of Context:
45
45
class GAnnotateWindow(Window):
46
46
    """Annotate window."""
47
47
 
48
 
    def __init__(self, all=False, plain=False, parent=None):
 
48
    def __init__(self, all=False, plain=False, parent=None, branch=None):
49
49
        self.all = all
50
50
        self.plain = plain
 
51
        self._branch = branch
51
52
        
52
53
        Window.__init__(self, parent)
53
54
        
80
81
        try:
81
82
            branch.lock_read()
82
83
            branch.repository.lock_read()
 
84
            self.dotted = {}
 
85
            revno_map = self.branch.get_revision_id_to_revno_map()
 
86
            for revision_id, revno in revno_map.iteritems():
 
87
                self.dotted[revision_id] = '.'.join(str(num) for num in revno)
83
88
            for line_no, (revision, revno, line)\
84
89
                    in enumerate(self._annotate(tree, file_id)):
85
90
                if revision.revision_id == last_seen and not self.all:
109
114
 
110
115
        self.annoview.set_model(self.annomodel)
111
116
        self.annoview.grab_focus()
 
117
        my_revno = self.dotted.get(self.revision_id, 'current')
 
118
        title = '%s (%s) - gannotate' % (self.tree.id2path(file_id), my_revno)
 
119
        self.set_title(title)
112
120
 
113
121
    def jump_to_line(self, lineno):
114
122
        if lineno > len(self.annomodel) or lineno < 1:
124
132
        self.annoview.set_cursor(row)
125
133
        self.annoview.scroll_to_cell(row, use_align=True)
126
134
 
127
 
    def _dotted_revnos(self, repository, revision_id):
128
 
        """Return a dict of revision_id -> dotted revno
129
 
        
130
 
        :param repository: The repository to get the graph from
131
 
        :param revision_id: The last revision for which this info is needed
132
 
        """
133
 
        graph = repository.get_revision_graph(revision_id)
134
 
        dotted = {}
135
 
        for n, revision_id, d, revno, e in tsort.merge_sort(graph, 
136
 
            revision_id, generate_revno=True):
137
 
            dotted[revision_id] = '.'.join(str(num) for num in revno)
138
 
        return dotted
139
135
 
140
136
    def _annotate(self, tree, file_id):
141
137
        current_revision = FakeRevision(CURRENT_REVISION)
150
146
            revision_id = self.branch.last_revision()
151
147
        else:
152
148
            revision_id = self.revision_id
153
 
        dotted = self._dotted_revnos(repository, revision_id)
154
149
        revision_cache = RevisionCache(repository, self.revisions)
155
150
        for origin, text in tree.annotate_iter(file_id):
156
151
            rev_id = origin
160
155
            else:
161
156
                try:
162
157
                    revision = revision_cache.get_revision(rev_id)
163
 
                    revno = dotted.get(rev_id, 'merge')
 
158
                    revno = self.dotted.get(rev_id, 'merge')
164
159
                    if len(revno) > 15:
165
160
                        revno = 'merge'
166
161
                except NoSuchRevision:
183
178
 
184
179
    def _activate_selected_revision(self, w):
185
180
        rev_id = self._selected_revision()
186
 
        if rev_id is None:
 
181
        if not rev_id or rev_id == NULL_REVISION:
187
182
            return
188
183
        selected = self.revisions[rev_id]
189
184
        self.revisionview.set_revision(selected)
247
242
        self._search.show_for('line')
248
243
        self._search.set_target(self.annoview, LINE_NUM_COL)
249
244
 
250
 
    def row_diff(self, tv, path, tvc):
 
245
    def line_diff(self, tv, path, tvc):
251
246
        row = path[0]
252
247
        revision = self.annotations[row]
253
248
        repository = self.branch.repository
262
257
                tree2 = repository.revision_tree(NULL_REVISION)
263
258
        from bzrlib.plugins.gtk.diff import DiffWindow
264
259
        window = DiffWindow()
265
 
        window.set_diff("Diff for row %d" % (row+1), tree1, tree2)
 
260
        window.set_diff("Diff for line %d" % (row+1), tree1, tree2)
266
261
        window.set_file(tree1.id2path(self.file_id))
267
262
        window.show()
268
263
 
272
267
        tv.set_rules_hint(False)
273
268
        tv.connect("cursor-changed", self._activate_selected_revision)
274
269
        tv.show()
275
 
        tv.connect("row-activated", self.row_diff)
 
270
        tv.connect("row-activated", self.line_diff)
276
271
 
277
272
        cell = gtk.CellRendererText()
278
273
        cell.set_property("xalign", 1.0)
326
321
        return tv
327
322
 
328
323
    def _create_log_view(self):
329
 
        lv = RevisionView()
 
324
        lv = RevisionView(self._branch)
330
325
        lv.show()
331
326
        return lv
332
327