X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=irkerhook.py;h=48024d514fb24c50700bc62db812b641301f0f18;hb=89754cae1837d13f88549d3541e9e4e2721573a6;hp=6aadd7ed7d5be55309bc3da1bb212aafd8194c5a;hpb=bffe73e8b35d89de8d1f79a6744fcc7fac323545;p=bzrirker.git diff --git a/irkerhook.py b/irkerhook.py index 6aadd7e..48024d5 100644 --- a/irkerhook.py +++ b/irkerhook.py @@ -8,6 +8,8 @@ import socket import sys import json +IRKER_PORT = 6659 + class IrkerSender(object): """An irker message sender.""" @@ -15,22 +17,22 @@ class IrkerSender(object): def __init__(self, branch, revision_id, config): self.config = config self.branch = branch - self.repository = branch.repository self._revision_id = revision_id self.revision = None self.revno = None def _setup_revision_and_revno(self): - self.revision = self.repository.get_revision(self._revision_id) + self.revision = self.branch.repository.get_revision(self._revision_id) self.revno = self.branch.revision_id_to_revno(self._revision_id) def _format(self): + """Munge the commit info into an irc message""" delta = self.branch.repository.get_revision_delta(self._revision_id) files = [] - [files.append(f) for (f,_,_) in delta.added] - [files.append(f) for (f,_,_) in delta.removed] - [files.append(f) for (_,f,_,_,_,_) in delta.renamed] - [files.append(f) for (f,_,_,_,_) in delta.modified] + [files.append(f) for (f, _, _) in delta.added] + [files.append(f) for (f, _, _) in delta.removed] + [files.append(f) for (_, f, _, _, _, _) in delta.renamed] + [files.append(f) for (f, _, _, _, _) in delta.modified] fields = { 'project': self.project(), @@ -39,27 +41,16 @@ class IrkerSender(object): 'rev': '%d' % self.revno, 'files': ' '.join(files), 'logmsg': self.revision.get_summary(), - 'url': self.url(), } - for name, value in self.colours(): - fields[name] = value + fields.update(self.colours()) text = ('%(bold)s%(project)s:%(reset)s ' '%(green)s%(committer)s%(reset)s ' '%(repo)s * %(bold)s%(rev)s%(reset)s / ' - ' %(bold)s%(files)s%(reset)s: %(logmsg)s ' - '%(brown)s%(url)s%(reset)s' % fields) + ' %(bold)s%(files)s%(reset)s: %(logmsg)s ' % fields) return text - def url(self): - """What URL to display in the subject of the mail""" - url = self.config.get('irker_url') - if url is None: - url = self.config.get('public_branch') - if url is None: - url = self.branch.base - return url - def colours(self): + """Utility function to handle the colours""" colour_style = self.config.get('irker_colours') colours = { 'bold': '', @@ -97,7 +88,7 @@ class IrkerSender(object): 'cyan': '\x0310', 'reset': '\x0F', } - return colours.iteritems() + return colours def project(self): project = self.config.get('irker_project') @@ -109,10 +100,13 @@ class IrkerSender(object): """Send the info to irkerd. """ self.branch.lock_read() - self.repository.lock_read() - # These should become configurable at some point - default_server = 'localhost' - IRKER_PORT = 6659 + self.branch.repository.lock_read() + server = self.config.get('irker_server') + if not server: + server = 'localhost' + port = int(self.config.get('irker_port')) + if not port: + port = IRKER_PORT try: # Do this after we have locked, to make things faster. self._setup_revision_and_revno() @@ -128,21 +122,23 @@ class IrkerSender(object): # of irker's code try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.connect((default_server, IRKER_PORT)) + sock.connect((server, port)) sock.sendall(message + "\n") except socket.error, e: sys.stderr.write("%s\n" % e) finally: sock.close() finally: - self.repository.unlock() + self.branch.repository.unlock() self.branch.unlock() -opt_irker_url = Option('irker_url', - help='URL to mention for branch in messages.') opt_irker_channels = Option('irker_channels', help='Channel(s) to post commit messages to.') opt_irker_colours = Option('irker_colours', help='Colour option for irker.') opt_irker_project = Option('irker_project', help='Project name to use.') +opt_irker_server = Option('irker_server', + help='host for the irkerd server (default localhost).') +opt_irker_port = Option('irker_port', + help='port for the irkerd server (default %d)' % IRKER_PORT)