140
141
current_revision.timestamp = time.time()
141
142
current_revision.message = '[Not yet committed]'
142
143
current_revision.parent_ids = tree.get_parent_ids()
144
current_revision.properties['branch-nick'] = self.branch.nick
143
145
current_revno = '%d?' % (self.branch.revno() + 1)
144
146
repository = self.branch.repository
145
147
if self.revision_id == CURRENT_REVISION:
178
180
return self.annomodel[path][REVISION_ID_COL]
180
def _show_log(self, w):
182
def _activate_selected_revision(self, w):
181
183
rev_id = self._selected_revision()
182
184
if rev_id is None:
184
self.logview.set_revision(self.revisions[rev_id])
186
selected = self.revisions[rev_id]
187
self.logview.set_revision(selected)
188
if (len(selected.parent_ids) != 0 and selected.parent_ids[0] not in
193
self.back_button.set_sensitive(enable_back)
186
195
def _create(self):
187
196
self.logview = self._create_log_view()
188
197
self.annoview = self._create_annotate_view()
190
vbox = gtk.VBox(False, 12)
191
vbox.set_border_width(12)
199
vbox = gtk.VBox(False)
194
202
sw = gtk.ScrolledWindow()
197
205
sw.add(self.annoview)
198
206
self.annoview.gwindow = self
213
hbox = gtk.HBox(False, 6)
214
self.back_button = self._create_back_button()
215
hbox.pack_start(self.back_button, expand=False, fill=True)
216
self.forward_button = self._create_forward_button()
217
hbox.pack_start(self.forward_button, expand=False, fill=True)
219
vbox.pack_start(hbox, expand=False, fill=True)
201
221
self.pane = pane = gtk.VPaned()
203
223
pane.add2(self.logview)
205
225
vbox.pack_start(pane, expand=True, fill=True)
207
227
self._search = SearchBox()
208
vbox.pack_start(self._search, expand=False, fill=True)
228
swbox.pack_start(self._search, expand=False, fill=True)
209
229
accels = gtk.AccelGroup()
210
230
accels.connect_group(gtk.keysyms.f, gtk.gdk.CONTROL_MASK,
211
231
gtk.ACCEL_LOCKED,
215
235
self._search_by_line)
216
236
self.add_accel_group(accels)
218
hbox = gtk.HBox(True, 6)
219
hbox.pack_start(self._create_prev_button(), expand=False, fill=True)
220
hbox.pack_end(self._create_button_box(), expand=False, fill=True)
222
vbox.pack_start(hbox, expand=False, fill=True)
226
240
def _search_by_text(self, accel_group, window, key, modifiers):
244
258
tree2 = repository.revision_tree(revision.parent_ids[0])
246
260
tree2 = repository.revision_tree(NULL_REVISION)
247
from bzrlib.plugins.gtk.viz.diffwin import DiffWindow
261
from bzrlib.plugins.gtk.diff import DiffWindow
248
262
window = DiffWindow()
249
263
window.set_diff("Diff for row %d" % (row+1), tree1, tree2)
250
264
window.set_file(tree1.id2path(self.file_id))
312
326
def _create_log_view(self):
318
def _create_button_box(self):
319
box = gtk.HButtonBox()
320
box.set_layout(gtk.BUTTONBOX_END)
323
button = gtk.Button()
324
button.set_use_stock(True)
325
button.set_label("gtk-close")
326
button.connect("clicked", lambda w: self.destroy())
329
box.pack_start(button, expand=False, fill=False)
333
def _create_prev_button(self):
334
box = gtk.HButtonBox()
335
box.set_layout(gtk.BUTTONBOX_START)
331
def _create_back_button(self):
338
332
button = gtk.Button()
339
333
button.set_use_stock(True)
340
334
button.set_label("gtk-go-back")
341
335
button.connect("clicked", lambda w: self.go_back())
343
box.pack_start(button, expand=False, fill=False)
336
button.set_relief(gtk.RELIEF_NONE)
340
def _create_forward_button(self):
341
button = gtk.Button()
342
button.set_use_stock(True)
343
button.set_label("gtk-go-forward")
344
button.connect("clicked", lambda w: self.go_forward())
345
button.set_relief(gtk.RELIEF_NONE)
347
button.set_sensitive(False)
346
350
def go_back(self):
351
last_tree = self.tree
347
352
rev_id = self._selected_revision()
348
353
parent_id = self.revisions[rev_id].parent_ids[0]
349
tree = self.branch.repository.revision_tree(parent_id)
350
if self.file_id in tree:
351
offset = self.get_scroll_offset(tree)
354
target_tree = self.branch.repository.revision_tree(parent_id)
355
if self._go(target_tree):
356
self.history.append(last_tree)
357
self.forward_button.set_sensitive(True)
359
self._no_back.add(parent_id)
360
self.back_button.set_sensitive(False)
362
def go_forward(self):
363
if len(self.history) == 0:
365
target_tree = self.history.pop()
366
if len(self.history) == 0:
367
self.forward_button.set_sensitive(False)
368
self._go(target_tree)
370
def _go(self, target_tree):
371
rev_id = self._selected_revision()
372
if self.file_id in target_tree:
373
offset = self.get_scroll_offset(target_tree)
352
374
(row,), col = self.annoview.get_cursor()
353
self.annotate(tree, self.branch, self.file_id)
354
self.annoview.set_cursor(row+offset)
375
self.annotate(target_tree, self.branch, self.file_id)
379
self.annoview.set_cursor(new_row)
356
384
def get_scroll_offset(self, tree):
357
385
old = self.tree.get_file(self.file_id)
371
399
For when a revision is referenced but not present.
374
def __init__(self, revision_id, committer='?'):
402
def __init__(self, revision_id, committer='?', nick=None):
375
403
self.revision_id = revision_id
376
404
self.parent_ids = []
377
405
self.committer = committer
378
406
self.message = "?"
379
407
self.timestamp = 0.0
380
408
self.timezone = 0
383
412
class RevisionCache(object):