[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