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