/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: Vincent Ladeuil
  • Date: 2008-10-23 08:14:59 UTC
  • mto: This revision was merged to the branch mainline in revision 618.
  • Revision ID: v.ladeuil+lp@free.fr-20081023081459-3rgjsohomf8rbe44
Fix bug #131589 by using a gtk.Window instead of a gtk.Dialog.

* status.py:
(StatusWindow): Renamed from StatusDialog, we're a window now.
(StatusWindow.__init__, StatusWindow._create): Adjusted to Window
inheritance.

* __init__.py:
(cmd_gstatus.run): Use a Window instead of a dialog.

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
ginfo             GTK+ branch info dialog
 
26
gloom             GTK+ loom browse dialog
 
27
gmerge            GTK+ merge dialog
26
28
gmissing          GTK+ missing revisions dialog. 
27
29
gpreferences      GTK+ preferences dialog. 
28
30
gpush             GTK+ push.
36
38
 
37
39
import bzrlib
38
40
 
39
 
version_info = (0, 95, 0, 'dev', 1)
 
41
version_info = (0, 96, 0, 'dev', 1)
40
42
 
41
43
if version_info[3] == 'final':
42
44
    version_string = '%d.%d.%d' % version_info[:3]
44
46
    version_string = '%d.%d.%d%s%d' % version_info
45
47
__version__ = version_string
46
48
 
47
 
required_bzrlib = (1, 3)
 
49
required_bzrlib = (1, 6)
48
50
 
49
51
def check_bzrlib_version(desired):
50
52
    """Check that bzrlib is compatible.
104
106
    bzrlib.ui.ui_factory = GtkUIFactory()
105
107
 
106
108
 
107
 
def data_path():
108
 
    return os.path.dirname(__file__)
109
 
 
110
 
 
111
 
def icon_path(*args):
112
 
    basedirs = [os.path.join(data_path()),
 
109
def data_basedirs():
 
110
    return [os.path.dirname(__file__),
113
111
             "/usr/share/bzr-gtk", 
114
112
             "/usr/local/share/bzr-gtk"]
115
 
    for basedir in basedirs:
116
 
        path = os.path.join(basedir, 'icons', *args)
 
113
 
 
114
 
 
115
def data_path(*args):
 
116
    for basedir in data_basedirs():
 
117
        path = os.path.join(basedir, *args)
117
118
        if os.path.exists(path):
118
119
            return path
119
120
    return None
120
121
 
121
122
 
 
123
def icon_path(*args):
 
124
    return data_path(os.path.join('icons', *args))
 
125
 
 
126
 
122
127
def open_display():
123
128
    pygtk = import_pygtk()
124
129
    try:
169
174
    def run(self, location="."):
170
175
        (br, path) = branch.Branch.open_containing(location)
171
176
        open_display()
172
 
        from push import PushDialog
 
177
        from bzrlib.plugins.gtk.push import PushDialog
173
178
        dialog = PushDialog(br.repository, br.last_revision(), br)
174
179
        dialog.run()
175
180
 
176
181
 
 
182
class cmd_gloom(GTKCommand):
 
183
    """ GTK+ loom.
 
184
    
 
185
    """
 
186
    takes_args = [ "location?" ]
 
187
 
 
188
    def run(self, location="."):
 
189
        try:
 
190
            (tree, path) = workingtree.WorkingTree.open_containing(location)
 
191
            br = tree.branch
 
192
        except NoWorkingTree, e:
 
193
            (br, path) = branch.Branch.open_containing(location)
 
194
            tree = None
 
195
        open_display()
 
196
        from bzrlib.plugins.gtk.loom import LoomDialog
 
197
        dialog = LoomDialog(br, tree)
 
198
        dialog.run()
 
199
 
177
200
 
178
201
class cmd_gdiff(GTKCommand):
179
202
    """Show differences in working tree in a GTK+ Window.
231
254
    
232
255
    :return: The viz window object.
233
256
    """
234
 
    from viz import BranchWindow
 
257
    from bzrlib.plugins.gtk.viz import BranchWindow
235
258
    return BranchWindow(branch, revisions, limit)
236
259
 
237
260
 
379
402
 
380
403
    Graphical user interface for showing status 
381
404
    information."""
382
 
    
 
405
 
383
406
    aliases = [ "gst" ]
384
407
    takes_args = ['PATH?']
385
408
    takes_options = ['revision']
387
410
    def run(self, path='.', revision=None):
388
411
        import os
389
412
        gtk = open_display()
390
 
        from status import StatusDialog
 
413
        from bzrlib.plugins.gtk.status import StatusWindow
391
414
        (wt, wt_path) = workingtree.WorkingTree.open_containing(path)
392
 
        
 
415
 
393
416
        if revision is not None:
394
417
            try:
395
418
                revision_id = revision[0].as_revision_id(wt.branch)
396
419
            except:
397
420
                from bzrlib.errors import BzrError
398
 
                raise BzrError('Revision %r doesn\'t exist' % revision[0].user_spec )
 
421
                raise BzrError('Revision %r doesn\'t exist'
 
422
                               % revision[0].user_spec )
399
423
        else:
400
424
            revision_id = None
401
425
 
402
 
        status = StatusDialog(wt, wt_path, revision_id)
 
426
        status = StatusWindow(wt, wt_path, revision_id)
403
427
        status.connect("destroy", gtk.main_quit)
404
 
        status.run()
 
428
        status.show()
 
