The attached patch makes viz load tags after the window has been created, 
so we get a progress bar if they take a long time to load (which can
be the case with bzr-svn).

Cheers,

Jelmer
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: [EMAIL PROTECTED]
# target_branch: lp:bzr-gtk
# testament_sha1: 9150fb4002a2a2099e3687d91e046227317692bf
# timestamp: 2008-07-06 15:07:34 +0200
# base_revision_id: [EMAIL PROTECTED]
# 
# Begin patch
=== modified file '__init__.py'
--- __init__.py	2008-06-27 17:10:27 +0000
+++ __init__.py	2008-07-04 08:05:17 +0000
@@ -103,21 +103,24 @@
     bzrlib.ui.ui_factory = GtkUIFactory()
 
 
-def data_path():
-    return os.path.dirname(__file__)
-
-
-def icon_path(*args):
-    basedirs = [os.path.join(data_path()),
+def data_basedirs():
+    return [os.path.dirname(__file__),
              "/usr/share/bzr-gtk", 
              "/usr/local/share/bzr-gtk"]
-    for basedir in basedirs:
-        path = os.path.join(basedir, 'icons', *args)
+
+
+def data_path(*args):
+    for basedir in data_basedirs():
+        path = os.path.join(basedir, *args)
         if os.path.exists(path):
             return path
     return None
 
 
+def icon_path(*args):
+    return data_path(os.path.join('icons', *args))
+
+
 def open_display():
     pygtk = import_pygtk()
     try:

=== modified file 'about.py'
--- about.py	2008-06-28 20:24:16 +0000
+++ about.py	2008-07-04 08:05:17 +0000
@@ -27,13 +27,14 @@
 from bzrlib.errors import NotBranchError, NoRepositoryPresent
 from bzrlib.trace import mutter
 
-from bzrlib.plugins.gtk import icon_path
+from bzrlib.plugins.gtk import data_path, icon_path
 
 
 def read_license():
-    license_file = os.path.join(os.path.dirname(__file__), "COPYING")
-    if os.path.exists(license_file):
-        return file(license_file).read()
+    license_paths = [data_path("COPYING"), "/usr/share/common-licenses/GPL-2"]
+    for license_file in license_paths:
+        if os.path.exists(license_file):
+            return file(license_file).read()
     # Fall back to just license name if we can't find the file
     return "GPLv2 or later"
 
@@ -41,7 +42,7 @@
 def load_credits():
     import pickle
     try:
-        credits = pickle.load(file("credits.pickle"))
+        credits = pickle.load(file(data_path("credits.pickle")))
     except IOError:
         credits = None
     return credits

=== modified file 'revisionview.py'
--- revisionview.py	2008-06-29 19:18:34 +0000
+++ revisionview.py	2008-07-06 13:07:24 +0000
@@ -28,13 +28,6 @@
 
 from bzrlib.plugins.gtk import icon_path
 
-try:
-    from bzrlib.plugins.gtk import seahorse
-except ImportError:
-    has_seahorse = False
-else:
-    has_seahorse = True
-
 PAGE_GENERAL = 0
 PAGE_RELATIONS = 1
 PAGE_SIGNATURE = 2
@@ -138,10 +131,11 @@
 
 class SignatureTab(gtk.VBox):
 
-    def __init__(self, repository):
+    def __init__(self, repository, seahorse):
         self.key = None
         self.revision = None
         self.repository = repository
+        self.seahorse = seahorse
 
         super(SignatureTab, self).__init__(False, 6)
         signature_box = gtk.Table(rows=3, columns=3)
@@ -222,7 +216,7 @@
                                         "This revision has not been signed.")
 
     def show_signature(self, crypttext):
-        (cleartext, key) = seahorse.verify(crypttext)
+        (cleartext, key) = self.seahorse.verify(crypttext)
 
         assert cleartext is not None
 
@@ -259,15 +253,15 @@
 
         trust = key.get_trust()
 
-        if trust <= seahorse.TRUST_NEVER:
+        if trust <= self.seahorse.TRUST_NEVER:
             trust_text = 'never trusted'
-        elif trust == seahorse.TRUST_UNKNOWN:
+        elif trust == self.seahorse.TRUST_UNKNOWN:
             trust_text = 'not trusted'
-        elif trust == seahorse.TRUST_MARGINAL:
+        elif trust == self.seahorse.TRUST_MARGINAL:
             trust_text = 'marginally trusted'
-        elif trust == seahorse.TRUST_FULL:
+        elif trust == self.seahorse.TRUST_FULL:
             trust_text = 'fully trusted'
-        elif trust == seahorse.TRUST_ULTIMATE:
+        elif trust == self.seahorse.TRUST_ULTIMATE:
             trust_text = 'ultimately trusted'
 
         self.signature_key_id_label.show()
@@ -333,9 +327,13 @@
 
         self._create_general()
         self._create_relations()
-        # Disabled because testaments aren't verified yet:
-        if has_seahorse:
-            self._create_signature()
+        try:
+            from bzrlib.plugins.gtk import seahorse
+        except ImportError:
+            pass
+        else:
+            self._create_signature(seahorse)
+
         self._create_file_info_view()
         self._create_bugs()
 
