[Pkg-bazaar-commits] ./bzr-gtk/unstable r129: merge trunk
Vincent Ladeuil
v.ladeuil+lp at free.fr
Fri Apr 10 07:49:05 UTC 2009
------------------------------------------------------------
revno: 129
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: gtk.73965
timestamp: Fri 2007-01-26 12:48:08 +0100
message:
merge trunk
modified:
annotate/config.py
annotate/gannotate.py
------------------------------------------------------------
revno: 66.6.1
committer: Aaron Bentley <aaron.bentley at utoronto.ca>
branch nick: bzr-gtk-meld
timestamp: Wed 2007-01-17 01:42:55 -0500
message:
Remove usused span selector
modified:
annotate/config.py
annotate/gannotate.py
------------------------------------------------------------
revno: 66.6.2
committer: Aaron Bentley <aaron.bentley at utoronto.ca>
branch nick: bzr-gtk-meld
timestamp: Wed 2007-01-17 01:45:49 -0500
message:
zap set_oldest_newset
modified:
annotate/gannotate.py
------------------------------------------------------------
revno: 66.6.3
committer: Aaron Bentley <aaron.bentley at utoronto.ca>
branch nick: bzr-gtk-meld
timestamp: Wed 2007-01-17 01:47:58 -0500
message:
Merge
modified:
__init__.py
------------------------------------------------------------
revno: 66.6.4
committer: Aaron Bentley <aaron.bentley at utoronto.ca>
branch nick: bzr-gtk-meld
timestamp: Wed 2007-01-17 02:36:36 -0500
message:
Add back button to see older versions
modified:
annotate/gannotate.py
------------------------------------------------------------
revno: 66.6.5
committer: Aaron Bentley <abentley at panoramicfeedback.com>
branch nick: gtk
timestamp: Thu 2007-01-18 09:10:24 -0500
message:
Speed up the 'back' operation
modified:
annotate/gannotate.py
------------------------------------------------------------
revno: 66.6.6
committer: Aaron Bentley <abentley at panoramicfeedback.com>
branch nick: gtk
timestamp: Thu 2007-01-18 09:47:34 -0500
message:
Support scrolling based on an offset
modified:
annotate/gannotate.py
------------------------------------------------------------
revno: 66.6.7
committer: Aaron Bentley <aaron.bentley at utoronto.ca>
branch nick: bzr-gtk-meld
timestamp: Thu 2007-01-25 23:37:51 -0500
message:
Handle current revision better
modified:
annotate/gannotate.py
-------------- next part --------------
=== modified file 'annotate/config.py'
--- a/annotate/config.py 2006-06-15 03:01:40 +0000
+++ b/annotate/config.py 2007-01-17 06:42:55 +0000
@@ -51,7 +51,6 @@
configspec=gannotate_configspec)
self.window = window
self.pane = window.pane
- self.span_selector = window.span_selector
self.initial_comment = ["gannotate plugin configuration"]
self['window']['width'] = 750
@@ -77,24 +76,13 @@
if self["window"]["maximized"]:
self.window.maximize()
- self.span_selector.max_custom_spans =\
- self["spans"]["max_custom_spans"]
-
# XXX Don't know how to set an empty list as default in
# gannotate_configspec.
- try:
- for span in self["spans"]["custom_spans"]:
- self.span_selector.add_custom_span(span)
- except KeyError:
- pass
-
def _connect_signals(self):
self.window.connect("destroy", self._write)
self.window.connect("configure-event", self._save_window_props)
self.window.connect("window-state-event", self._save_window_props)
self.pane.connect("notify", self._save_pane_props)
- self.span_selector.connect("custom-span-added",
- self._save_custom_spans)
def _save_window_props(self, w, e, *args):
if e.window.get_state() & gtk.gdk.WINDOW_STATE_MAXIMIZED:
=== modified file 'annotate/gannotate.py'
--- a/annotate/gannotate.py 2007-01-22 11:38:56 +0000
+++ b/annotate/gannotate.py 2007-01-26 11:48:08 +0000
@@ -23,7 +23,7 @@
import pango
import re
-from bzrlib import tsort
+from bzrlib import patiencediff, tsort
from bzrlib.errors import NoSuchRevision
from bzrlib.revision import NULL_REVISION, CURRENT_REVISION
@@ -55,12 +55,9 @@
self.annotate_colormap = AnnotateColorSaturation()
self._create()
-
- if self.plain:
- self.span_selector.hide()
+ self.revisions = {}
def annotate(self, tree, branch, file_id):
- self.revisions = {}
self.annotations = []
self.branch = branch
self.tree = tree
@@ -101,10 +98,8 @@
self.annotations.append(revision)
if not self.plain:
- self._set_oldest_newest()
- # Recall that calling activate_default will emit "span-changed",
- # so self._span_changed_cb will take care of initial highlighting
- self.span_selector.activate_default()
+ now = time.time()
+ self.annomodel.foreach(self._highlight_annotation, now)
finally:
branch.repository.unlock()
branch.unlock()
@@ -144,6 +139,7 @@
current_revision.committer = self.branch.get_config().username()
current_revision.timestamp = time.time()
current_revision.message = '[Not yet committed]'
+ current_revision.parent_ids = tree.get_parent_ids()
current_revno = '%d?' % (self.branch.revno() + 1)
repository = self.branch.repository
if self.revision_id == CURRENT_REVISION:
@@ -151,63 +147,45 @@
else:
revision_id = self.revision_id
dotted = self._dotted_revnos(repository, revision_id)
- revision_cache = RevisionCache(repository)
+ revision_cache = RevisionCache(repository, self.revisions)
for origin, text in tree.annotate_iter(file_id):
rev_id = origin
- try:
- revision = revision_cache.get_revision(rev_id)
- revno = dotted.get(rev_id, 'merge')
- if len(revno) > 15:
- revno = 'merge'
- except NoSuchRevision:
- committer = "?"
- if rev_id == CURRENT_REVISION:
- revision = current_revision
- revno = current_revno
- else:
+ if rev_id == CURRENT_REVISION:
+ revision = current_revision
+ revno = current_revno
+ else:
+ try:
+ revision = revision_cache.get_revision(rev_id)
+ revno = dotted.get(rev_id, 'merge')
+ if len(revno) > 15:
+ revno = 'merge'
+ except NoSuchRevision:
revision = FakeRevision(rev_id)
revno = "?"
yield revision, revno, text
- def _set_oldest_newest(self):
- rev_dates = map(lambda i: self.revisions[i].timestamp, self.revisions)
- if len(rev_dates) == 0:
- return
- oldest = min(rev_dates)
- newest = max(rev_dates)
-
- span = self._span_from_seconds(time.time() - oldest)
- self.span_selector.set_to_oldest_span(span)
-
- span = self._span_from_seconds(newest - oldest)
- self.span_selector.set_newest_to_oldest_span(span)
-
- def _span_from_seconds(self, seconds):
- return (seconds / (24 * 60 * 60))
-
- def _span_changed_cb(self, w, span):
- self.annotate_colormap.set_span(span)
- now = time.time()
- self.annomodel.foreach(self._highlight_annotation, now)
-
def _highlight_annotation(self, model, path, iter, now):
revision_id, = model.get(iter, REVISION_ID_COL)
revision = self.revisions[revision_id]
model.set(iter, HIGHLIGHT_COLOR_COL,
self.annotate_colormap.get_color(revision, now))
- def _show_log(self, w):
+ def _selected_revision(self):
(path, col) = self.annoview.get_cursor()
if path is None:
+ return None
+ return self.annomodel[path][REVISION_ID_COL]
+
+ def _show_log(self, w):
+ rev_id = self._selected_revision()
+ if rev_id is None:
return
- rev_id = self.annomodel[path][REVISION_ID_COL]
self.logview.set_revision(self.revisions[rev_id])
def _create(self):
self.logview = self._create_log_view()
self.annoview = self._create_annotate_view()
- self.span_selector = self._create_span_selector()
vbox = gtk.VBox(False, 12)
vbox.set_border_width(12)
@@ -238,8 +216,8 @@
self.add_accel_group(accels)
hbox = gtk.HBox(True, 6)
- hbox.pack_start(self.span_selector, expand=False, fill=True)
- hbox.pack_start(self._create_button_box(), expand=False, fill=True)
+ hbox.pack_start(self._create_prev_button(), expand=False, fill=True)
+ hbox.pack_end(self._create_button_box(), expand=False, fill=True)
hbox.show()
vbox.pack_start(hbox, expand=False, fill=True)
@@ -331,13 +309,6 @@
return tv
- def _create_span_selector(self):
- ss = SpanSelector()
- ss.connect("span-changed", self._span_changed_cb)
- ss.show()
-
- return ss
-
def _create_log_view(self):
lv = LogView()
lv.show()
@@ -359,6 +330,40 @@
return box
+ def _create_prev_button(self):
+ box = gtk.HButtonBox()
+ box.set_layout(gtk.BUTTONBOX_START)
+ box.show()
+
+ button = gtk.Button()
+ button.set_use_stock(True)
+ button.set_label("gtk-go-back")
+ button.connect("clicked", lambda w: self.go_back())
+ button.show()
+ box.pack_start(button, expand=False, fill=False)
+ return box
+
+ def go_back(self):
+ rev_id = self._selected_revision()
+ parent_id = self.revisions[rev_id].parent_ids[0]
+ tree = self.branch.repository.revision_tree(parent_id)
+ if self.file_id in tree:
+ offset = self.get_scroll_offset(tree)
+ (row,), col = self.annoview.get_cursor()
+ self.annotate(tree, self.branch, self.file_id)
+ self.annoview.set_cursor(row+offset)
+
+ def get_scroll_offset(self, tree):
+ old = self.tree.get_file(self.file_id)
+ new = tree.get_file(self.file_id)
+ (row,), col = self.annoview.get_cursor()
+ matcher = patiencediff.PatienceSequenceMatcher(None, old.readlines(),
+ new.readlines())
+ for i, j, n in matcher.get_matching_blocks():
+ if i + n >= row:
+ return j - i
+
+
class FakeRevision:
""" A fake revision.
@@ -377,9 +382,12 @@
class RevisionCache(object):
"""A caching revision source"""
- def __init__(self, real_source):
+ def __init__(self, real_source, seed_cache=None):
self.__real_source = real_source
- self.__cache = {}
+ if seed_cache is None:
+ self.__cache = {}
+ else:
+ self.__cache = dict(seed_cache)
def get_revision(self, revision_id):
if revision_id not in self.__cache:
More information about the Pkg-bazaar-commits
mailing list