/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: Vincent Ladeuil
  • Date: 2008-05-05 18:16:46 UTC
  • mto: (487.1.1 gtk)
  • mto: This revision was merged to the branch mainline in revision 490.
  • Revision ID: v.ladeuil+lp@free.fr-20080505181646-n95l8ltw2u6jtr26
Fix bug #187283 fix replacing _() by _i18n().

* genpot.sh 
Remove duplication. Add the ability to specify the genrated pot
file on command-line for debugging purposes.

* po/olive-gtk.pot:
Regenerated.

* __init__.py, branch.py, branchview/treeview.py, checkout.py,
commit.py, conflicts.py, diff.py, errors.py, initialize.py,
merge.py, nautilus-bzr.py, olive/__init__.py, olive/add.py,
olive/bookmark.py, olive/guifiles.py, olive/info.py,
olive/menu.py, olive/mkdir.py, olive/move.py, olive/remove.py,
olive/rename.py, push.py, revbrowser.py, status.py, tags.py:
Replace all calls to _() by calls to _i18n(), the latter being
defined in __init__.py and imported in the other modules from
there. This fix the problem encountered countless times when
running bzr selftest and getting silly error messages about
boolean not being callables.

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
from bzrlib.plugins.gtk.window import Window
32
33
 
33
34
 
34
35
(
41
42
) = range(6)
42
43
 
43
44
 
44
 
class GAnnotateWindow(gtk.Window):
 
45
class GAnnotateWindow(Window):
45
46
    """Annotate window."""
46
47
 
47
 
    def __init__(self, all=False, plain=False):
 
48
    def __init__(self, all=False, plain=False, parent=None):
48
49
        self.all = all
49
50
        self.plain = plain
50
51
        
51
 
        gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
 
52
        Window.__init__(self, parent)
52
53
        
53
54
        self.set_icon(self.render_icon(gtk.STOCK_FIND, gtk.ICON_SIZE_BUTTON))
54
55
        self.annotate_colormap = AnnotateColorSaturation()
63
64
        self.branch = branch
64
65
        self.tree = tree
65
66
        self.file_id = file_id
 
67
        self.revisionview.set_file_id(file_id)
66
68
        self.revision_id = getattr(tree, 'get_revision_id', 
67
69
                                   lambda: CURRENT_REVISION)()
68
70
        
69
 
        # [revision id, line number, committer, revno, highlight color, line]
 
71
        # [revision id, line number, author, revno, highlight color, line]
