Rev 176: Add new command 'commit-notify' to listen for commits on dbus and show them via pynotify. in file:///home/robertc/source/baz/plugins/gtk/trunk/

Robert Collins robertc at robertcollins.net
Fri Mar 23 12:46:21 GMT 2007


At file:///home/robertc/source/baz/plugins/gtk/trunk/

------------------------------------------------------------
revno: 176
revision-id: robertc at robertcollins.net-20070323124620-j5b6yeit1o2oz4p2
parent: robertc at robertcollins.net-20070323094853-zxab7td0348656te
committer: Robert Collins <robertc at robertcollins.net>
branch nick: trunk
timestamp: Fri 2007-03-23 23:46:20 +1100
message:
  Add new command 'commit-notify' to listen for commits on dbus and show them via pynotify.
modified:
  __init__.py                    __init__.py-20060519165329-a1fd52c8a829fcd5
  tests/__init__.py              __init__.py-20070201155018-mi2dl3spgj7fqdum-1
=== modified file '__init__.py'
--- a/__init__.py	2007-03-23 09:48:53 +0000
+++ b/__init__.py	2007-03-23 12:46:20 +0000
@@ -100,6 +100,7 @@
             if str(e) == "could not open display":
                 raise NoDisplayError
         set_ui_factory()
+        return gtk
 
     def run(self):
         self.open_display()
@@ -401,6 +402,68 @@
 register_command(cmd_gpreferences)
 
 
+class cmd_commit_notify(GTKCommand):
+    """Run the bzr commit notifier.
+
+    This is a background program which will pop up a notification on the users
+    screen when a commit occurs.
+    """
+
+    def run(self):
+        gtk = self.open_display()
+        import cgi
+        import dbus
+        import dbus.service
+        import pynotify
+        from bzrlib.bzrdir import BzrDir
+        from bzrlib import errors
+        from bzrlib.osutils import format_date
+        from bzrlib.transport import get_transport
+        if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
+            import dbus.glib
+        from bzrlib.plugins.dbus import activity
+        bus = dbus.SessionBus()
+        # get the object so we can subscribe to callbacks from it.
+        broadcast_service = bus.get_object(
+            activity.Broadcast.DBUS_NAME,
+            activity.Broadcast.DBUS_PATH)
+        def catch_branch(revision_id, url):
+            try:
+                if isinstance(revision_id, unicode):
+                    revision_id = revision_id.encode('utf8')
+                transport = get_transport(url)
+                try:
+                    transport.local_abspath('.')
+                except errors.TransportNotPossible:
+                    # dont show remote urls for now.
+                    return
+                # here we should:
+                a_dir = BzrDir.open_from_transport(transport)
+                branch = a_dir.open_branch()
+                revno = branch.revision_id_to_revno(revision_id)
+                revision = branch.repository.get_revision(revision_id)
+                summary = 'New revision %d in %s' % (revno, url)
+                body  = 'Committer: %s\n' % revision.committer
+                body += 'Date: %s\n' % format_date(revision.timestamp,
+                    revision.timezone)
+                body += '\n'
+                body += revision.message
+                body = cgi.escape(body)
+                #print repr(body)
+                nw = pynotify.Notification(summary, body)
+                nw.set_timeout(5000)
+                nw.show()
+            except Exception, e:
+                print e
+                raise
+        broadcast_service.connect_to_signal("Revision", catch_branch,
+            dbus_interface=activity.Broadcast.DBUS_INTERFACE)
+        pynotify.init("bzr commit-notify")
+        gtk.main()
+
+register_command(cmd_commit_notify)
+
+
 import gettext
 gettext.install('olive-gtk')
 

=== modified file 'tests/__init__.py'
--- a/tests/__init__.py	2007-03-09 19:05:06 +0000
+++ b/tests/__init__.py	2007-03-23 12:46:20 +0000
@@ -24,7 +24,11 @@
 
     loader = TestUtil.TestLoader()
 
-    testmod_names = ['test_preferences', 'test_history']
+    testmod_names = [
+        'test_notification',
+        'test_preferences',
+        'test_history',
+        ]
 
     if os.name == 'nt':
         testmod_names.append("test_tortoise_bzr")



More information about the bazaar-commits mailing list