/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 __init__.py

  • Committer: Jasper Groenewegen
  • Date: 2008-07-27 11:37:31 UTC
  • mto: (577.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 579.
  • Revision ID: colbrac@xs4all.nl-20080727113731-p2krsw6o3m57ctu6
Add PointlessMerge error
Merge dialog title change
Merge dialog icon
Tweak logic

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
"""Graphical support for Bazaar using GTK.
16
16
 
17
17
This plugin includes:
18
 
commit-notify     Start the graphical notifier of commits.
19
18
gannotate         GTK+ annotate. 
20
19
gbranch           GTK+ branching. 
21
20
gcheckout         GTK+ checkout. 
23
22
gconflicts        GTK+ conflicts. 
24
23
gdiff             Show differences in working tree in a GTK+ Window. 
25
24
ginit             Initialise a new branch.
 
25
gmerge            GTK+ merge dialog
26
26
gmissing          GTK+ missing revisions dialog. 
27
27
gpreferences      GTK+ preferences dialog. 
28
28
gpush             GTK+ push.
104
104
    bzrlib.ui.ui_factory = GtkUIFactory()
105
105
 
106
106
 
107
 
def data_path():
108
 
    return os.path.dirname(__file__)
109
 
 
110
 
 
111
 
def icon_path(*args):
112
 
    basedirs = [os.path.join(data_path()),
 
107
def data_basedirs():
 
108
    return [os.path.dirname(__file__),
113
109
             "/usr/share/bzr-gtk", 
114
110
             "/usr/local/share/bzr-gtk"]
115
 
    for basedir in basedirs:
116
 
        path = os.path.join(basedir, 'icons', *args)
 
111
 
 
112
 
 
113
def data_path(*args):
 
114
    for basedir in data_basedirs():
 
115
        path = os.path.join(basedir, *args)
117
116
        if os.path.exists(path):
118
117
            return path
119
118
    return None
120
119
 
121
120
 
 
121
def icon_path(*args):
 
122
    return data_path(os.path.join('icons', *args))
 
123
 
 
124
 
122
125
def open_display():
123
126
    pygtk = import_pygtk()
124
127
    try:
449
452
        dialog.run()
450
453
 
451
454
 
 
455
class cmd_gmerge(Command):
 
456
    """ GTK+ merge dialog
 
457
    
 
458
    """
 
459
    takes_args = ["merge_from_path?"]
 
460
    def run(self, merge_from_path=None):
 
461
        from bzrlib import workingtree
 
462
        from bzrlib.plugins.gtk.dialog import error_dialog
 
463
        from bzrlib.plugins.gtk.merge import MergeDialog
 
464
        
 
465
        (wt, path) = workingtree.WorkingTree.open_containing('.')
 
466
        old_tree = wt.branch.repository.revision_tree(wt.branch.last_revision())
 
467
        delta = wt.changes_from(old_tree)
 
468
        if len(delta.added) or len(delta.removed) or len(delta.renamed) or len(delta.modified):
 
469
            error_dialog(_i18n('There are local changes in the branch'),
 
470
                         _i18n('Please commit or revert the changes before merging.'))
 
471
        else:
 
472
            parent_branch_path = wt.branch.get_parent()
 
473
            merge = MergeDialog(wt, path, parent_branch_path)
 
474
            response = merge.run()
 
475
            merge.destroy()
 
476
 
 
477
 
452
478
class cmd_gmissing(Command):
453
479
    """ GTK+ missing revisions dialog.
454
480
 
512
538
    cmd_gconflicts, 
513
539
    cmd_gdiff,
514
540
    cmd_ginit,
 
541
    cmd_gmerge,
515
542
    cmd_gmissing, 
516
543
    cmd_gpreferences, 
517
544
    cmd_gpush, 
525
552
    register_command(cmd)
526
553
 
527
554
 
528
 
class cmd_commit_notify(GTKCommand):
529
 
    """Run the bzr commit notifier.
530
 
 
531
 
    This is a background program which will pop up a notification on the users
532
 
    screen when a commit occurs.
533
 
    """
534
 
 
535
 
    def run(self):
536
 
        from notify import NotifyPopupMenu
537
 
        gtk = open_display()
538
 
        menu = NotifyPopupMenu()
539
 
        icon = gtk.status_icon_new_from_file(icon_path("bzr-icon-64.png"))
540
 
        icon.connect('popup-menu', menu.display)
541
 
 
542
 
        import cgi
543
 
        import dbus
544
 
        import dbus.service
545
 
        import pynotify
546
 
        from bzrlib.bzrdir import BzrDir
547
 
        from bzrlib import errors
548
 
        from bzrlib.osutils import format_date
549
 
        from bzrlib.transport import get_transport
550
 
        if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
551
 
            import dbus.glib
552
 
        BROADCAST_INTERFACE = "org.bazaarvcs.plugins.dbus.Broadcast"
553
 
        bus = dbus.SessionBus()
554
 
 
555
 
        def catch_branch(revision_id, urls):
556
 
            # TODO: show all the urls, or perhaps choose the 'best'.
557
 
            url = urls[0]
558
 
            try:
559
 
                if isinstance(revision_id, unicode):
560
 
                    revision_id = revision_id.encode('utf8')
561
 
                transport = get_transport(url)
562
 
                a_dir = BzrDir.open_from_transport(transport)
563
 
                branch = a_dir.open_branch()
564
 
                revno = branch.revision_id_to_revno(revision_id)
565
 
                revision = branch.repository.get_revision(revision_id)
566
 
                summary = 'New revision %d in %s' % (revno, url)
567
 
                body  = 'Committer: %s\n' % revision.committer
568
 
                body += 'Date: %s\n' % format_date(revision.timestamp,
569
 
                    revision.timezone)
570
 
                body += '\n'
571
 
                body += revision.message
572
 
                body = cgi.escape(body)
573
 
                nw = pynotify.Notification(summary, body)
574
 
                def start_viz(notification=None, action=None, data=None):
575
 
                    """Start the viz program."""
576
 
                    pp = start_viz_window(branch, revision_id)
577
 
                    pp.show()
578
 
                def start_branch(notification=None, action=None, data=None):
579
 
                    """Start a Branch dialog"""
580
 
                    from bzrlib.plugins.gtk.branch import BranchDialog
581
 
                    bd = BranchDialog(remote_path=url)
582
 
                    bd.run()
583
 
                nw.add_action("inspect", "Inspect", start_viz, None)
584
 
                nw.add_action("branch", "Branch", start_branch, None)
585
 
                nw.set_timeout(5000)
586
 
                nw.show()
587
 
            except Exception, e:
588
 
                print e
589
 
                raise
590
 
        bus.add_signal_receiver(catch_branch,
591
 
                                dbus_interface=BROADCAST_INTERFACE,
592
 
                                signal_name="Revision")
593
 
        pynotify.init("bzr commit-notify")
594
 
        gtk.main()
595
 
 
596
 
register_command(cmd_commit_notify)
597
 
 
598
 
 
599
555
class cmd_gselftest(GTKCommand):
600
556
    """Version of selftest that displays a notification at the end"""
601
557