[Python-checkins] hooks: Lots of cosmetic changes
local-hg
python-checkins at python.org
Tue Mar 8 20:59:34 CET 2011
http://hg.python.org/hooks/rev/931248abb746
changeset: 57:931248abb746
user: Antoine Pitrou <solipsis at pitrou.net>
date: Tue Mar 08 20:59:34 2011 +0100
summary:
Lots of cosmetic changes
files:
hgroundup.py
diff --git a/hgroundup.py b/hgroundup.py
--- a/hgroundup.py
+++ b/hgroundup.py
@@ -30,57 +30,83 @@
import re
import smtplib
import posixpath
+import traceback
from string import Template
from email.mime.text import MIMEText
-VERBS = r'(?:\b(?P<verb>close[sd]?|closing|fixe[sd]|fixing|fix)\s+)?'
+from mercurial.templatefilters import person
+
+VERBS = r'(?:\b(?P<verb>close[sd]?|closing|)\s+)?'
ISSUE_PATTERN = re.compile(r'%s(?:#|\bissue|\bbug)\s*(?P<issue_id>[0-9]{4,})'
% VERBS, re.I)
-COMMENT_TEMPLATE = "${commit_msg}\n${changeset_url}"
+COMMENT_TEMPLATE = """\
+New changeset ${changeset_id} by $author in branch '${branch}':
+${commit_msg}
+${changeset_url}
+"""
-def update_issue(ui, repo, node, **kwargs):
+def update_issue(*args, **kwargs):
+ try:
+ _update_issue(*args, **kwargs)
+ except:
+ traceback.print_exc()
+ raise
+
+def _update_issue(ui, repo, node, **kwargs):
"""Update a Roundup issue for corresponding changesets.
Return True if updating the Roundup issue fails, else False.
"""
- repo_url = ui.config('hgroundup', 'repo')
+ repourl = ui.config('hgroundup', 'repourl')
+ if not repourl:
+ repourl = posixpath.join(ui.config('web', 'baseurl'), 'rev/')
+ fromaddr = ui.config('hgroundup', 'fromaddr')
toaddr = ui.config('hgroundup', 'toaddr')
mailrelay = ui.config('hgroundup', 'mailrelay', default='127.0.0.1')
+ for var in ('repourl', 'fromaddr', 'toaddr'):
+ if not locals()[var]:
+ raise RuntimeError(
+ 'roundup hook not configured properly,\nplease '
+ 'set the "%s" property in the [hgroundup] section'
+ % var)
start = repo[node].rev()
issues = {}
for rev in xrange(start, len(repo)):
ctx = repo[rev]
- description = ctx.description()
+ description = ctx.description().strip()
match = ISSUE_PATTERN.search(description)
- ui.warn('match in commit msg: %s\n' % (match and match.groupdict() or 'no'))
+ ui.debug('match in commit msg: %s\n' % (match and match.groupdict() or 'no'))
if not match:
continue
data = match.groupdict()
comment = Template(COMMENT_TEMPLATE).substitute({
- 'changeset_url': posixpath.join(repo_url, str(ctx)),
- 'commit_msg': description,
+ 'author': person(ctx.user()),
+ 'branch': ctx.branch(),
+ 'changeset_id': str(ctx),
+ 'changeset_url': posixpath.join(repourl, str(ctx)),
+ 'commit_msg': description.splitlines()[0],
})
add_comment(issues, ctx.user(), data, comment)
if issues:
try:
- send_comments(mailrelay, toaddr, issues)
- ui.status("Sent email to roundup at " + toaddr + '\n')
+ send_comments(mailrelay, fromaddr, toaddr, issues)
+ ui.status("sent email to roundup at " + toaddr + '\n')
except Exception, err:
# make sure an issue updating roundup does not prevent an
# otherwise successful push.
- ui.warn("Sending email to roundup at %s failed: %s\n" %
+ ui.warn("sending email to roundup at %s failed: %s\n" %
(toaddr, err))
else:
- ui.debug("No issues to send to roundup\n")
+ ui.debug("no issues to send to roundup\n")
return False
def add_comment(issues, user, data, comment):
"""Process a comment made in a commit message."""
- key = (data['issue_id'], user)
+ key = data['issue_id']
if key in issues:
issues[key]['comments'].append(comment)
else:
@@ -91,19 +117,19 @@
'resolution': 'fixed'
})
-def send_comments(mailrelay, toaddr, issues):
+def send_comments(mailrelay, fromaddr, toaddr, issues):
"""Update the Roundup issue with a comment and changeset link."""
- for (issue_id, user), data in issues.iteritems():
- props = ''
- if data['properties']:
- props = ' [%s]' % ';'.join('%s=%s' % x
- for x in data['properties'].iteritems())
- msg = MIMEText('\n\n'.join(data['comments']))
- msg['From'] = user
- msg['To'] = toaddr
- msg['Subject'] = "[issue%s]%s" % (issue_id, props)
- import sys
- print >>sys.stderr, msg['Subject']
- s = smtplib.SMTP(mailrelay)
- s.sendmail(user, toaddr, msg.as_string())
+ s = smtplib.SMTP(mailrelay)
+ try:
+ for issue_id, data in issues.iteritems():
+ props = ''
+ if data['properties']:
+ props = ' [%s]' % ';'.join('%s=%s' % x
+ for x in data['properties'].iteritems())
+ msg = MIMEText('\n\n'.join(data['comments']))
+ msg['From'] = fromaddr
+ msg['To'] = toaddr
+ msg['Subject'] = "[issue%s]%s" % (issue_id, props)
+ s.sendmail(fromaddr, toaddr, msg.as_string())
+ finally:
s.quit()
--
Repository URL: http://hg.python.org/hooks
More information about the Python-checkins
mailing list