@@ -348,9 +346,13 @@
         self._revision = None
         self._branch = branch
 
+        gobject.idle_add(self.populate)
+
+        self.set_file_id(None)
+
+    def populate(self):
         self.update_tags()
-
-        self.set_file_id(None)
+        return False
 
     def do_get_property(self, property):
         if property.name == 'branch':
@@ -555,8 +557,8 @@
         self.append_page(vbox, tab_label=gtk.Label("Relations"))
         vbox.show()
 
-    def _create_signature(self):
-        self.signature_table = SignatureTab(self._repository)
+    def _create_signature(self, seahorse):
+        self.signature_table = SignatureTab(self._repository, seahorse)
         self.append_page(self.signature_table, tab_label=gtk.Label('Signature'))
         self.connect_after('notify::revision', self._update_signature)
 

=== modified file 'seahorse.py'
--- seahorse.py	2008-06-29 19:07:23 +0000
+++ seahorse.py	2008-07-04 18:54:42 +0000
@@ -43,19 +43,23 @@
     else:
         raise
 
-if hasattr(bus, 'list_activatable_names'):
-    bus_names = bus.list_activatable_names()
-else:
-    bus_object = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
-    bus_names = bus_object.ListNames(dbus_interface='org.freedesktop.DBus')
-
-if BUS_NAME not in bus_names:
-    raise ImportError
-
-crypto = dbus.Interface(bus.get_object(BUS_NAME, CRYPTO_PATH), 
-                        CRYPTO_INTERFACE)
-openpgp = dbus.Interface(bus.get_object(BUS_NAME, OPENPGP_PATH),
-                         OPENPGP_INTERFACE)
+try:
+    crypto = dbus.Interface(bus.get_object(BUS_NAME, CRYPTO_PATH), 
+                            CRYPTO_INTERFACE)
+    openpgp = dbus.Interface(bus.get_object(BUS_NAME, OPENPGP_PATH),
+                             OPENPGP_INTERFACE)
+except dbus.exceptions.DBusException, e:
+    get_name = getattr(e, 'get_dbus_name', None)
+    if get_name is not None:
+        name = get_name()
+    else:
+        name = getattr(e, '_dbus_error_name', None)
+    # DBus sometimes fails like this, just treat it as if seahorse is not
+    # available rather than crashing.
+    if name == "org.freedesktop.DBus.Error.ServiceUnknown":
+        raise ImportError
+    else:
+        raise
 
 FLAG_VALID = 0x0001
 FLAG_CAN_ENCRYPT = 0x0002

=== modified file 'ui.py'
--- ui.py	2008-06-30 20:32:25 +0000
+++ ui.py	2008-07-04 21:40:56 +0000
@@ -58,13 +58,14 @@
         pass
 
     def update(self, msg=None, current_cnt=None, total_cnt=None):
-        if current_cnt:
+        if current_cnt is not None:
             self.current = current_cnt
-        if total_cnt:
+        if total_cnt is not None:
             self.total = total_cnt
         if msg is not None:
             self.set_text(msg)
         if None not in (self.current, self.total):
+            assert self.current <= self.total
             self.fraction = float(self.current) / self.total
             self.set_fraction(self.fraction)
         while gtk.events_pending():
@@ -91,6 +92,9 @@
     def update(self, *args, **kwargs):
         self.pb.update(*args, **kwargs)
 
+    def tick(self, *args, **kwargs):
+        self.pb.tick(*args, **kwargs)
+
     def finished(self):
         self.pb.finished()
         self.hide_all()
@@ -136,6 +140,9 @@
     def update(self, *args, **kwargs):
         self.pb.update(*args, **kwargs)
 
+    def tick(self, *args, **kwargs):
+        self.pb.tick(*args, **kwargs)
+
     def finished(self):
         self.pb.finished()
         self.hide_all()

=== modified file 'viz/branchwin.py'
--- viz/branchwin.py	2008-07-01 21:54:21 +0000
+++ viz/branchwin.py	2008-07-06 13:07:24 +0000
@@ -197,7 +197,6 @@
         tag_image.set_from_file(icon_path("tag-16.png"))
         self.go_menu_tags = gtk.ImageMenuItem("_Tags")
         self.go_menu_tags.set_image(tag_image)
-        self._update_tags()
 
         go_menu.add(go_menu_next)
         go_menu.add(go_menu_prev)
@@ -248,8 +247,13 @@
         menubar.add(help_menuitem)
         menubar.show_all()
 
+        gobject.idle_add(self.populate)
+
         return menubar
 
+    def populate(self):
+        self._update_tags()
+
     def construct_top(self):
         """Construct the top-half of the window."""
         # FIXME: Make broken_line_length configurable

# Begin bundle
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
-- 
bzr-gtk mailing list
[email protected]
Modify settings or unsubscribe at: 
https://lists.canonical.com/mailman/listinfo/bzr-gtk

Reply via email to