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 (
18 class IrkerSender(object):
19 """An irker message sender."""
21 def __init__(self, branch, revision_id, config, local_branch=None,
25 self.repository = branch.repository
26 if (local_branch is not None and
27 local_branch.repository.has_revision(revision_id)):
28 self.repository = local_branch.repository
29 self._revision_id = revision_id
34 def _setup_revision_and_revno(self):
35 self.revision = self.repository.get_revision(self._revision_id)
36 self.revno = self.branch.revision_id_to_revno(self._revision_id)
40 'project': self.project(),
41 'committer': self.revision.committer,
43 'rev': '%d' % self.revno,
45 'logmsg': self.revision.get_summary(),
48 for name, value in self.colours():
50 text = ('%(bold)s%(project)s:%(reset)s '
51 '%(green)s%(committer)s%(reset)s '
52 '%(repo)s * %(bold)s%(rev)s%(reset)s / '
53 ' %(bold)s%(files)s%(reset)s: %(logmsg)s '
54 '%(brown)s%(url)s%(reset)s' % fields)
58 from bzrlib import log
60 rev1 = rev2 = self.revno
65 # use 'replace' so that we don't abort if trying to write out
66 # in e.g. the default C locale.
68 # Following bzr-email, we use StringIO.StringIO to minimise possible
70 from StringIO import StringIO
73 lf = log.log_formatter('line',
78 if len(self.revision.parent_ids) <= 1:
79 # This is not a merge, so we can special case the display of one
80 # revision, and not have to encur the show_log overhead.
81 lr = log.LogRevision(self.revision, self.revno, 0, None)
84 # let the show_log code figure out what revisions need to be
85 # displayed, as this is a merge
86 log.show_log(self.branch,
93 return outf.getvalue()
96 """What URL to display in the subject of the mail"""
97 url = self.config.get('irker_url')
99 url = self.config.get('public_branch')
101 url = self.branch.base
105 colour_style = self.config.get('irker_colors')
117 # Vaues taken from irker's irkerhook.py
118 if colour_style == 'ANSI':
121 'green': '\x1b[1;32m'
124 'yellow': '\x1b[1;33m'
126 'magenta': '\x1b[35m'
130 elif colour_style == 'mIRC':
145 projet = self.config.get('irker_project')
147 project = 'No Project name set'
151 """Send the info to irkerd.
153 self.branch.lock_read()
154 self.repository.lock_read()
156 # Do this after we have locked, to make things faster.
157 self._setup_revision_and_revno()
159 self.repository.unlock()
162 opt_irker_url = Option('irker_url',
163 help='URL to mention for branch in messages.')
164 opt_irker_channels = Option('irker_channels',
165 help='Channel(s) to post commit messages to.')
166 opt_irker_colours = Option('irker_colours',
167 help='Colour option for irker.')
168 opt_irker_project = Option('irker_project',
169 help='Project name to use.')