401
402
register_command(cmd_gpreferences)
405
class cmd_commit_notify(GTKCommand):
406
"""Run the bzr commit notifier.
408
This is a background program which will pop up a notification on the users
409
screen when a commit occurs.
413
gtk = self.open_display()
418
from bzrlib.bzrdir import BzrDir
419
from bzrlib import errors
420
from bzrlib.osutils import format_date
421
from bzrlib.transport import get_transport
422
if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
424
from bzrlib.plugins.dbus import activity
425
bus = dbus.SessionBus()
426
# get the object so we can subscribe to callbacks from it.
427
broadcast_service = bus.get_object(
428
activity.Broadcast.DBUS_NAME,
429
activity.Broadcast.DBUS_PATH)
430
def catch_branch(revision_id, url):
432
if isinstance(revision_id, unicode):
433
revision_id = revision_id.encode('utf8')
434
transport = get_transport(url)
436
transport.local_abspath('.')
437
except errors.TransportNotPossible:
438
# dont show remote urls for now.
441
a_dir = BzrDir.open_from_transport(transport)
442
branch = a_dir.open_branch()
443
revno = branch.revision_id_to_revno(revision_id)
444
revision = branch.repository.get_revision(revision_id)
445
summary = 'New revision %d in %s' % (revno, url)
446
body = 'Committer: %s\n' % revision.committer
447
body += 'Date: %s\n' % format_date(revision.timestamp,
450
body += revision.message
451
body = cgi.escape(body)
453
nw = pynotify.Notification(summary, body)
459
broadcast_service.connect_to_signal("Revision", catch_branch,
460
dbus_interface=activity.Broadcast.DBUS_INTERFACE)
461
pynotify.init("bzr commit-notify")
464
register_command(cmd_commit_notify)
405
468
gettext.install('olive-gtk')