/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 18:31:29 UTC
  • mto: This revision was merged to the branch mainline in revision 518.
  • Revision ID: jelmer@samba.org-20080629183129-syqvz3xm5gqagzsx
Fix use of smart_add.

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
        
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
184
        self.revisionview.set_revision(selected)
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 = RevisionView()
 
324
        lv = RevisionView(self._branch)
329
325
        lv.show()
330
326
        return lv
331
327