/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
33
35
else:
34
36
    has_seahorse = True
35
37
 
 
38
PAGE_GENERAL = 0
 
39
PAGE_RELATIONS = 1
 
40
PAGE_SIGNATURE = 2
 
41
PAGE_BUGS = 3
 
42
 
 
43
 
36
44
def _open_link(widget, uri):
37
 
    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)
38
49
 
39
50
gtk.link_button_set_uri_hook(_open_link)
40
51
 
211
222
                                        "This revision has not been signed.")
212
223
 
213
224
    def show_signature(self, crypttext):
214
 
        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
215
236
 
216
237
        if key and key.is_available():
217
238
            if key.is_trusted():
300
321
        )
301
322
    }
302
323
 
303
 
 
304
 
    def __init__(self, branch=None):
 
324
    def __init__(self, branch=None, repository=None):
305
325
        gtk.Notebook.__init__(self)
306
326
 
307
327
        self._revision = None
308
328
        self._branch = branch
 
329
        if branch is not None:
 
330
            self._repository = branch.repository
 
331
        else:
 
332
            self._repository = repository
309
333
 
310
334
        self._create_general()
311
335
        self._create_relations()
 
336
        # Disabled because testaments aren't verified yet:
312
337
        if has_seahorse:
313
338
            self._create_signature()
314
339
        self._create_file_info_view()
315
340
        self._create_bugs()
316
341
 
317
 
        self.set_current_page(0)
 
342
        self.set_current_page(PAGE_GENERAL)
 
343
        self.connect_after('switch-page', self._switch_page_cb)
318
344
        
319
345
        self._show_callback = None
320
346
        self._clicked_callback = None
430
456
        self._add_tags()
431
457
 
432
458
    def _update_signature(self, widget, param):
433
 
        self.signature_table.set_revision(self._revision)
 
459
        if self.get_current_page() == PAGE_SIGNATURE:
 
460
            self.signature_table.set_revision(self._revision)
434
461
 
435
462
    def _update_bugs(self, widget, param):
436
463
        self.bugs_page.set_revision(self._revision)
442
469
                                      self.children_widgets,
443
470
                                      self.children_table)
444
471
 
 
472
    def _switch_page_cb(self, notebook, page, page_num):
 
473
        if page_num == PAGE_SIGNATURE:
 
474
            self.signature_table.set_revision(self._revision)
 
475
 
 
476
 
 
477
 
445
478
    def _show_clicked_cb(self, widget, revid, parentid):
446
479
        """Callback for when the show button for a parent is clicked."""
447
480
        self._show_callback(revid, parentid)
501
534
 
502
535
            button = gtk.Button(revid)
503
536
            button.connect("clicked",
504
 
                    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)
505
538
            button.set_use_underline(False)
506
539
            hbox.pack_start(button, expand=False, fill=True)
507
540
            button.show()
523
556
        vbox.show()
524
557
 
525
558
    def _create_signature(self):
526
 
        self.signature_table = SignatureTab(self._branch.repository)
 
559
        self.signature_table = SignatureTab(self._repository)
527
560
        self.append_page(self.signature_table, tab_label=gtk.Label('Signature'))
528
561
        self.connect_after('notify::revision', self._update_signature)
529
562