author | Brodie Rao <brodie@bitheap.org> |
Wed, 30 Mar 2011 20:00:24 -0700 | |
changeset 13816 | 2540f8087e02 |
parent 13802 | 49b5a1aaf726 |
child 13832 | 9358fdeaa532 |
permissions | -rw-r--r-- |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
1 |
# bugzilla.py - bugzilla integration for mercurial |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
2 |
# |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
3 |
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com> |
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
4 |
# Copyright 2011 Jim Hague <jim.hague@acm.org> |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
5 |
# |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
6 |
# This software may be used and distributed according to the terms of the |
10263 | 7 |
# GNU General Public License version 2 or any later version. |
7504
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
8 |
|
8935
f4f0e902b750
extensions: change descriptions for hook-providing extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8894
diff
changeset
|
9 |
'''hooks for integrating with the Bugzilla bug tracker |
7504
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
10 |
|
9252
b03aa86f4c10
bugzilla: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9204
diff
changeset
|
11 |
This hook extension adds comments on bugs in Bugzilla when changesets |
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
12 |
that refer to bugs by Bugzilla ID are seen. The comment is formatted using |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
13 |
the Mercurial template mechanism. |
7504
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
14 |
|
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
15 |
The hook does not change bug status. |
7504
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
16 |
|
13802
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
17 |
Three basic modes of access to Bugzilla are provided: |
7504
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
18 |
|
13802
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
19 |
1. Access via the Bugzilla XMLRPC interface. Requires Bugzilla 3.4 or later. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
20 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
21 |
2. Check data via the Bugzilla XMLRPC interface and submit bug change |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
22 |
via email to Bugzilla email interface. Requires Bugzilla 3.4 or later. |
9203
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
23 |
|
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
24 |
2. Writing directly to the Bugzilla database. Only Bugzilla installations |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
25 |
using MySQL are supported. Requires Python MySQLdb. |
9203
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
26 |
|
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
27 |
Writing directly to the database is susceptible to schema changes, and |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
28 |
relies on a Bugzilla contrib script to send out bug change |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
29 |
notification emails. This script runs as the user running Mercurial, |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
30 |
must be run on the host with the Bugzilla install, and requires |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
31 |
permission to read Bugzilla configuration details and the necessary |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
32 |
MySQL user and password to have full access rights to the Bugzilla |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
33 |
database. For these reasons this access mode is now considered |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
34 |
deprecated, and will not be updated for new Bugzilla versions going |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
35 |
forward. |
9203
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
36 |
|
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
37 |
Access via XMLRPC needs a Bugzilla username and password to be specified |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
38 |
in the configuration. Comments are added under that username. Since the |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
39 |
configuration must be readable by all Mercurial users, it is recommended |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
40 |
that the rights of that user are restricted in Bugzilla to the minimum |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
41 |
necessary to add comments. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
42 |
|
13802
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
43 |
Access via XMLRPC/email behaves uses XMLRPC to query Bugzilla, but sends |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
44 |
email to the Bugzilla email interface to submit comments to bugs. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
45 |
The From: address in the email is set to the email address of the Mercurial |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
46 |
user, so the comment appears to come from the Mercurial user. In the event |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
47 |
that the Mercurial user email is not recognised by Bugzilla as a Bugzilla |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
48 |
user, the Bugzilla username and password used to log into Bugzilla are |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
49 |
used instead as the source of the comment. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
50 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
51 |
Configuration items common to all access modes: |
9203
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
52 |
|
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
53 |
[bugzilla] |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
54 |
version |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
55 |
This access type to use. Values recognised are: |
13802
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
56 |
xmlrpc Bugzilla XMLRPC interface. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
57 |
xmlrpc+email Bugzilla XMLRPC and email interfaces. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
58 |
3.0 MySQL access, Bugzilla 3.0 and later. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
59 |
2.18 MySQL access, Bugzilla 2.18 and up to but not including 3.0. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
60 |
2.16 MySQL access, Bugzilla 2.16 and up to but not including 2.18. |
7985
0edca606c0f1
bugzilla: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7762
diff
changeset
|
61 |
|
9203
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
62 |
regexp |
9252
b03aa86f4c10
bugzilla: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9204
diff
changeset
|
63 |
Regular expression to match bug IDs in changeset commit message. |
b03aa86f4c10
bugzilla: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9204
diff
changeset
|
64 |
Must contain one "()" group. The default expression matches 'Bug |
b03aa86f4c10
bugzilla: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9204
diff
changeset
|
65 |
1234', 'Bug no. 1234', 'Bug number 1234', 'Bugs 1234,5678', 'Bug |
b03aa86f4c10
bugzilla: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9204
diff
changeset
|
66 |
1234 and 5678' and variations thereof. Matching is case insensitive. |
9203
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
67 |
|
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
68 |
style |
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
69 |
The style file to use when formatting comments. |
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
70 |
|
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
71 |
template |
9252
b03aa86f4c10
bugzilla: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9204
diff
changeset
|
72 |
Template to use when formatting comments. Overrides style if |
b03aa86f4c10
bugzilla: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9204
diff
changeset
|
73 |
specified. In addition to the usual Mercurial keywords, the |
b03aa86f4c10
bugzilla: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9204
diff
changeset
|
74 |
extension specifies:: |
9203
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
75 |
|
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
76 |
{bug} The Bugzilla bug ID. |
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
77 |
{root} The full pathname of the Mercurial repository. |
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
78 |
{webroot} Stripped pathname of the Mercurial repository. |
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
79 |
{hgweb} Base URL for browsing Mercurial repositories. |
7504
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
80 |
|
9203
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
81 |
Default 'changeset {node|short} in repo {root} refers ' |
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
82 |
'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}' |
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
83 |
|
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
84 |
strip |
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
85 |
The number of path separator characters to strip from the front of the |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
86 |
Mercurial repository path ('{root}' in templates) to produce '{webroot}'. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
87 |
For example, a repository with '{root}' '/var/local/my-project' with a |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
88 |
strip of 2 gives a value for '{webroot}' of 'my-project'. Default 0. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
89 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
90 |
[web] |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
91 |
baseurl |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
92 |
Base URL for browsing Mercurial repositories. Referenced from |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
93 |
templates as {hgweb}. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
94 |
|
13802
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
95 |
Configuration items common to XMLRPC+email and MySQL access modes: |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
96 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
97 |
usermap |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
98 |
Path of file containing Mercurial committer email to Bugzilla user email |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
99 |
mappings. If specified, the file should contain one mapping per |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
100 |
line, "committer"="Bugzilla user". See also the [usermap] section. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
101 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
102 |
[usermap] |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
103 |
The [usermap] section is used to specify mappings of Mercurial |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
104 |
committer email to Bugzilla user email. See also [bugzilla].usermap. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
105 |
Contains entries of the form "committer"="Bugzilla user". |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
106 |
|
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
107 |
XMLRPC access mode configuration: |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
108 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
109 |
[bugzilla] |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
110 |
bzurl |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
111 |
The base URL for the Bugzilla installation. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
112 |
Default 'http://localhost/bugzilla'. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
113 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
114 |
user |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
115 |
The username to use to log into Bugzilla via XMLRPC. Default 'bugs'. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
116 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
117 |
password |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
118 |
The password for Bugzilla login. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
119 |
|
13802
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
120 |
XMLRPC+email access mode uses the XMLRPC access mode configuration items, |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
121 |
and also: |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
122 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
123 |
[bugzilla] |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
124 |
bzemail |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
125 |
The Bugzilla email address. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
126 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
127 |
In addition, the Mercurial email settings must be configured. See the |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
128 |
documentation for 'hgrc', sections '[email]' and '[smtp]'. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
129 |
|
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
130 |
MySQL access mode configuration: |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
131 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
132 |
[bugzilla] |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
133 |
host |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
134 |
Hostname of the MySQL server holding the Bugzilla database. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
135 |
Default 'localhost'. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
136 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
137 |
db |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
138 |
Name of the Bugzilla database in MySQL. Default 'bugs'. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
139 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
140 |
user |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
141 |
Username to use to access MySQL server. Default 'bugs'. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
142 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
143 |
password |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
144 |
Password to use to access MySQL server. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
145 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
146 |
timeout |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
147 |
Database connection timeout (seconds). Default 5. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
148 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
149 |
bzuser |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
150 |
Fallback Bugzilla user name to record comments with, if changeset |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
151 |
committer cannot be found as a Bugzilla user. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
152 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
153 |
bzdir |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
154 |
Bugzilla install directory. Used by default notify. Default |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
155 |
'/var/www/html/bugzilla'. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
156 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
157 |
notify |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
158 |
The command to run to get Bugzilla to send bug change notification |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
159 |
emails. Substitutes from a map with 3 keys, 'bzdir', 'id' (bug id) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
160 |
and 'user' (committer bugzilla email). Default depends on version; |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
161 |
from 2.18 it is "cd %(bzdir)s && perl -T contrib/sendbugmail.pl |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
162 |
%(id)s %(user)s". |
7504
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
163 |
|
9203
e4dbd49b88a9
bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents:
9054
diff
changeset
|
164 |
Activating the extension:: |
7504
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
165 |
|
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
166 |
[extensions] |
10112
703db37d186b
hgext: enable extensions without "hgext." prefix in help texts
Martin Geisler <mg@lazybytes.net>
parents:
9252
diff
changeset
|
167 |
bugzilla = |
7504
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
168 |
|
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
169 |
[hooks] |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
170 |
# run bugzilla hook on every change pulled or pushed in here |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
171 |
incoming.bugzilla = python:hgext.bugzilla.hook |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
172 |
|
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
173 |
Example configurations: |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
174 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
175 |
XMLRPC example configuration. This uses the Bugzilla at |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
176 |
'http://my-project.org/bugzilla', logging in as user 'bugmail@my-project.org' |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
177 |
wityh password 'plugh'. It is used with a collection of Mercurial |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
178 |
repositories in '/var/local/hg/repos/'. :: |
7504
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
179 |
|
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
180 |
[bugzilla] |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
181 |
bzurl=http://my-project.org/bugzilla |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
182 |
user=bugmail@my-project.org |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
183 |
password=plugh |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
184 |
version=xmlrpc |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
185 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
186 |
[web] |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
187 |
baseurl=http://my-project.org/hg |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
188 |
|
13802
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
189 |
XMLRPC+email example configuration. This uses the Bugzilla at |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
190 |
'http://my-project.org/bugzilla', logging in as user 'bugmail@my-project.org' |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
191 |
wityh password 'plugh'. It is used with a collection of Mercurial |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
192 |
repositories in '/var/local/hg/repos/'. Bug comments are sent to the |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
193 |
Bugzilla email address 'buzilla@my-project.org'. :: |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
194 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
195 |
[bugzilla] |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
196 |
user=bugmail@my-project.org |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
197 |
password=plugh |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
198 |
version=xmlrpc |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
199 |
bzemail=bugzilla@my-project.org |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
200 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
201 |
[web] |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
202 |
baseurl=https://dev.laicatc.com/hg |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
203 |
bugzillaurl=https://dev.laicatc.com/bugzilla |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
204 |
|
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
205 |
MySQL example configuration. This is for a collection of Mercurial |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
206 |
repositories in '/var/local/hg/repos/' used with a local Bugzilla 3.2 |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
207 |
installation in /opt/bugzilla-3.2. The MySQL database is on 'localhost', |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
208 |
the Bugzilla database name is 'bugs' and MySQL is accessed with MySQL |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
209 |
username 'bugs' password 'XYZZY'. :: |
7504
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
210 |
|
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
211 |
[bugzilla] |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
212 |
host=localhost |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
213 |
password=XYZZY |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
214 |
version=3.0 |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
215 |
bzuser=unknown@domain.com |
7618
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
216 |
bzdir=/opt/bugzilla-3.2 |
9204
8d59e43854d9
bugzilla: wrap example template line
Martin Geisler <mg@lazybytes.net>
parents:
9203
diff
changeset
|
217 |
template=Changeset {node|short} in {root|basename}. |
8d59e43854d9
bugzilla: wrap example template line
Martin Geisler <mg@lazybytes.net>
parents:
9203
diff
changeset
|
218 |
{hgweb}/{webroot}/rev/{node|short}\\n |
8d59e43854d9
bugzilla: wrap example template line
Martin Geisler <mg@lazybytes.net>
parents:
9203
diff
changeset
|
219 |
{desc}\\n |
7504
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
220 |
strip=5 |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
221 |
|
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
222 |
[web] |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
223 |
baseurl=http://dev.domain.com/hg |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
224 |
|
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
225 |
[usermap] |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
226 |
user@emaildomain.com=user.name@bugzilladomain.com |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
227 |
|
13802
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
228 |
All the above add a comment to the Bugzilla bug record of the form:: |
7504
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
229 |
|
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
230 |
Changeset 3b16791d6642 in repository-name. |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
231 |
http://dev.domain.com/hg/repository-name/rev/3b16791d6642 |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
232 |
|
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
233 |
Changeset commit comment. Bug 1234. |
d8cd79fbed3c
Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents:
7493
diff
changeset
|
234 |
''' |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
235 |
|
3891 | 236 |
from mercurial.i18n import _ |
6211
f89fd07fc51d
Expand import * to allow Pyflakes to find problems
Joel Rosdahl <joel@rosdahl.net>
parents:
5975
diff
changeset
|
237 |
from mercurial.node import short |
13802
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
238 |
from mercurial import cmdutil, mail, templater, util |
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
239 |
import re, time, xmlrpclib |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
240 |
|
13800
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
241 |
class bzaccess(object): |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
242 |
'''Base class for access to Bugzilla.''' |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
243 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
244 |
def __init__(self, ui): |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
245 |
self.ui = ui |
13800
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
246 |
usermap = self.ui.config('bugzilla', 'usermap') |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
247 |
if usermap: |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
248 |
self.ui.readconfig(usermap, sections=['usermap']) |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
249 |
|
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
250 |
def map_committer(self, user): |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
251 |
'''map name of committer to Bugzilla user name.''' |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
252 |
for committer, bzuser in self.ui.configitems('usermap'): |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
253 |
if committer.lower() == user.lower(): |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
254 |
return bzuser |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
255 |
return user |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
256 |
|
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
257 |
# Methods to be implemented by access classes. |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
258 |
def filter_real_bug_ids(self, ids): |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
259 |
'''remove bug IDs that do not exist in Bugzilla from set.''' |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
260 |
pass |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
261 |
|
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
262 |
def filter_cset_known_bug_ids(self, node, ids): |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
263 |
'''remove bug IDs where node occurs in comment text from set.''' |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
264 |
pass |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
265 |
|
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
266 |
def add_comment(self, bugid, text, committer): |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
267 |
'''add comment to bug. |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
268 |
|
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
269 |
If possible add the comment as being from the committer of |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
270 |
the changeset. Otherwise use the default Bugzilla user. |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
271 |
''' |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
272 |
pass |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
273 |
|
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
274 |
def notify(self, ids, committer): |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
275 |
'''Force sending of Bugzilla notification emails.''' |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
276 |
pass |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
277 |
|
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
278 |
# Bugzilla via direct access to MySQL database. |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
279 |
class bzmysql(bzaccess): |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
280 |
'''Support for direct MySQL access to Bugzilla. |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
281 |
|
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
282 |
The earliest Bugzilla version this is tested with is version 2.16. |
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
283 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
284 |
If your Bugzilla is version 3.2 or above, you are strongly |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
285 |
recommended to use the XMLRPC access method instead. |
13800
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
286 |
''' |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
287 |
|
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
288 |
@staticmethod |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
289 |
def sql_buglist(ids): |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
290 |
'''return SQL-friendly list of bug ids''' |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
291 |
return '(' + ','.join(map(str, ids)) + ')' |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
292 |
|
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
293 |
_MySQLdb = None |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
294 |
|
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
295 |
def __init__(self, ui): |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
296 |
try: |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
297 |
import MySQLdb as mysql |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
298 |
bzmysql._MySQLdb = mysql |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
299 |
except ImportError, err: |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
300 |
raise util.Abort(_('python mysql support not available: %s') % err) |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
301 |
|
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
302 |
bzaccess.__init__(self, ui) |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
303 |
|
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
304 |
host = self.ui.config('bugzilla', 'host', 'localhost') |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
305 |
user = self.ui.config('bugzilla', 'user', 'bugs') |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
306 |
passwd = self.ui.config('bugzilla', 'password') |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
307 |
db = self.ui.config('bugzilla', 'db', 'bugs') |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
308 |
timeout = int(self.ui.config('bugzilla', 'timeout', 5)) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
309 |
self.ui.note(_('connecting to %s:%s as %s, password %s\n') % |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
310 |
(host, db, user, '*' * len(passwd))) |
13800
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
311 |
self.conn = bzmysql._MySQLdb.connect(host=host, |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
312 |
user=user, passwd=passwd, |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
313 |
db=db, |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
314 |
connect_timeout=timeout) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
315 |
self.cursor = self.conn.cursor() |
7019
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
316 |
self.longdesc_id = self.get_longdesc_id() |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
317 |
self.user_ids = {} |
7618
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
318 |
self.default_notify = "cd %(bzdir)s && ./processmail %(id)s %(user)s" |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
319 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
320 |
def run(self, *args, **kwargs): |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
321 |
'''run a query.''' |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
322 |
self.ui.note(_('query: %s %s\n') % (args, kwargs)) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
323 |
try: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
324 |
self.cursor.execute(*args, **kwargs) |
13800
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
325 |
except bzmysql._MySQLdb.MySQLError: |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
326 |
self.ui.note(_('failed query: %s %s\n') % (args, kwargs)) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
327 |
raise |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
328 |
|
7019
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
329 |
def get_longdesc_id(self): |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
330 |
'''get identity of longdesc field''' |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
331 |
self.run('select fieldid from fielddefs where name = "longdesc"') |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
332 |
ids = self.cursor.fetchall() |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
333 |
if len(ids) != 1: |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
334 |
raise util.Abort(_('unknown database schema')) |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
335 |
return ids[0][0] |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
336 |
|
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
337 |
def filter_real_bug_ids(self, ids): |
13799
d04fc5582772
bugzilla: keep bug IDs in set.
Jim Hague <jim.hague@acm.org>
parents:
13798
diff
changeset
|
338 |
'''filter not-existing bug ids from set.''' |
13800
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
339 |
self.run('select bug_id from bugs where bug_id in %s' % |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
340 |
bzmysql.sql_buglist(ids)) |
13799
d04fc5582772
bugzilla: keep bug IDs in set.
Jim Hague <jim.hague@acm.org>
parents:
13798
diff
changeset
|
341 |
return set([c[0] for c in self.cursor.fetchall()]) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
342 |
|
13798
9c9fa78f4e2d
bugzilla: rename filter_unknown_bug_ids to reflect its actual purpose.
Jim Hague <jim.hague@acm.org>
parents:
11567
diff
changeset
|
343 |
def filter_cset_known_bug_ids(self, node, ids): |
13799
d04fc5582772
bugzilla: keep bug IDs in set.
Jim Hague <jim.hague@acm.org>
parents:
13798
diff
changeset
|
344 |
'''filter bug ids that already refer to this changeset from set.''' |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
345 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
346 |
self.run('''select bug_id from longdescs where |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
347 |
bug_id in %s and thetext like "%%%s%%"''' % |
13800
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
348 |
(bzmysql.sql_buglist(ids), short(node))) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
349 |
for (id,) in self.cursor.fetchall(): |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
350 |
self.ui.status(_('bug %d already knows about changeset %s\n') % |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
351 |
(id, short(node))) |
13799
d04fc5582772
bugzilla: keep bug IDs in set.
Jim Hague <jim.hague@acm.org>
parents:
13798
diff
changeset
|
352 |
ids.discard(id) |
d04fc5582772
bugzilla: keep bug IDs in set.
Jim Hague <jim.hague@acm.org>
parents:
13798
diff
changeset
|
353 |
return ids |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
354 |
|
7618
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
355 |
def notify(self, ids, committer): |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
356 |
'''tell bugzilla to send mail.''' |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
357 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
358 |
self.ui.status(_('telling bugzilla to send mail:\n')) |
7618
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
359 |
(user, userid) = self.get_bugzilla_user(committer) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
360 |
for id in ids: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
361 |
self.ui.status(_(' bug %s\n') % id) |
7618
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
362 |
cmdfmt = self.ui.config('bugzilla', 'notify', self.default_notify) |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
363 |
bzdir = self.ui.config('bugzilla', 'bzdir', '/var/www/html/bugzilla') |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
364 |
try: |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
365 |
# Backwards-compatible with old notify string, which |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
366 |
# took one string. This will throw with a new format |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
367 |
# string. |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
368 |
cmd = cmdfmt % id |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
369 |
except TypeError: |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
370 |
cmd = cmdfmt % {'bzdir': bzdir, 'id': id, 'user': user} |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
371 |
self.ui.note(_('running notify command %s\n') % cmd) |
6548
962eb403165b
replace usage of os.popen() with util.popen()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6211
diff
changeset
|
372 |
fp = util.popen('(%s) 2>&1' % cmd) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
373 |
out = fp.read() |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
374 |
ret = fp.close() |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
375 |
if ret: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
376 |
self.ui.warn(out) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
377 |
raise util.Abort(_('bugzilla notify command %s') % |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
378 |
util.explain_exit(ret)[0]) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
379 |
self.ui.status(_('done\n')) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
380 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
381 |
def get_user_id(self, user): |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
382 |
'''look up numeric bugzilla user id.''' |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
383 |
try: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
384 |
return self.user_ids[user] |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
385 |
except KeyError: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
386 |
try: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
387 |
userid = int(user) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
388 |
except ValueError: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
389 |
self.ui.note(_('looking up user %s\n') % user) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
390 |
self.run('''select userid from profiles |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
391 |
where login_name like %s''', user) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
392 |
all = self.cursor.fetchall() |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
393 |
if len(all) != 1: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
394 |
raise KeyError(user) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
395 |
userid = int(all[0][0]) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
396 |
self.user_ids[user] = userid |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
397 |
return userid |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
398 |
|
7618
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
399 |
def get_bugzilla_user(self, committer): |
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
400 |
'''See if committer is a registered bugzilla user. Return |
7618
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
401 |
bugzilla username and userid if so. If not, return default |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
402 |
bugzilla username and userid.''' |
2306
4c67ba93560b
bugzilla: allow to map between committer email and bugzilla user name.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2239
diff
changeset
|
403 |
user = self.map_committer(committer) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
404 |
try: |
2306
4c67ba93560b
bugzilla: allow to map between committer email and bugzilla user name.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2239
diff
changeset
|
405 |
userid = self.get_user_id(user) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
406 |
except KeyError: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
407 |
try: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
408 |
defaultuser = self.ui.config('bugzilla', 'bzuser') |
2306
4c67ba93560b
bugzilla: allow to map between committer email and bugzilla user name.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2239
diff
changeset
|
409 |
if not defaultuser: |
4c67ba93560b
bugzilla: allow to map between committer email and bugzilla user name.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2239
diff
changeset
|
410 |
raise util.Abort(_('cannot find bugzilla user id for %s') % |
4c67ba93560b
bugzilla: allow to map between committer email and bugzilla user name.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2239
diff
changeset
|
411 |
user) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
412 |
userid = self.get_user_id(defaultuser) |
7618
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
413 |
user = defaultuser |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
414 |
except KeyError: |
2306
4c67ba93560b
bugzilla: allow to map between committer email and bugzilla user name.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2239
diff
changeset
|
415 |
raise util.Abort(_('cannot find bugzilla user id for %s or %s') % |
4c67ba93560b
bugzilla: allow to map between committer email and bugzilla user name.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2239
diff
changeset
|
416 |
(user, defaultuser)) |
7618
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
417 |
return (user, userid) |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
418 |
|
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
419 |
def add_comment(self, bugid, text, committer): |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
420 |
'''add comment to bug. try adding comment as committer of |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
421 |
changeset, otherwise as default bugzilla user.''' |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
422 |
(user, userid) = self.get_bugzilla_user(committer) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
423 |
now = time.strftime('%Y-%m-%d %H:%M:%S') |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
424 |
self.run('''insert into longdescs |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
425 |
(bug_id, who, bug_when, thetext) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
426 |
values (%s, %s, %s, %s)''', |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
427 |
(bugid, userid, now, text)) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
428 |
self.run('''insert into bugs_activity (bug_id, who, bug_when, fieldid) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
429 |
values (%s, %s, %s, %s)''', |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
430 |
(bugid, userid, now, self.longdesc_id)) |
7493
518afef5e350
Fix Bugzilla integration to work with new Bugzilla 3.2.
Jim Hague <jim.hague@acm.org>
parents:
7369
diff
changeset
|
431 |
self.conn.commit() |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
432 |
|
13800
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
433 |
class bzmysql_2_18(bzmysql): |
7618
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
434 |
'''support for bugzilla 2.18 series.''' |
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
435 |
|
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
436 |
def __init__(self, ui): |
13800
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
437 |
bzmysql.__init__(self, ui) |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
438 |
self.default_notify = \ |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
439 |
"cd %(bzdir)s && perl -T contrib/sendbugmail.pl %(id)s %(user)s" |
7618
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
440 |
|
13800
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
441 |
class bzmysql_3_0(bzmysql_2_18): |
7019
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
442 |
'''support for bugzilla 3.0 series.''' |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
443 |
|
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
444 |
def __init__(self, ui): |
13800
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
445 |
bzmysql_2_18.__init__(self, ui) |
7019
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
446 |
|
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
447 |
def get_longdesc_id(self): |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
448 |
'''get identity of longdesc field''' |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
449 |
self.run('select id from fielddefs where name = "longdesc"') |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
450 |
ids = self.cursor.fetchall() |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
451 |
if len(ids) != 1: |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
452 |
raise util.Abort(_('unknown database schema')) |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
453 |
return ids[0][0] |
6b1ece890f9a
Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents:
6762
diff
changeset
|
454 |
|
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
455 |
# Buzgilla via XMLRPC interface. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
456 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
457 |
class CookieSafeTransport(xmlrpclib.SafeTransport): |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
458 |
"""A SafeTransport that retains cookies over its lifetime. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
459 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
460 |
The regular xmlrpclib transports ignore cookies. Which causes |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
461 |
a bit of a problem when you need a cookie-based login, as with |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
462 |
the Bugzilla XMLRPC interface. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
463 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
464 |
So this is a SafeTransport which looks for cookies being set |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
465 |
in responses and saves them to add to all future requests. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
466 |
It appears a SafeTransport can do both HTTP and HTTPS sessions, |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
467 |
which saves us having to do a CookieTransport too. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
468 |
""" |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
469 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
470 |
# Inspiration drawn from |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
471 |
# http://blog.godson.in/2010/09/how-to-make-python-xmlrpclib-client.html |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
472 |
# http://www.itkovian.net/base/transport-class-for-pythons-xml-rpc-lib/ |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
473 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
474 |
cookies = [] |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
475 |
def send_cookies(self, connection): |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
476 |
if self.cookies: |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
477 |
for cookie in self.cookies: |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
478 |
connection.putheader("Cookie", cookie) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
479 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
480 |
def request(self, host, handler, request_body, verbose=0): |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
481 |
self.verbose = verbose |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
482 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
483 |
# issue XML-RPC request |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
484 |
h = self.make_connection(host) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
485 |
if verbose: |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
486 |
h.set_debuglevel(1) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
487 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
488 |
self.send_request(h, handler, request_body) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
489 |
self.send_host(h, host) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
490 |
self.send_cookies(h) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
491 |
self.send_user_agent(h) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
492 |
self.send_content(h, request_body) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
493 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
494 |
# Deal with differences between Python 2.4-2.6 and 2.7. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
495 |
# In the former h is a HTTP(S). In the latter it's a |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
496 |
# HTTP(S)Connection. Luckily, the 2.4-2.6 implementation of |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
497 |
# HTTP(S) has an underlying HTTP(S)Connection, so extract |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
498 |
# that and use it. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
499 |
try: |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
500 |
response = h.getresponse() |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
501 |
except AttributeError: |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
502 |
response = h._conn.getresponse() |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
503 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
504 |
# Add any cookie definitions to our list. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
505 |
for header in response.msg.getallmatchingheaders("Set-Cookie"): |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
506 |
val = header.split(": ", 1)[1] |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
507 |
cookie = val.split(";", 1)[0] |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
508 |
self.cookies.append(cookie) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
509 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
510 |
if response.status != 200: |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
511 |
raise xmlrpclib.ProtocolError(host + handler, response.status, |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
512 |
response.reason, response.msg.headers) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
513 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
514 |
payload = response.read() |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
515 |
parser, unmarshaller = self.getparser() |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
516 |
parser.feed(payload) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
517 |
parser.close() |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
518 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
519 |
return unmarshaller.close() |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
520 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
521 |
class bzxmlrpc(bzaccess): |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
522 |
"""Support for access to Bugzilla via the Bugzilla XMLRPC API. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
523 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
524 |
Requires a minimum Bugzilla version 3.4. |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
525 |
""" |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
526 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
527 |
def __init__(self, ui): |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
528 |
bzaccess.__init__(self, ui) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
529 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
530 |
bzweb = self.ui.config('bugzilla', 'bzurl', |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
531 |
'http://localhost/bugzilla/') |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
532 |
bzweb = bzweb.rstrip("/") + "/xmlrpc.cgi" |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
533 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
534 |
user = self.ui.config('bugzilla', 'user', 'bugs') |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
535 |
passwd = self.ui.config('bugzilla', 'password') |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
536 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
537 |
self.bzproxy = xmlrpclib.ServerProxy(bzweb, CookieSafeTransport()) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
538 |
self.bzproxy.User.login(dict(login=user, password=passwd)) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
539 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
540 |
def get_bug_comments(self, id): |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
541 |
"""Return a string with all comment text for a bug.""" |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
542 |
c = self.bzproxy.Bug.comments(dict(ids=[id])) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
543 |
return ''.join([t['text'] for t in c['bugs'][str(id)]['comments']]) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
544 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
545 |
def filter_real_bug_ids(self, ids): |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
546 |
res = set() |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
547 |
bugs = self.bzproxy.Bug.get(dict(ids=sorted(ids), permissive=True)) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
548 |
for bug in bugs['bugs']: |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
549 |
res.add(bug['id']) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
550 |
return res |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
551 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
552 |
def filter_cset_known_bug_ids(self, node, ids): |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
553 |
for id in sorted(ids): |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
554 |
if self.get_bug_comments(id).find(short(node)) != -1: |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
555 |
self.ui.status(_('bug %d already knows about changeset %s\n') % |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
556 |
(id, short(node))) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
557 |
ids.discard(id) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
558 |
return ids |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
559 |
|
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
560 |
def add_comment(self, bugid, text, committer): |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
561 |
self.bzproxy.Bug.add_comment(dict(id=bugid, comment=text)) |
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
562 |
|
13802
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
563 |
class bzxmlrpcemail(bzxmlrpc): |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
564 |
"""Read data from Bugzilla via XMLRPC, send updates via email. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
565 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
566 |
Advantages of sending updates via email: |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
567 |
1. Comments can be added as any user, not just logged in user. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
568 |
2. Bug statuses and other fields not accessible via XMLRPC can |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
569 |
be updated. This is not currently used. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
570 |
""" |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
571 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
572 |
def __init__(self, ui): |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
573 |
bzxmlrpc.__init__(self, ui) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
574 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
575 |
self.bzemail = self.ui.config('bugzilla', 'bzemail') |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
576 |
if not self.bzemail: |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
577 |
raise util.Abort(_("configuration 'bzemail' missing")) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
578 |
mail.validateconfig(self.ui) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
579 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
580 |
def send_bug_modify_email(self, bugid, commands, comment, committer): |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
581 |
'''send modification message to Bugzilla bug via email. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
582 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
583 |
The message format is documented in the Bugzilla email_in.pl |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
584 |
specification. commands is a list of command lines, comment is the |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
585 |
comment text. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
586 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
587 |
To stop users from crafting commit comments with |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
588 |
Bugzilla commands, specify the bug ID via the message body, rather |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
589 |
than the subject line, and leave a blank line after it. |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
590 |
''' |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
591 |
user = self.map_committer(committer) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
592 |
matches = self.bzproxy.User.get(dict(match=[user])) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
593 |
if not matches['users']: |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
594 |
user = self.ui.config('bugzilla', 'user', 'bugs') |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
595 |
matches = self.bzproxy.User.get(dict(match=[user])) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
596 |
if not matches['users']: |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
597 |
raise util.Abort(_("default bugzilla user %s email not found") % |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
598 |
user) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
599 |
user = matches['users'][0]['email'] |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
600 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
601 |
text = "\n".join(commands) + "\n@bug_id = %d\n\n" % bugid + comment |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
602 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
603 |
_charsets = mail._charsets(self.ui) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
604 |
user = mail.addressencode(self.ui, user, _charsets) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
605 |
bzemail = mail.addressencode(self.ui, self.bzemail, _charsets) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
606 |
msg = mail.mimeencode(self.ui, text, _charsets) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
607 |
msg['From'] = user |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
608 |
msg['To'] = bzemail |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
609 |
msg['Subject'] = mail.headencode(self.ui, "Bug modification", _charsets) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
610 |
sendmail = mail.connect(self.ui) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
611 |
sendmail(user, bzemail, msg.as_string()) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
612 |
|
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
613 |
def add_comment(self, bugid, text, committer): |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
614 |
self.send_bug_modify_email(bugid, [], text, committer) |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
615 |
|
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
616 |
class bugzilla(object): |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
617 |
# supported versions of bugzilla. different versions have |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
618 |
# different schemas. |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
619 |
_versions = { |
13800
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
620 |
'2.16': bzmysql, |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
621 |
'2.18': bzmysql_2_18, |
13801
60256f7f30c1
bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents:
13800
diff
changeset
|
622 |
'3.0': bzmysql_3_0, |
13802
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
623 |
'xmlrpc': bzxmlrpc, |
49b5a1aaf726
bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents:
13801
diff
changeset
|
624 |
'xmlrpc+email': bzxmlrpcemail |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
625 |
} |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
626 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
627 |
_default_bug_re = (r'bugs?\s*,?\s*(?:#|nos?\.?|num(?:ber)?s?)?\s*' |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
628 |
r'((?:\d+\s*(?:,?\s*(?:and)?)?\s*)+)') |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
629 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
630 |
_bz = None |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
631 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
632 |
def __init__(self, ui, repo): |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
633 |
self.ui = ui |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
634 |
self.repo = repo |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
635 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
636 |
def bz(self): |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
637 |
'''return object that knows how to talk to bugzilla version in |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
638 |
use.''' |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
639 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
640 |
if bugzilla._bz is None: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
641 |
bzversion = self.ui.config('bugzilla', 'version') |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
642 |
try: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
643 |
bzclass = bugzilla._versions[bzversion] |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
644 |
except KeyError: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
645 |
raise util.Abort(_('bugzilla version %s not supported') % |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
646 |
bzversion) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
647 |
bugzilla._bz = bzclass(self.ui) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
648 |
return bugzilla._bz |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
649 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
650 |
def __getattr__(self, key): |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
651 |
return getattr(self.bz(), key) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
652 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
653 |
_bug_re = None |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
654 |
_split_re = None |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
655 |
|
3976
f8849648b0e2
bugzilla: use contexts, simplify
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3891
diff
changeset
|
656 |
def find_bug_ids(self, ctx): |
13799
d04fc5582772
bugzilla: keep bug IDs in set.
Jim Hague <jim.hague@acm.org>
parents:
13798
diff
changeset
|
657 |
'''return set of integer bug IDs from commit comment. |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
658 |
|
13799
d04fc5582772
bugzilla: keep bug IDs in set.
Jim Hague <jim.hague@acm.org>
parents:
13798
diff
changeset
|
659 |
Extract bug IDs from changeset comments. Filter out any that are |
d04fc5582772
bugzilla: keep bug IDs in set.
Jim Hague <jim.hague@acm.org>
parents:
13798
diff
changeset
|
660 |
not known to Bugzilla, and any that already have a reference to |
d04fc5582772
bugzilla: keep bug IDs in set.
Jim Hague <jim.hague@acm.org>
parents:
13798
diff
changeset
|
661 |
the given changeset in their comments. |
d04fc5582772
bugzilla: keep bug IDs in set.
Jim Hague <jim.hague@acm.org>
parents:
13798
diff
changeset
|
662 |
''' |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
663 |
if bugzilla._bug_re is None: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
664 |
bugzilla._bug_re = re.compile( |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
665 |
self.ui.config('bugzilla', 'regexp', bugzilla._default_bug_re), |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
666 |
re.IGNORECASE) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
667 |
bugzilla._split_re = re.compile(r'\D+') |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
668 |
start = 0 |
8455
a858b54d072b
bugzilla: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8225
diff
changeset
|
669 |
ids = set() |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
670 |
while True: |
3976
f8849648b0e2
bugzilla: use contexts, simplify
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3891
diff
changeset
|
671 |
m = bugzilla._bug_re.search(ctx.description(), start) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
672 |
if not m: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
673 |
break |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
674 |
start = m.end() |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
675 |
for id in bugzilla._split_re.split(m.group(1)): |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
676 |
if not id: |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
677 |
continue |
8455
a858b54d072b
bugzilla: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8225
diff
changeset
|
678 |
ids.add(int(id)) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
679 |
if ids: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
680 |
ids = self.filter_real_bug_ids(ids) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
681 |
if ids: |
13798
9c9fa78f4e2d
bugzilla: rename filter_unknown_bug_ids to reflect its actual purpose.
Jim Hague <jim.hague@acm.org>
parents:
11567
diff
changeset
|
682 |
ids = self.filter_cset_known_bug_ids(ctx.node(), ids) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
683 |
return ids |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
684 |
|
3976
f8849648b0e2
bugzilla: use contexts, simplify
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3891
diff
changeset
|
685 |
def update(self, bugid, ctx): |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
686 |
'''update bugzilla bug with reference to changeset.''' |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
687 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
688 |
def webroot(root): |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
689 |
'''strip leading prefix of repo root and turn into |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
690 |
url-safe path.''' |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
691 |
count = int(self.ui.config('bugzilla', 'strip', 0)) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
692 |
root = util.pconvert(root) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
693 |
while count > 0: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
694 |
c = root.find('/') |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
695 |
if c == -1: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
696 |
break |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
697 |
root = root[c + 1:] |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
698 |
count -= 1 |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
699 |
return root |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
700 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
701 |
mapfile = self.ui.config('bugzilla', 'style') |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
702 |
tmpl = self.ui.config('bugzilla', 'template') |
3741
0897bf8d54c7
update bugzilla extension to use ui buffers
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
703 |
t = cmdutil.changeset_templater(self.ui, self.repo, |
7762
fece056bf240
add --git option to commands supporting --patch (log, incoming, history, tip)
Jim Correia <jim.correia@pobox.com>
parents:
7618
diff
changeset
|
704 |
False, None, mapfile, False) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
705 |
if not mapfile and not tmpl: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
706 |
tmpl = _('changeset {node|short} in repo {root} refers ' |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
707 |
'to bug {bug}.\ndetails:\n\t{desc|tabindent}') |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
708 |
if tmpl: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
709 |
tmpl = templater.parsestring(tmpl, quoted=False) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
710 |
t.use_template(tmpl) |
3741
0897bf8d54c7
update bugzilla extension to use ui buffers
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
711 |
self.ui.pushbuffer() |
7369
87158be081b8
cmdutil: use change contexts for cset-printer and cset-templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7280
diff
changeset
|
712 |
t.show(ctx, changes=ctx.changeset(), |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
713 |
bug=str(bugid), |
2197
5de8b44f0446
define standard name for base url to use when printing hgweb urls.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2192
diff
changeset
|
714 |
hgweb=self.ui.config('web', 'baseurl'), |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
715 |
root=self.repo.root, |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
716 |
webroot=webroot(self.repo.root)) |
3741
0897bf8d54c7
update bugzilla extension to use ui buffers
Matt Mackall <mpm@selenic.com>
parents:
3643
diff
changeset
|
717 |
data = self.ui.popbuffer() |
5975
75d9fe70c654
templater: move email function to util
Matt Mackall <mpm@selenic.com>
parents:
4431
diff
changeset
|
718 |
self.add_comment(bugid, data, util.email(ctx.user())) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
719 |
|
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
720 |
def hook(ui, repo, hooktype, node=None, **kwargs): |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
721 |
'''add comment to bugzilla for each changeset that refers to a |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
722 |
bugzilla bug id. only add a comment once per bug, so same change |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
723 |
seen multiple times does not fill bug with duplicate data.''' |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
724 |
if node is None: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
725 |
raise util.Abort(_('hook type %s does not pass a changeset id') % |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
726 |
hooktype) |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
727 |
try: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
728 |
bz = bugzilla(ui, repo) |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6548
diff
changeset
|
729 |
ctx = repo[node] |
3976
f8849648b0e2
bugzilla: use contexts, simplify
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3891
diff
changeset
|
730 |
ids = bz.find_bug_ids(ctx) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
731 |
if ids: |
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
732 |
for id in ids: |
3976
f8849648b0e2
bugzilla: use contexts, simplify
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
3891
diff
changeset
|
733 |
bz.update(id, ctx) |
7618
6c89dd0a7797
Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents:
7504
diff
changeset
|
734 |
bz.notify(ids, util.email(ctx.user())) |
13800
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
735 |
except Exception, e: |
c2ef8159dabe
bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents:
13799
diff
changeset
|
736 |
raise util.Abort(_('Bugzilla error: %s') % e) |
2192
2be3ac7abc21
add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
737 |