/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/gpg.py

  • Committer: Jelmer Vernooij
  • Date: 2019-05-29 03:28:14 UTC
  • mfrom: (7303 work)
  • mto: This revision was merged to the branch mainline in revision 7305.
  • Revision ID: jelmer@jelmer.uk-20190529032814-fzqbrgf9647u9ptq
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
55
55
 
56
56
class GpgNotInstalled(errors.DependencyNotPresent):
57
57
 
58
 
    _fmt = 'python-gpg is not installed, it is needed to verify signatures'
 
58
    _fmt = ('python-gpg is not installed, it is needed to create or '
 
59
            'verify signatures. %(error)s')
59
60
 
60
61
    def __init__(self, error):
61
62
        errors.DependencyNotPresent.__init__(self, 'gpg', error)
199
200
    def _get_signing_keys(self):
200
201
        import gpg
201
202
        keyname = self._config_stack.get('gpg_signing_key')
 
203
        if keyname == 'default':
 
204
            # Leave things to gpg
 
205
            return []
 
206
 
202
207
        if keyname:
203
208
            try:
204
209
                return [self.context.get_key(keyname)]
205
210
            except gpg.errors.KeyNotFound:
206
211
                pass
207
212
 
208
 
        if keyname is None or keyname == 'default':
209
 
            # 'default' or not setting gpg_signing_key at all means we should
 
213
        if keyname is None:
 
214
            # not setting gpg_signing_key at all means we should
210
215
            # use the user email address
211
216
            keyname = config.extract_email_address(
212
217
                self._config_stack.get('email'))
 
218
        if keyname == 'default':
 
219
            return []
213
220
        possible_keys = self.context.keylist(keyname, secret=True)
214
221
        try:
215
222
            return [next(possible_keys)]
230
237
            return False
231
238
 
232
239
    def sign(self, content, mode):
233
 
        import gpg
 
240
        try:
 
241
            import gpg
 
242
        except ImportError as error:
 
243
            raise GpgNotInstalled(
 
244
                'Set create_signatures=no to disable creating signatures.')
 
245
 
234
246
        if isinstance(content, text_type):
235
247
            raise errors.BzrBadParameterUnicode('content')
236
248
 
258
270
        try:
259
271
            import gpg
260
272
        except ImportError as error:
261
 
            raise errors.GpgNotInstalled(error)
 
273
            raise GpgNotInstalled(
 
274
                'Set check_signatures=ignore to disable verifying signatures.')
262
275
 
263
276
        signed_data = gpg.Data(signed_data)
264
277
        if signature:
306
319
        if result.signatures[0].summary & gpg.constants.SIGSUM_VALID:
307
320
            key = self.context.get_key(fingerprint)
308
321
            name = key.uids[0].name
 
322
            if isinstance(name, bytes):
 
323
                name = name.decode('utf-8')
309
324
            email = key.uids[0].email
310
 
            return (
311
 
                SIGNATURE_VALID,
312
 
                name.decode('utf-8') + u" <" + email.decode('utf-8') + u">",
313
 
                plain_output)
 
325
            if isinstance(email, bytes):
 
326
                email = email.decode('utf-8')
 
327
            return (SIGNATURE_VALID, name + u" <" + email + u">", plain_output)
314
328
        # Sigsum_red indicates a problem, unfortunatly I have not been able
315
329
        # to write any tests which actually set this.
316
330
        if result.signatures[0].summary & gpg.constants.SIGSUM_RED: