/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:
28
28
from bzrlib.revision import NULL_REVISION, CURRENT_REVISION
29
29
 
30
30
from colormap import AnnotateColorMap, AnnotateColorSaturation
31
 
from bzrlib.plugins.gtk.logview import LogView
 
31
from bzrlib.plugins.gtk.revisionview import RevisionView
32
32
from bzrlib.plugins.gtk.window import Window
33
33
 
34
34
 
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
        
64
65
        self.branch = branch
65
66
        self.tree = tree
66
67
        self.file_id = file_id
 
68
        self.revisionview.set_file_id(file_id)
67
69
        self.revision_id = getattr(tree, 'get_revision_id', 
68
70
                                   lambda: CURRENT_REVISION)()
69
71
        
79
81
        try:
80
82
            branch.lock_read()
81
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)
82
88
            for line_no, (revision, revno, line)\
83
89
                    in enumerate(self._annotate(tree, file_id)):
84
90
                if revision.revision_id == last_seen and not self.all:
108
114
 
109
115
        self.annoview.set_model(self.annomodel)
110
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)
111
120
 
112
121
    def jump_to_line(self, lineno):
113
122
        if lineno > len(self.annomodel) or lineno < 1:
123
132
        self.annoview.set_cursor(row)
124
133
        self.annoview.scroll_to_cell(row, use_align=True)
125
134
 
126
 
    def _dotted_revnos(self, repository, revision_id):
127
 
        """Return a dict of revision_id -> dotted revno
128
 
        
129
 
        :param repository: The repository to get the graph from
130
 
        :param revision_id: The last revision for which this info is needed
131
 
        """
132
 
        graph = repository.get_revision_graph(revision_id)
133
 
        dotted = {}
134
 
        for n, revision_id, d, revno, e in tsort.merge_sort(graph, 
135
 
            revision_id, generate_revno=True):
136
 
            dotted[revision_id] = '.'.join(str(num) for num in revno)
137
 
        return dotted
138
135
 
139
136
    def _annotate(self, tree, file_id):
140
137
        current_revision = FakeRevision(CURRENT_REVISION)
149
146
            revision_id = self.branch.last_revision()
150
147
        else:
151
148
            revision_id = self.revision_id
152
 
        dotted = self._dotted_revnos(repository, revision_id)
153
149
        revision_cache = RevisionCache(repository, self.revisions)
154
150
        for origin, text in tree.annotate_iter(file_id):
155
151
            rev_id = origin
159
155
            else:
160
156
                try:
161
157
                    revision = revision_cache.get_revision(rev_id)
162
 
                    revno = dotted.get(rev_id, 'merge')
 
158
                    revno = self.dotted.get(rev_id, 'merge')
163
159
                    if len(revno) > 15:
164
160
                        revno = 'merge'
165
161
                except NoSuchRevision:
182
178
 
183
179
    def _activate_selected_revision(self, w):
184
180
        rev_id = self._selected_revision()
185
 
        if rev_id is None:
 
181
        if not rev_id or rev_id == NULL_REVISION:
186
182
            return
187
183
        selected = self.revisions[rev_id]
188
 
        self.logview.set_revision(selected)
 
184
        self.revisionview.set_revision(selected)
189
185
        if (len(selected.parent_ids) != 0 and selected.parent_ids[0] not in
190
186
            self._no_back):
191
187
            enable_back = True
194
190
        self.back_button.set_sensitive(enable_back)
195
191
 
196
192
    def _create(self):
197
 
        self.logview = self._create_log_view()
 
193
        self.revisionview = self._create_log_view()
198
194
        self.annoview = self._create_annotate_view()
199
195
 
200
196
        vbox = gtk.VBox(False)
221
217
        
222
218
        self.pane = pane = gtk.VPaned()
223
219
        pane.add1(swbox)
224
 
        pane.add2(self.logview)
 
220
        pane.add2(self.revisionview)
225
221
        pane.show()
226
222
        vbox.pack_start(pane, expand=True, fill=True)
227
223
 
246
242
        self._search.show_for('line')
247
243
        self._search.set_target(self.annoview, LINE_NUM_COL)
248
244
 
249
 
    def row_diff(self, tv, path, tvc):
 
245
    def line_diff(self, tv, path, tvc):
250
246
        row = path[0]
251
247
        revision = self.annotations[row]
252
248
        repository = self.branch.repository
261
257
                tree2 = repository.revision_tree(NULL_REVISION)
262
258
        from bzrlib.plugins.gtk.diff import DiffWindow
263
259
        window = DiffWindow()
264
 
        window.set_diff("Diff for row %d" % (row+1), tree1, tree2)
 
260
        window.set_diff("Diff for line %d" % (row+1), tree1, tree2)
265
261
        window.set_file(tree1.id2path(self.file_id))
266
262
        window.show()
267
263
 
271
267
        tv.set_rules_hint(False)
272
268
        tv.connect("cursor-changed", self._activate_selected_revision)
273
269
        tv.show()
274
 
        tv.connect("row-activated", self.row_diff)
 
270
        tv.connect("row-activated", self.line_diff)
275
271
 
276
272
        cell = gtk.CellRendererText()
277
273
        cell.set_property("xalign", 1.0)
325
321
        return tv
326
322
 
327
323
    def _create_log_view(self):
328
 
        lv = LogView()
 
324
        lv = RevisionView(self._branch)
329
325
        lv.show()
330
326
        return lv
331
327