1 # -*- coding: utf-8 -*-
2 # vim:fileencoding=utf-8 ai ts=4 sts=4 et sw=4
3 # Copyright 2012 Neil Muller
4 # GPL 2+ - see COPYING for details
8 revision as _mod_revision,
10 from bzrlib.config import (
21 class IrkerSender(object):
22 """An irker message sender."""
24 def __init__(self, branch, revision_id, config, local_branch=None,
28 self.repository = branch.repository
29 if (local_branch is not None and
30 local_branch.repository.has_revision(revision_id)):
31 self.repository = local_branch.repository
32 self._revision_id = revision_id
37 def _setup_revision_and_revno(self):
38 self.revision = self.repository.get_revision(self._revision_id)
39 self.revno = self.branch.revision_id_to_revno(self._revision_id)
43 'project': self.project(),
44 'committer': self.revision.committer,
46 'rev': '%d' % self.revno,
48 'logmsg': self.revision.get_summary(),
51 for name, value in self.colours():
53 text = ('%(bold)s%(project)s:%(reset)s '
54 '%(green)s%(committer)s%(reset)s '
55 '%(repo)s * %(bold)s%(rev)s%(reset)s / '
56 ' %(bold)s%(files)s%(reset)s: %(logmsg)s '
57 '%(brown)s%(url)s%(reset)s' % fields)
61 """What URL to display in the subject of the mail"""
62 url = self.config.get('irker_url')
64 url = self.config.get('public_branch')
66 url = self.branch.base
70 colour_style = self.config.get('irker_colors')
82 # Vaues taken from irker's irkerhook.py
83 if colour_style == 'ANSI':
86 'green': '\x1b[1;32m',
89 'yellow': '\x1b[1;33m',
91 'magenta': '\x1b[35m',
95 elif colour_style == 'mIRC':
110 project = self.config.get('irker_project')
112 project = 'No Project name set'
116 """Send the info to irkerd.
118 self.branch.lock_read()
119 self.repository.lock_read()
120 # These should become configurable at some point
121 default_server = 'localhost'
124 # Do this after we have locked, to make things faster.
125 self._setup_revision_and_revno()
126 channels = self.config.get('irker_channels')
127 msg = unicode(self._format())
128 # We rely on the server truncating, rather than trying to be
130 message = json.dumps({"to": channels, "privmsg": msg})
132 # We assume tcp, since I'm lazy, so we just grab that bit
135 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
136 sock.connect((default_server, IRKER_PORT))
137 sock.sendall(message + "\n")
138 except socket.error, e:
139 sys.stderr.write("%s\n" % e)
143 self.repository.unlock()
146 opt_irker_url = Option('irker_url',
147 help='URL to mention for branch in messages.')
148 opt_irker_channels = Option('irker_channels',
149 help='Channel(s) to post commit messages to.')
150 opt_irker_colours = Option('irker_colours',
151 help='Colour option for irker.')
152 opt_irker_project = Option('irker_project',
153 help='Project name to use.')