429
        gtk.main()
405
430
 
406
431
 
407
432
class cmd_gsend(GTKCommand):
449
474
        dialog.run()
450
475
 
451
476
 
 
477
class cmd_ginfo(Command):
 
478
    """ GTK+ info dialog
 
479
    
 
480
    """
 
481
    def run(self):
 
482
        from bzrlib import workingtree
 
483
        from bzrlib.plugins.gtk.olive.info import InfoDialog
 
484
        wt = workingtree.WorkingTree.open_containing('.')[0]
 
485
        info = InfoDialog(wt.branch)
 
486
        info.display()
 
487
        info.window.run()
 
488
 
 
489
 
 
490
class cmd_gmerge(Command):
 
491
    """ GTK+ merge dialog
 
492
    
 
493
    """
 
494
    takes_args = ["merge_from_path?"]
 
495
    def run(self, merge_from_path=None):
 
496
        from bzrlib import workingtree
 
497
        from bzrlib.plugins.gtk.dialog import error_dialog
 
498
        from bzrlib.plugins.gtk.merge import MergeDialog
 
499
        
 
500
        (wt, path) = workingtree.WorkingTree.open_containing('.')
 
501
        old_tree = wt.branch.repository.revision_tree(wt.branch.last_revision())
 
502
        delta = wt.changes_from(old_tree)
 
503
        if len(delta.added) or len(delta.removed) or len(delta.renamed) or len(delta.modified):
 
504
            error_dialog(_i18n('There are local changes in the branch'),
 
505
                         _i18n('Please commit or revert the changes before merging.'))
 
506
        else:
 
507
            parent_branch_path = wt.branch.get_parent()
 
508
            merge = MergeDialog(wt, path, parent_branch_path)
 
509
            response = merge.run()
 
510
            merge.destroy()
 
511
 
 
512
 
452
513
class cmd_gmissing(Command):
453
514
    """ GTK+ missing revisions dialog.
454
515
 
512
573
    cmd_gconflicts, 
513
574
    cmd_gdiff,
514
575
    cmd_ginit,
 
576
    cmd_ginfo,
 
577
    cmd_gmerge,
515
578
    cmd_gmissing, 
516
579
    cmd_gpreferences, 
517
580
    cmd_gpush, 
521
584
    cmd_visualise
522
585
    ]
523
586
 
 
587
try:
 
588
    from bzrlib.plugins import loom
 
589
except ImportError:
 
590
    pass # Loom plugin doesn't appear to be present
 
591
else:
 
592
    commands.append(cmd_gloom)
 
593
 
524
594
for cmd in commands:
525
595
    register_command(cmd)
526
596
 
527
597
 
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
598
class cmd_gselftest(GTKCommand):
600
599
    """Version of selftest that displays a notification at the end"""
601
600
 
630
629
register_command(cmd_gselftest)
631
630
 
632
631
 
633
 
class cmd_test_gtk(GTKCommand):
634
 
    """Version of selftest that just runs the gtk test suite."""
635
 
 
636
 
    takes_options = ['verbose',
637
 
                     Option('one', short_name='1',
638
 
                            help='Stop when one test fails.'),
639
 
                     Option('benchmark', help='Run the benchmarks.'),
640
 
                     Option('lsprof-timed',
641
 
                     help='Generate lsprof output for benchmarked'
642
 
                          ' sections of code.'),
643
 
                     Option('list-only',
644
 
                     help='List the tests instead of running them.'),
645
 
                     Option('randomize', type=str, argname="SEED",
646
 
                     help='Randomize the order of tests using the given'
647
 
                          ' seed or "now" for the current time.'),
648
 
                    ]
649
 
    takes_args = ['testspecs*']
650
 
 
651
 
    def run(self, verbose=None, one=False, benchmark=None,
652
 
            lsprof_timed=None, list_only=False, randomize=None,
653
 
            testspecs_list=None):
654
 
        from bzrlib import __path__ as bzrlib_path
655
 
        from bzrlib.tests import selftest
656
 
 
657
 
        print '%10s: %s' % ('bzrlib', bzrlib_path[0])
658
 
        if benchmark:
659
 
            print 'No benchmarks yet'
660
 
            return 3
661
 
 
662
 
            test_suite_factory = bench_suite
663
 
            if verbose is None:
664
 
                verbose = True
665
 
            # TODO: should possibly lock the history file...
666
 
            benchfile = open(".perf_history", "at", buffering=1)
667
 
        else:
668
 
            test_suite_factory = test_suite
669
 
            if verbose is None:
670
 
                verbose = False
671
 
            benchfile = None
672
 
 
673
 
        if testspecs_list is not None:
674
 
            pattern = '|'.join(testspecs_list)
675
 
        else:
676
 
            pattern = ".*"
677
 
 
678
 
        try:
679
 
            result = selftest(verbose=verbose,
680
 
                              pattern=pattern,
681
 
                              stop_on_failure=one,
682
 
                              test_suite_factory=test_suite_factory,
683
 
                              lsprof_timed=lsprof_timed,
684
 
                              bench_history=benchfile,
685
 
                              list_only=list_only,
686
 
                              random_seed=randomize,
687
 
                             )
688
 
        finally:
689
 
            if benchfile is not None:
690
 
                benchfile.close()
691
 
 
692
 
register_command(cmd_test_gtk)
693
 
 
694
 
 
695
 
 
696
632
import gettext
697
633
gettext.install('olive-gtk')
698
634