70
72
        self.annomodel = gtk.ListStore(gobject.TYPE_STRING,
71
73
                                       gobject.TYPE_STRING,
72
74
                                       gobject.TYPE_STRING,
78
80
        try:
79
81
            branch.lock_read()
80
82
            branch.repository.lock_read()
 
83
            self.dotted = {}
 
84
            revno_map = self.branch.get_revision_id_to_revno_map()
 
85
            for revision_id, revno in revno_map.iteritems():
 
86
                self.dotted[revision_id] = '.'.join(str(num) for num in revno)
81
87
            for line_no, (revision, revno, line)\
82
88
                    in enumerate(self._annotate(tree, file_id)):
83
89
                if revision.revision_id == last_seen and not self.all:
84
 
                    revno = committer = ""
 
90
                    revno = author = ""
85
91
                else:
86
92
                    last_seen = revision.revision_id
87
 
                    committer = revision.committer
 
93
                    author = revision.get_apparent_author()
88
94
 
89
95
                if revision.revision_id not in self.revisions:
90
96
                    self.revisions[revision.revision_id] = revision
91
97
 
92
98
                self.annomodel.append([revision.revision_id,
93
99
                                       line_no + 1,
94
 
                                       committer,
 
100
                                       author,
95
101
                                       revno,
96
102
                                       None,
97
103
                                       line.rstrip("\r\n")
107
113
 
108
114
        self.annoview.set_model(self.annomodel)
109
115
        self.annoview.grab_focus()
 
116
        my_revno = self.dotted.get(self.revision_id, 'current')
 
117
        title = '%s (%s) - gannotate' % (self.tree.id2path(file_id), my_revno)
 
118
        self.set_title(title)
110
119
 
111
120
    def jump_to_line(self, lineno):
112
121
        if lineno > len(self.annomodel) or lineno < 1:
122
131
        self.annoview.set_cursor(row)
123
132
        self.annoview.scroll_to_cell(row, use_align=True)
124
133
 
125
 
    def _dotted_revnos(self, repository, revision_id):
126
 
        """Return a dict of revision_id -> dotted revno
127
 
        
128
 
        :param repository: The repository to get the graph from
129
 
        :param revision_id: The last revision for which this info is needed
130
 
        """
131
 
        graph = repository.get_revision_graph(revision_id)
132
 
        dotted = {}
133
 
        for n, revision_id, d, revno, e in tsort.merge_sort(graph, 
134
 
            revision_id, generate_revno=True):
135
 
            dotted[revision_id] = '.'.join(str(num) for num in revno)
136
 
        return dotted
137
134
 
138
135
    def _annotate(self, tree, file_id):
139
136
        current_revision = FakeRevision(CURRENT_REVISION)
148
145
            revision_id = self.branch.last_revision()
149
146
        else:
150
147
            revision_id = self.revision_id
151
 
        dotted = self._dotted_revnos(repository, revision_id)
152
148
        revision_cache = RevisionCache(repository, self.revisions)
153
149
        for origin, text in tree.annotate_iter(file_id):
154
150
            rev_id = origin
158
154
            else:
159
155
                try:
160
156
                    revision = revision_cache.get_revision(rev_id)
161
 
                    revno = dotted.get(rev_id, 'merge')
 
157
                    revno = self.dotted.get(rev_id, 'merge')
162
158
                    if len(revno) > 15:
163
159
                        revno = 'merge'
164
160
                except NoSuchRevision:
181
177
 
182
178
    def _activate_selected_revision(self, w):
183
179
        rev_id = self._selected_revision()
184
 
        if rev_id is None:
 
180
        if not rev_id or rev_id == NULL_REVISION:
185
181
            return
186
182
        selected = self.revisions[rev_id]
187
 
        self.logview.set_revision(selected)
 
183
        self.revisionview.set_revision(selected)
188
184
        if (len(selected.parent_ids) != 0 and selected.parent_ids[0] not in
189
185
            self._no_back):
190
186
            enable_back = True
193
189
        self.back_button.set_sensitive(enable_back)
194
190
 
195
191
    def _create(self):
196
 
        self.logview = self._create_log_view()
 
192
        self.revisionview = self._create_log_view()
197
193
        self.annoview = self._create_annotate_view()
198
194
 
199
195
        vbox = gtk.VBox(False)
220
216
        
221
217
        self.pane = pane = gtk.VPaned()
222
218
        pane.add1(swbox)
223
 
        pane.add2(self.logview)
 
219
        pane.add2(self.revisionview)
224
220
        pane.show()
225
221
        vbox.pack_start(pane, expand=True, fill=True)
226
222
 
245
241
        self._search.show_for('line')
246
242
        self._search.set_target(self.annoview, LINE_NUM_COL)
247
243
 
248
 
    def row_diff(self, tv, path, tvc):
 
244
    def line_diff(self, tv, path, tvc):
249
245
        row = path[0]
250
246
        revision = self.annotations[row]
251
247
        repository = self.branch.repository
260
256
                tree2 = repository.revision_tree(NULL_REVISION)
261
257
        from bzrlib.plugins.gtk.diff import DiffWindow
262
258
        window = DiffWindow()
263
 
        window.set_diff("Diff for row %d" % (row+1), tree1, tree2)
 
259
        window.set_diff("Diff for line %d" % (row+1), tree1, tree2)
264
260
        window.set_file(tree1.id2path(self.file_id))
265
261
        window.show()
266
262
 
270
266
        tv.set_rules_hint(False)
271
267
        tv.connect("cursor-changed", self._activate_selected_revision)
272
268
        tv.show()
273
 
        tv.connect("row-activated", self.row_diff)
 
269
        tv.connect("row-activated", self.line_diff)
274
270
 
275
271
        cell = gtk.CellRendererText()
276
272
        cell.set_property("xalign", 1.0)
324
320
        return tv
325
321
 
326
322
    def _create_log_view(self):
327
 
        lv = LogView()
 
323
        lv = RevisionView()
328
324
        lv.show()
329
325
        return lv
330
326
 
392
388
                return j - i
393
389
 
394
390
 
395
 
 
396
391
class FakeRevision:
397
392
    """ A fake revision.
398
393
 
408
403
        self.timezone = 0
409
404
        self.properties = {}
410
405
 
 
406
    def get_apparent_author(self):
 
407
        return self.committer
 
408
 
411
409
 
412
410
class RevisionCache(object):
413
411
    """A caching revision source"""