On Thu, 2008-04-03 at 18:11 +0200, Jelmer Vernooij wrote: > Will this fetch keys into the local key database though? One of the > problems I've had in the past is two processes trying to grab a lock > for the GPG key database causing both to hang. Will this happen when > Discover() is called?
This removes the need for DiscoverKeys() and also caches the key objects. Furthermore, all key fields are fetched with one DBus call. This will significantly reduce the DBus traffic. The procedure when verifying a signed revision is this: 1. Call VerifyText() with the revision crypttext. 2. If the returned key is in our keyset dict, just return that. 3. Otherwise, call MatchKeys(). 4. If the key was found, call GetKeyFields() to get its info. This means that we at most use 3 DBus calls per unique key, and only 1 when we've already seen the key before. Cheers, Daniel
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: [EMAIL PROTECTED]
# ch8ck8gyjjhhiggf
# target_branch: ../trunk/
# testament_sha1: 2a3ef843f2e1fd3ebcc655100dd425c5348c1fc4
# timestamp: 2008-04-03 22:35:03 +0200
# base_revision_id: [EMAIL PROTECTED]
# hnsoywvk9on3h9g5
#
# Begin patch
=== modified file 'revisionview.py'
--- revisionview.py 2008-04-02 23:36:33 +0000
+++ revisionview.py 2008-04-03 20:20:39 +0000
@@ -151,7 +151,7 @@
def show_signature(self, crypttext):
key = seahorse.verify(crypttext)
- if key.is_available():
+ if key and key.is_available():
if key.is_trusted():
if key.get_display_name() == self.revision.committer:
self.signature_image.set_from_file(icon_path("sign-ok.png"))
=== modified file 'seahorse.py'
--- seahorse.py 2008-04-03 11:29:04 +0000
+++ seahorse.py 2008-04-03 20:30:15 +0000
@@ -59,69 +59,56 @@
LOCATION_REMOTE = 50
LOCATION_LOCAL = 100
-def discover(*key_ids):
- return openpgp.DiscoverKeys(key_ids, 0)
+keyset = dict()
def verify(crypttext):
(cleartext, key) = crypto.VerifyText(KEY_TYPE_OPENPGP, 1, crypttext)
- return Key(key)
+ if key != "":
+ if key not in keyset:
+ keyset[key] = Key(key)
+
+ return keyset[key]
class Key:
def __init__(self, key):
self.key = key
- self.fingerprint = None
- self.trust = None
- self.flags = None
- self.display_name = None
- self.location = None
-
- discover(key)
-
- def get_field(self, field, default=None):
- (valid, value) = openpgp.GetKeyField(self.key, field)
-
- if valid:
- return value
+
+ (keys, unmatched) = openpgp.MatchKeys([self.get_id()], 0x00000010)
+ self.available = (key in keys)
+
+ if self.available:
+ fields = openpgp.GetKeyFields(key, ['fingerprint', 'trust', 'flags', 'display-name', 'location'])
else:
- return default
+ fields = dict()
+
+ self.fingerprint = fields.get('fingerprint', 'N/A')
+ self.trust = fields.get('trust', TRUST_UNKNOWN)
+ self.flags = fields.get('flags', 0)
+ self.display_name = fields.get('display-name', '')
+ self.location = fields.get('location', LOCATION_MISSING)
def get_flags(self):
- if self.flags is None:
- self.flags = self.get_field('flags', 0)
-
return self.flags
def get_display_name(self):
- if self.display_name is None:
- self.display_name = self.get_field('display-name')
-
return self.display_name
def get_id(self):
return self.key.split(':')[1][8:]
def get_fingerprint(self):
- if self.fingerprint is None:
- self.fingerprint = self.get_field('fingerprint')
-
return self.fingerprint
def get_trust(self):
- if self.trust is None:
- self.trust = self.get_field('trust', TRUST_UNKNOWN)
-
return self.trust
def get_location(self):
- if self.location is None:
- self.location = self.get_field('location', LOCATION_MISSING)
-
return self.location
def is_available(self):
- return self.key != ""
+ return self.available
def is_trusted(self):
- return self.get_flags() & FLAG_TRUSTED
+ return self.flags & FLAG_TRUSTED != 0
# Begin bundle
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
yRThQkGnWBXA
signature.asc
Description: This is a digitally signed message part
-- bzr-gtk mailing list [email protected] Modify settings or unsubscribe at: https://lists.canonical.com/mailman/listinfo/bzr-gtk
