This patch makes bzr-gtk import seahorse as late as possible 
(to avoid slowing down bzr's startup time). It also tries to import seahorse 
rather than checking whether it is available (which will only work when 
seahorse was already activated by some other application).

Cheers,

Jelmer

-- 
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: [EMAIL PROTECTED]
# target_branch: lp:bzr-gtk
# testament_sha1: 6d73d64643c60bbc2bb49352d1f03c732276358d
# timestamp: 2008-07-04 20:55:15 +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-04 18:54:42 +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()
 
@@ -555,8 +553,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

# Begin bundle
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
GCIxawV1o5ZTAs3/F3JFOFCQnayT4A==

Attachment: signature.asc
Description: Digital signature

-- 
bzr-gtk mailing list
bzr-gtk@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.canonical.com/mailman/listinfo/bzr-gtk

Reply via email to