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 |
T |
|
|
17 | Three basic modes of access to Bugzilla are provided: | |
|
18 | 18 | |
|
19 |
1. Access via the Bugzilla XMLRPC interface |
|
|
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 |
|
|
|
48 |
2.1 |
|
|
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 |
|
|
|
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