/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to revisionview.py

  • Committer: Jelmer Vernooij
  • Date: 2008-06-29 19:18:34 UTC
  • mto: This revision was merged to the branch mainline in revision 515.
  • Revision ID: jelmer@samba.org-20080629191834-ha2ecpv5szt96nge
Make sure signed testament matches repository data.

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
import gtk
21
21
import pango
22
22
import gobject
23
 
import subprocess
 
23
import webbrowser
24
24
 
25
 
from bzrlib.plugins.gtk import icon_path
26
25
from bzrlib.osutils import format_date
27
26
from bzrlib.util.bencode import bdecode
 
27
from bzrlib.testament import Testament
 
28
 
 
29
from bzrlib.plugins.gtk import icon_path
28
30
 
29
31
try:
30
32
    from bzrlib.plugins.gtk import seahorse
38
40
PAGE_SIGNATURE = 2
39
41
PAGE_BUGS = 3
40
42
 
 
43
 
41
44
def _open_link(widget, uri):
42
 
    subprocess.Popen(['sensible-browser', uri], close_fds=True)
 
45
    for cmd in ['sensible-browser', 'xdg-open']:
 
46
        if webbrowser._iscommand(cmd):
 
47
            webbrowser._tryorder.insert(0, '%s "%%s"' % cmd)
 
48
    webbrowser.open(uri)
43
49
 
44
50
gtk.link_button_set_uri_hook(_open_link)
45
51
 
216
222
                                        "This revision has not been signed.")
217
223
 
218
224
    def show_signature(self, crypttext):
219
 
        key = seahorse.verify(crypttext)
 
225
        (cleartext, key) = seahorse.verify(crypttext)
 
226
 
 
227
        assert cleartext is not None
 
228
 
 
229
        inv = self.repository.get_inventory(self.revision.revision_id)
 
230
        expected_testament = Testament(self.revision, inv).as_short_text()
 
231
        if expected_testament != cleartext:
 
232
            self.signature_image.set_from_file(icon_path("sign-bad.png"))
 
233
            self.signature_label.set_markup("<b>Signature does not match repository data</b>\n" +
 
234
                        "The signature plaintext is different from the expected testament plaintext.")
 
235
            return
220
236
 
221
237
        if key and key.is_available():
222
238
            if key.is_trusted():
305
321
        )
306
322
    }
307
323
 
308
 
    def __init__(self, branch=None):
 
324
    def __init__(self, branch=None, repository=None):
309
325
        gtk.Notebook.__init__(self)
310
326
 
311
327
        self._revision = None
312
328
        self._branch = branch
 
329
        if branch is not None:
 
330
            self._repository = branch.repository
 
331
        else:
 
332
            self._repository = repository
313
333
 
314
334
        self._create_general()
315
335
        self._create_relations()
 
336
        # Disabled because testaments aren't verified yet:
316
337
        if has_seahorse:
317
338
            self._create_signature()
318
339
        self._create_file_info_view()
513
534
 
514
535
            button = gtk.Button(revid)
515
536
            button.connect("clicked",
516
 
                    lambda w, r: self.set_revision(self._branch.repository.get_revision(r)), revid)
 
537
                    lambda w, r: self.set_revision(self._repository.get_revision(r)), revid)
517
538
            button.set_use_underline(False)
518
539
            hbox.pack_start(button, expand=False, fill=True)
519
540
            button.show()
535
556
        vbox.show()
536
557
 
537
558
    def _create_signature(self):
538
 
        self.signature_table = SignatureTab(self._branch.repository)
 
559
        self.signature_table = SignatureTab(self._repository)
539
560
        self.append_page(self.signature_table, tab_label=gtk.Label('Signature'))
540
561
        self.connect_after('notify::revision', self._update_signature)
541
562