import sys
import json
+IRKER_PORT = 6659
+
class IrkerSender(object):
"""An irker message sender."""
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):
'files': ' '.join(files),
'logmsg': self.revision.get_summary(),
}
+ if len(fields['files']) > 250:
+ # Dangerously long looking list of files, so truncate it
+ fields['files'] = fields['files'][:250]
fields.update(self.colours())
text = ('%(bold)s%(project)s:%(reset)s '
'%(green)s%(committer)s%(reset)s '
"""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()
channels = self.config.get('irker_channels')
if channels:
channels = channels.split(',')
- msg = unicode(self._format())
- # We rely on the server truncating, rather than trying to be
- # too fancy here
+ # If we're too long, we might not get any notification, so
+ # we truncate the msg to max 450 chars, and hope that's
+ # going to be within the 510 irc limit
+ msg = unicode(self._format())[:450]
message = json.dumps({"to": channels, "privmsg": msg})
if channels:
# We assume tcp, since I'm lazy, so we just grab that bit
# 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_channels = Option('irker_channels',
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)