##// END OF EJS Templates
bugzilla: add modified XMLRPC mode that uses email to send bug comments....
Jim Hague -
r13802:49b5a1aa default
parent child Browse files
Show More
@@ -14,9 +14,12 b' the Mercurial template mechanism.'
14 14
15 15 The hook does not change bug status.
16 16
17 Two basic modes of access to Bugzilla are provided:
17 Three basic modes of access to Bugzilla are provided:
18 18
19 1. Access via the Bugzilla XMLRPC interface (requires Bugzilla 3.4 or later).
19 1. Access via the Bugzilla XMLRPC interface. Requires Bugzilla 3.4 or later.
20
21 2. Check data via the Bugzilla XMLRPC interface and submit bug change
22 via email to Bugzilla email interface. Requires Bugzilla 3.4 or later.
20 23
21 24 2. Writing directly to the Bugzilla database. Only Bugzilla installations
22 25 using MySQL are supported. Requires Python MySQLdb.
@@ -37,15 +40,24 b' configuration must be readable by all Me'
37 40 that the rights of that user are restricted in Bugzilla to the minimum
38 41 necessary to add comments.
39 42
40 Configuration items common to both access modes:
43 Access via XMLRPC/email behaves uses XMLRPC to query Bugzilla, but sends
44 email to the Bugzilla email interface to submit comments to bugs.
45 The From: address in the email is set to the email address of the Mercurial
46 user, so the comment appears to come from the Mercurial user. In the event
47 that the Mercurial user email is not recognised by Bugzilla as a Bugzilla
48 user, the Bugzilla username and password used to log into Bugzilla are
49 used instead as the source of the comment.
50
51 Configuration items common to all access modes:
41 52
42 53 [bugzilla]
43 54 version
44 55 This access type to use. Values recognised are:
45 xmlrpc Bugzilla XMLRPC interface.
46 3.0 MySQL access, Bugzilla 3.0 and later.
47 2.18 MySQL access, Bugzilla 2.18 and up to but not including 3.0.
48 2.16 MySQL access, Bugzilla 2.16 and up to but not including 2.18.
56 xmlrpc Bugzilla XMLRPC interface.
57 xmlrpc+email Bugzilla XMLRPC and email interfaces.
58 3.0 MySQL access, Bugzilla 3.0 and later.
59 2.18 MySQL access, Bugzilla 2.18 and up to but not including 3.0.
60 2.16 MySQL access, Bugzilla 2.16 and up to but not including 2.18.
49 61
50 62 regexp
51 63 Regular expression to match bug IDs in changeset commit message.
@@ -80,6 +92,18 b' baseurl'
80 92 Base URL for browsing Mercurial repositories. Referenced from
81 93 templates as {hgweb}.
82 94
95 Configuration items common to XMLRPC+email and MySQL access modes:
96
97 usermap
98 Path of file containing Mercurial committer email to Bugzilla user email
99 mappings. If specified, the file should contain one mapping per
100 line, "committer"="Bugzilla user". See also the [usermap] section.
101
102 [usermap]
103 The [usermap] section is used to specify mappings of Mercurial
104 committer email to Bugzilla user email. See also [bugzilla].usermap.
105 Contains entries of the form "committer"="Bugzilla user".
106
83 107 XMLRPC access mode configuration:
84 108
85 109 [bugzilla]
@@ -93,6 +117,16 b' user'
93 117 password
94 118 The password for Bugzilla login.
95 119
120 XMLRPC+email access mode uses the XMLRPC access mode configuration items,
121 and also:
122
123 [bugzilla]
124 bzemail
125 The Bugzilla email address.
126
127 In addition, the Mercurial email settings must be configured. See the
128 documentation for 'hgrc', sections '[email]' and '[smtp]'.
129
96 130 MySQL access mode configuration:
97 131
98 132 [bugzilla]
@@ -127,16 +161,6 b' notify'
127 161 from 2.18 it is "cd %(bzdir)s && perl -T contrib/sendbugmail.pl
128 162 %(id)s %(user)s".
129 163
130 usermap
131 Path of file containing Mercurial committer ID to Bugzilla user ID
132 mappings. If specified, the file should contain one mapping per
133 line, "committer"="Bugzilla user". See also the [usermap] section.
134
135 [usermap]
136 The [usermap] section is used to specify mappings of Mercurial
137 committer email to Bugzilla user email. See also [bugzilla].usermap.
138 Contains entries of the form "committer"="Bugzilla user".
139
140 164 Activating the extension::
141 165
142 166 [extensions]
@@ -162,6 +186,22 b" repositories in '/var/local/hg/repos/'. "
162 186 [web]
163 187 baseurl=http://my-project.org/hg
164 188
189 XMLRPC+email example configuration. This uses the Bugzilla at
190 'http://my-project.org/bugzilla', logging in as user 'bugmail@my-project.org'
191 wityh password 'plugh'. It is used with a collection of Mercurial
192 repositories in '/var/local/hg/repos/'. Bug comments are sent to the
193 Bugzilla email address 'buzilla@my-project.org'. ::
194
195 [bugzilla]
196 user=bugmail@my-project.org
197 password=plugh
198 version=xmlrpc
199 bzemail=bugzilla@my-project.org
200
201 [web]
202 baseurl=https://dev.laicatc.com/hg
203 bugzillaurl=https://dev.laicatc.com/bugzilla
204
165 205 MySQL example configuration. This is for a collection of Mercurial
166 206 repositories in '/var/local/hg/repos/' used with a local Bugzilla 3.2
167 207 installation in /opt/bugzilla-3.2. The MySQL database is on 'localhost',
@@ -185,7 +225,7 b" username 'bugs' password 'XYZZY'. ::"
185 225 [usermap]
186 226 user@emaildomain.com=user.name@bugzilladomain.com
187 227
188 Both the above add a comment to the Bugzilla bug record of the form::
228 All the above add a comment to the Bugzilla bug record of the form::
189 229
190 230 Changeset 3b16791d6642 in repository-name.
191 231 http://dev.domain.com/hg/repository-name/rev/3b16791d6642
@@ -195,7 +235,7 b' Both the above add a comment to the Bugz'
195 235
196 236 from mercurial.i18n import _
197 237 from mercurial.node import short
198 from mercurial import cmdutil, templater, util
238 from mercurial import cmdutil, mail, templater, util
199 239 import re, time, xmlrpclib
200 240
201 241 class bzaccess(object):
@@ -520,6 +560,59 b' class bzxmlrpc(bzaccess):'
520 560 def add_comment(self, bugid, text, committer):
521 561 self.bzproxy.Bug.add_comment(dict(id=bugid, comment=text))
522 562
563 class bzxmlrpcemail(bzxmlrpc):
564 """Read data from Bugzilla via XMLRPC, send updates via email.
565
566 Advantages of sending updates via email:
567 1. Comments can be added as any user, not just logged in user.
568 2. Bug statuses and other fields not accessible via XMLRPC can
569 be updated. This is not currently used.
570 """
571
572 def __init__(self, ui):
573 bzxmlrpc.__init__(self, ui)
574
575 self.bzemail = self.ui.config('bugzilla', 'bzemail')
576 if not self.bzemail:
577 raise util.Abort(_("configuration 'bzemail' missing"))
578 mail.validateconfig(self.ui)
579
580 def send_bug_modify_email(self, bugid, commands, comment, committer):
581 '''send modification message to Bugzilla bug via email.
582
583 The message format is documented in the Bugzilla email_in.pl
584 specification. commands is a list of command lines, comment is the
585 comment text.
586
587 To stop users from crafting commit comments with
588 Bugzilla commands, specify the bug ID via the message body, rather
589 than the subject line, and leave a blank line after it.
590 '''
591 user = self.map_committer(committer)
592 matches = self.bzproxy.User.get(dict(match=[user]))
593 if not matches['users']:
594 user = self.ui.config('bugzilla', 'user', 'bugs')
595 matches = self.bzproxy.User.get(dict(match=[user]))
596 if not matches['users']:
597 raise util.Abort(_("default bugzilla user %s email not found") %
598 user)
599 user = matches['users'][0]['email']
600
601 text = "\n".join(commands) + "\n@bug_id = %d\n\n" % bugid + comment
602
603 _charsets = mail._charsets(self.ui)
604 user = mail.addressencode(self.ui, user, _charsets)
605 bzemail = mail.addressencode(self.ui, self.bzemail, _charsets)
606 msg = mail.mimeencode(self.ui, text, _charsets)
607 msg['From'] = user
608 msg['To'] = bzemail
609 msg['Subject'] = mail.headencode(self.ui, "Bug modification", _charsets)
610 sendmail = mail.connect(self.ui)
611 sendmail(user, bzemail, msg.as_string())
612
613 def add_comment(self, bugid, text, committer):
614 self.send_bug_modify_email(bugid, [], text, committer)
615
523 616 class bugzilla(object):
524 617 # supported versions of bugzilla. different versions have
525 618 # different schemas.
@@ -527,7 +620,8 b' class bugzilla(object):'
527 620 '2.16': bzmysql,
528 621 '2.18': bzmysql_2_18,
529 622 '3.0': bzmysql_3_0,
530 'xmlrpc': bzxmlrpc
623 'xmlrpc': bzxmlrpc,
624 'xmlrpc+email': bzxmlrpcemail
531 625 }
532 626
533 627 _default_bug_re = (r'bugs?\s*,?\s*(?:#|nos?\.?|num(?:ber)?s?)?\s*'
General Comments 0
You need to be logged in to leave comments. Login now