annotate hgext/bugzilla.py @ 48495:e293ff808a05

rhg: Use binary search in manifest lookup … instead of linear scan, when looking for a single entry based on its path. Manifest entries are sorted by path, but are variable-size so we can’t use the standard library’s `[T]::binary_search`. We can still jump to a byte index and then look around for entry boundaries. Differential Revision: https://phab.mercurial-scm.org/D11932
author Simon Sapin <simon.sapin@octobus.net>
date Thu, 16 Dec 2021 17:34:51 +0100
parents d6afa9c149c3
children 6000f5b25c9b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
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>
21542
d12d8d41428e bugzilla: support Bugzilla 4.4.3+ API login token authentication (issue4257)
Jim Hague <jim.hague@acm.org>
parents: 20673
diff changeset
4 # Copyright 2011-4 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
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 10112
diff changeset
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
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
15 The bug references can optionally include an update for Bugzilla of the
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
16 hours spent working on the bug. Bugs can also be marked fixed.
7504
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
17
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
18 Four basic modes of access to Bugzilla are provided:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
19
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
20 1. Access via the Bugzilla REST-API. Requires bugzilla 5.0 or later.
7504
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
21
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
22 2. Access via the Bugzilla XMLRPC interface. Requires Bugzilla 3.4 or later.
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
23
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
24 3. Check data via the Bugzilla XMLRPC interface and submit bug change
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
25 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
26
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
27 4. Writing directly to the Bugzilla database. Only Bugzilla installations
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
28 using MySQL are supported. Requires Python MySQLdb.
9203
e4dbd49b88a9 bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents: 9054
diff changeset
29
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
30 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
31 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
32 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
33 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
34 permission to read Bugzilla configuration details and the necessary
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
35 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
36 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
37 deprecated, and will not be updated for new Bugzilla versions going
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
38 forward. Only adding comments is supported in this access mode.
9203
e4dbd49b88a9 bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents: 9054
diff changeset
39
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
40 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
41 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
42 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
43 that the rights of that user are restricted in Bugzilla to the minimum
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
44 necessary to add comments. Marking bugs fixed requires Bugzilla 4.0 and later.
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
45
13871
22d200e49b10 bugzilla: more documentation fixes
Jim Hague <jim.hague@acm.org>
parents: 13870
diff changeset
46 Access via XMLRPC/email uses XMLRPC to query Bugzilla, but sends
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
47 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
48 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
49 user, so the comment appears to come from the Mercurial user. In the event
17534
c5f7c4b515a4 en-us: recognized
timeless@mozdev.org
parents: 16881
diff changeset
50 that the Mercurial user email is not recognized by Bugzilla as a Bugzilla
13871
22d200e49b10 bugzilla: more documentation fixes
Jim Hague <jim.hague@acm.org>
parents: 13870
diff changeset
51 user, the email associated with the Bugzilla username used to log into
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
52 Bugzilla is used instead as the source of the comment. Marking bugs fixed
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
53 works on all supported Bugzilla versions.
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
54
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
55 Access via the REST-API needs either a Bugzilla username and password
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
56 or an apikey specified in the configuration. Comments are made under
32574
870248603a4e bugzilla: fix typo in help text
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 31570
diff changeset
57 the given username or the user associated with the apikey in Bugzilla.
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
58
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
59 Configuration items common to all access modes:
9203
e4dbd49b88a9 bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents: 9054
diff changeset
60
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
61 bugzilla.version
17537
31f32a96e1e3 Merge spelling fixes
Bryan O'Sullivan <bryano@fb.com>
parents: 17424 17534
diff changeset
62 The access type to use. Values recognized are:
13871
22d200e49b10 bugzilla: more documentation fixes
Jim Hague <jim.hague@acm.org>
parents: 13870
diff changeset
63
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
64 :``restapi``: Bugzilla REST-API, Bugzilla 5.0 and later.
13883
fc83d2ca9cfb bugzilla: fix reST error introduced in 22d200e49b10
Martin Geisler <mg@aragost.com>
parents: 13871
diff changeset
65 :``xmlrpc``: Bugzilla XMLRPC interface.
fc83d2ca9cfb bugzilla: fix reST error introduced in 22d200e49b10
Martin Geisler <mg@aragost.com>
parents: 13871
diff changeset
66 :``xmlrpc+email``: Bugzilla XMLRPC and email interfaces.
fc83d2ca9cfb bugzilla: fix reST error introduced in 22d200e49b10
Martin Geisler <mg@aragost.com>
parents: 13871
diff changeset
67 :``3.0``: MySQL access, Bugzilla 3.0 and later.
fc83d2ca9cfb bugzilla: fix reST error introduced in 22d200e49b10
Martin Geisler <mg@aragost.com>
parents: 13871
diff changeset
68 :``2.18``: MySQL access, Bugzilla 2.18 and up to but not
fc83d2ca9cfb bugzilla: fix reST error introduced in 22d200e49b10
Martin Geisler <mg@aragost.com>
parents: 13871
diff changeset
69 including 3.0.
fc83d2ca9cfb bugzilla: fix reST error introduced in 22d200e49b10
Martin Geisler <mg@aragost.com>
parents: 13871
diff changeset
70 :``2.16``: MySQL access, Bugzilla 2.16 and up to but not
fc83d2ca9cfb bugzilla: fix reST error introduced in 22d200e49b10
Martin Geisler <mg@aragost.com>
parents: 13871
diff changeset
71 including 2.18.
7985
0edca606c0f1 bugzilla: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents: 7762
diff changeset
72
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
73 bugzilla.regexp
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
74 Regular expression to match bug IDs for update in changeset commit message.
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
75 It must contain one "()" named group ``<ids>`` containing the bug
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
76 IDs separated by non-digit characters. It may also contain
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
77 a named group ``<hours>`` with a floating-point number giving the
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
78 hours worked on the bug. If no named groups are present, the first
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
79 "()" group is assumed to contain the bug IDs, and work time is not
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
80 updated. The default expression matches ``Bug 1234``, ``Bug no. 1234``,
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
81 ``Bug number 1234``, ``Bugs 1234,5678``, ``Bug 1234 and 5678`` and
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
82 variations thereof, followed by an hours number prefixed by ``h`` or
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
83 ``hours``, e.g. ``hours 1.5``. Matching is case insensitive.
9203
e4dbd49b88a9 bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents: 9054
diff changeset
84
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
85 bugzilla.fixregexp
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
86 Regular expression to match bug IDs for marking fixed in changeset
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
87 commit message. This must contain a "()" named group ``<ids>` containing
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
88 the bug IDs separated by non-digit characters. It may also contain
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
89 a named group ``<hours>`` with a floating-point number giving the
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
90 hours worked on the bug. If no named groups are present, the first
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
91 "()" group is assumed to contain the bug IDs, and work time is not
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
92 updated. The default expression matches ``Fixes 1234``, ``Fixes bug 1234``,
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
93 ``Fixes bugs 1234,5678``, ``Fixes 1234 and 5678`` and
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
94 variations thereof, followed by an hours number prefixed by ``h`` or
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
95 ``hours``, e.g. ``hours 1.5``. Matching is case insensitive.
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
96
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
97 bugzilla.fixstatus
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
98 The status to set a bug to when marking fixed. Default ``RESOLVED``.
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
99
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
100 bugzilla.fixresolution
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
101 The resolution to set a bug to when marking fixed. Default ``FIXED``.
9203
e4dbd49b88a9 bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents: 9054
diff changeset
102
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
103 bugzilla.style
9203
e4dbd49b88a9 bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents: 9054
diff changeset
104 The style file to use when formatting comments.
e4dbd49b88a9 bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents: 9054
diff changeset
105
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
106 bugzilla.template
9252
b03aa86f4c10 bugzilla: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9204
diff changeset
107 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
108 specified. In addition to the usual Mercurial keywords, the
13884
773a833ddbc6 bugzilla: convert a verbatim block to a field list
Martin Geisler <mg@aragost.com>
parents: 13883
diff changeset
109 extension specifies:
9203
e4dbd49b88a9 bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents: 9054
diff changeset
110
13884
773a833ddbc6 bugzilla: convert a verbatim block to a field list
Martin Geisler <mg@aragost.com>
parents: 13883
diff changeset
111 :``{bug}``: The Bugzilla bug ID.
773a833ddbc6 bugzilla: convert a verbatim block to a field list
Martin Geisler <mg@aragost.com>
parents: 13883
diff changeset
112 :``{root}``: The full pathname of the Mercurial repository.
773a833ddbc6 bugzilla: convert a verbatim block to a field list
Martin Geisler <mg@aragost.com>
parents: 13883
diff changeset
113 :``{webroot}``: Stripped pathname of the Mercurial repository.
773a833ddbc6 bugzilla: convert a verbatim block to a field list
Martin Geisler <mg@aragost.com>
parents: 13883
diff changeset
114 :``{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
115
13842
4cffce61bd92 bugzilla: fix bad reST markup
Martin Geisler <mg@aragost.com>
parents: 13841
diff changeset
116 Default ``changeset {node|short} in repo {root} refers to bug
4cffce61bd92 bugzilla: fix bad reST markup
Martin Geisler <mg@aragost.com>
parents: 13841
diff changeset
117 {bug}.\\ndetails:\\n\\t{desc|tabindent}``
9203
e4dbd49b88a9 bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents: 9054
diff changeset
118
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
119 bugzilla.strip
13841
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
120 The number of path separator characters to strip from the front of
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
121 the Mercurial repository path (``{root}`` in templates) to produce
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
122 ``{webroot}``. For example, a repository with ``{root}``
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
123 ``/var/local/my-project`` with a strip of 2 gives a value for
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
124 ``{webroot}`` of ``my-project``. Default 0.
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
125
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
126 web.baseurl
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
127 Base URL for browsing Mercurial repositories. Referenced from
13896
3b4025dcb223 bugzilla: more documentation formatting fixups
Jim Hague <jim.hague@acm.org>
parents: 13884
diff changeset
128 templates as ``{hgweb}``.
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
129
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
130 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
131
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
132 bugzilla.usermap
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
133 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
134 mappings. If specified, the file should contain one mapping per
13835
135bed43e20c bugzilla: show usermap syntax more clearly
Martin Geisler <mg@aragost.com>
parents: 13834
diff changeset
135 line::
135bed43e20c bugzilla: show usermap syntax more clearly
Martin Geisler <mg@aragost.com>
parents: 13834
diff changeset
136
135bed43e20c bugzilla: show usermap syntax more clearly
Martin Geisler <mg@aragost.com>
parents: 13834
diff changeset
137 committer = Bugzilla user
135bed43e20c bugzilla: show usermap syntax more clearly
Martin Geisler <mg@aragost.com>
parents: 13834
diff changeset
138
13896
3b4025dcb223 bugzilla: more documentation formatting fixups
Jim Hague <jim.hague@acm.org>
parents: 13884
diff changeset
139 See also the ``[usermap]`` section.
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
140
13836
ed15922af2f9 bugzilla: markup section names as literal text
Martin Geisler <mg@aragost.com>
parents: 13835
diff changeset
141 The ``[usermap]`` section is used to specify mappings of Mercurial
13834
0aa2cfd0b21a bugzilla: use standard section.name notation
Martin Geisler <mg@aragost.com>
parents: 13833
diff changeset
142 committer email to Bugzilla user email. See also ``bugzilla.usermap``.
13835
135bed43e20c bugzilla: show usermap syntax more clearly
Martin Geisler <mg@aragost.com>
parents: 13834
diff changeset
143 Contains entries of the form ``committer = Bugzilla user``.
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
144
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
145 XMLRPC and REST-API access mode configuration:
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
146
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
147 bugzilla.bzurl
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
148 The base URL for the Bugzilla installation.
13841
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
149 Default ``http://localhost/bugzilla``.
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
150
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
151 bugzilla.user
13841
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
152 The username to use to log into Bugzilla via XMLRPC. Default
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
153 ``bugs``.
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
154
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
155 bugzilla.password
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
156 The password for Bugzilla login.
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
157
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
158 REST-API access mode uses the options listed above as well as:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
159
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
160 bugzilla.apikey
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
161 An apikey generated on the Bugzilla instance for api access.
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
162 Using an apikey removes the need to store the user and password
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
163 options.
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
164
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
165 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
166 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
167
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
168 bugzilla.bzemail
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
169 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
170
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
171 In addition, the Mercurial email settings must be configured. See the
13837
22f20d0fe2d3 bugzilla: refer to hgrc(5) man page with normal notation
Martin Geisler <mg@aragost.com>
parents: 13836
diff changeset
172 documentation in hgrc(5), sections ``[email]`` and ``[smtp]``.
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
173
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
174 MySQL access mode configuration:
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
175
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
176 bugzilla.host
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
177 Hostname of the MySQL server holding the Bugzilla database.
13841
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
178 Default ``localhost``.
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
179
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
180 bugzilla.db
13841
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
181 Name of the Bugzilla database in MySQL. Default ``bugs``.
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
182
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
183 bugzilla.user
13841
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
184 Username to use to access MySQL server. Default ``bugs``.
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
185
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
186 bugzilla.password
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
187 Password to use to access MySQL server.
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
188
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
189 bugzilla.timeout
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
190 Database connection timeout (seconds). Default 5.
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
191
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
192 bugzilla.bzuser
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
193 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
194 committer cannot be found as a Bugzilla user.
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
195
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
196 bugzilla.bzdir
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
197 Bugzilla install directory. Used by default notify. Default
13841
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
198 ``/var/www/html/bugzilla``.
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
199
13833
64ad07dff0a8 bugzilla: prefix each config option with section
Martin Geisler <mg@aragost.com>
parents: 13832
diff changeset
200 bugzilla.notify
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
201 The command to run to get Bugzilla to send bug change notification
13841
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
202 emails. Substitutes from a map with 3 keys, ``bzdir``, ``id`` (bug
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
203 id) and ``user`` (committer bugzilla email). Default depends on
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
204 version; from 2.18 it is "cd %(bzdir)s && perl -T
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
205 contrib/sendbugmail.pl %(id)s %(user)s".
7504
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
206
9203
e4dbd49b88a9 bugzilla: reformat list of configuration options
Martin Geisler <mg@lazybytes.net>
parents: 9054
diff changeset
207 Activating the extension::
7504
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
208
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
209 [extensions]
10112
703db37d186b hgext: enable extensions without "hgext." prefix in help texts
Martin Geisler <mg@lazybytes.net>
parents: 9252
diff changeset
210 bugzilla =
7504
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
211
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
212 [hooks]
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
213 # 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
214 incoming.bugzilla = python:hgext.bugzilla.hook
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
215
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
216 Example configurations:
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
217
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
218 XMLRPC example configuration. This uses the Bugzilla at
13841
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
219 ``http://my-project.org/bugzilla``, logging in as user
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
220 ``bugmail@my-project.org`` with password ``plugh``. It is used with a
13870
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
221 collection of Mercurial repositories in ``/var/local/hg/repos/``,
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
222 with a web interface at ``http://my-project.org/hg``. ::
7504
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
223
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
224 [bugzilla]
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
225 bzurl=http://my-project.org/bugzilla
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
226 user=bugmail@my-project.org
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
227 password=plugh
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
228 version=xmlrpc
13870
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
229 template=Changeset {node|short} in {root|basename}.
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
230 {hgweb}/{webroot}/rev/{node|short}\\n
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
231 {desc}\\n
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
232 strip=5
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
233
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
234 [web]
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
235 baseurl=http://my-project.org/hg
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
236
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
237 XMLRPC+email example configuration. This uses the Bugzilla at
13841
367805c848e5 bugzilla: markup literal text as such
Martin Geisler <mg@aragost.com>
parents: 13837
diff changeset
238 ``http://my-project.org/bugzilla``, logging in as user
14619
29f55c0e39e7 bugzilla: fix typo in documentation
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 14234
diff changeset
239 ``bugmail@my-project.org`` with password ``plugh``. It is used with a
13870
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
240 collection of Mercurial repositories in ``/var/local/hg/repos/``,
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
241 with a web interface at ``http://my-project.org/hg``. Bug comments
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
242 are sent to the Bugzilla email address
13854
5ed036e42fd9 bugzilla: fix documentation typo
Patrick Mezard <pmezard@gmail.com>
parents: 13842
diff changeset
243 ``bugzilla@my-project.org``. ::
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
244
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
245 [bugzilla]
13870
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
246 bzurl=http://my-project.org/bugzilla
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
247 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
248 password=plugh
21842
fd2527d9b995 bugzilla: correct config documentation error
Jim Hague <jim.hague@acm.org>
parents: 21542
diff changeset
249 version=xmlrpc+email
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
250 bzemail=bugzilla@my-project.org
13870
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
251 template=Changeset {node|short} in {root|basename}.
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
252 {hgweb}/{webroot}/rev/{node|short}\\n
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
253 {desc}\\n
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
254 strip=5
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
255
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
256 [web]
13870
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
257 baseurl=http://my-project.org/hg
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
258
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
259 [usermap]
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
260 user@emaildomain.com=user.name@bugzilladomain.com
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
261
13870
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
262 MySQL example configuration. This has a local Bugzilla 3.2 installation
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
263 in ``/opt/bugzilla-3.2``. The MySQL database is on ``localhost``,
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
264 the Bugzilla database name is ``bugs`` and MySQL is
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
265 accessed with MySQL username ``bugs`` password ``XYZZY``. It is used
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
266 with a collection of Mercurial repositories in ``/var/local/hg/repos/``,
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
267 with a web interface at ``http://my-project.org/hg``. ::
7504
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
268
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
269 [bugzilla]
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
270 host=localhost
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
271 password=XYZZY
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
272 version=3.0
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
273 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
274 bzdir=/opt/bugzilla-3.2
9204
8d59e43854d9 bugzilla: wrap example template line
Martin Geisler <mg@lazybytes.net>
parents: 9203
diff changeset
275 template=Changeset {node|short} in {root|basename}.
8d59e43854d9 bugzilla: wrap example template line
Martin Geisler <mg@lazybytes.net>
parents: 9203
diff changeset
276 {hgweb}/{webroot}/rev/{node|short}\\n
8d59e43854d9 bugzilla: wrap example template line
Martin Geisler <mg@lazybytes.net>
parents: 9203
diff changeset
277 {desc}\\n
7504
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
278 strip=5
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
279
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
280 [web]
13870
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
281 baseurl=http://my-project.org/hg
7504
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
282
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
283 [usermap]
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
284 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
285
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
286 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
287
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
288 Changeset 3b16791d6642 in repository-name.
13870
ce066d424bba bugzilla: correct sample configurations
Jim Hague <jim.hague@acm.org>
parents: 13854
diff changeset
289 http://my-project.org/hg/repository-name/rev/3b16791d6642
7504
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
290
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
291 Changeset commit comment. Bug 1234.
d8cd79fbed3c Revise Bugzilla module comments into extension help.
Jim Hague <jim.hague@acm.org>
parents: 7493
diff changeset
292 '''
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
293
28091
2f0384242b35 bugzilla: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
294 from __future__ import absolute_import
2f0384242b35 bugzilla: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
295
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
296 import json
28091
2f0384242b35 bugzilla: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
297 import re
2f0384242b35 bugzilla: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
298 import time
2f0384242b35 bugzilla: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
299
3891
6b4127c7d52a Simplify i18n imports
Matt Mackall <mpm@selenic.com>
parents: 3877
diff changeset
300 from mercurial.i18n import _
6211
f89fd07fc51d Expand import * to allow Pyflakes to find problems
Joel Rosdahl <joel@rosdahl.net>
parents: 5975
diff changeset
301 from mercurial.node import short
28091
2f0384242b35 bugzilla: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
302 from mercurial import (
2f0384242b35 bugzilla: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
303 error,
35888
c8e2d6ed1f9e cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents: 35151
diff changeset
304 logcmdutil,
28091
2f0384242b35 bugzilla: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
305 mail,
41343
7370f302be71 py3: port test-bugzilla.t to Python 3
Augie Fackler <augie@google.com>
parents: 37463
diff changeset
306 pycompat,
33393
01a90fed5840 configitems: register the 'bugzilla.apikey' config
Boris Feld <boris.feld@octobus.net>
parents: 32839
diff changeset
307 registrar,
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
308 url,
28091
2f0384242b35 bugzilla: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
309 util,
2f0384242b35 bugzilla: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26587
diff changeset
310 )
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 35954
diff changeset
311 from mercurial.utils import (
37120
a8a902d7176e procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 37084
diff changeset
312 procutil,
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 35954
diff changeset
313 stringutil,
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 35954
diff changeset
314 )
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
315
29432
34b914ac573e py3: conditionalize xmlrpclib import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 29431
diff changeset
316 xmlrpclib = util.xmlrpclib
29431
80880ad3fccd py3: conditionalize the urlparse import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 28950
diff changeset
317
29841
d5883fd055c6 extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents: 29432
diff changeset
318 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
25186
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24987
diff changeset
319 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24987
diff changeset
320 # be specifying the version(s) of Mercurial they are tested with, or
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24987
diff changeset
321 # leave the attribute unspecified.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
322 testedwith = b'ships-with-hg-core'
16743
38caf405d010 hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents: 16683
diff changeset
323
33393
01a90fed5840 configitems: register the 'bugzilla.apikey' config
Boris Feld <boris.feld@octobus.net>
parents: 32839
diff changeset
324 configtable = {}
01a90fed5840 configitems: register the 'bugzilla.apikey' config
Boris Feld <boris.feld@octobus.net>
parents: 32839
diff changeset
325 configitem = registrar.configitem(configtable)
01a90fed5840 configitems: register the 'bugzilla.apikey' config
Boris Feld <boris.feld@octobus.net>
parents: 32839
diff changeset
326
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
327 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
328 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
329 b'apikey',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
330 default=b'',
33393
01a90fed5840 configitems: register the 'bugzilla.apikey' config
Boris Feld <boris.feld@octobus.net>
parents: 32839
diff changeset
331 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
332 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
333 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
334 b'bzdir',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
335 default=b'/var/www/html/bugzilla',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
336 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
337 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
338 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
339 b'bzemail',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
340 default=None,
33394
a752d2e7ec9c configitems: register the 'bugzilla.bzdir' config
Boris Feld <boris.feld@octobus.net>
parents: 33393
diff changeset
341 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
342 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
343 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
344 b'bzurl',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
345 default=b'http://localhost/bugzilla/',
33395
b33d63651693 configitems: register the 'bugzilla.bzemail' config
Boris Feld <boris.feld@octobus.net>
parents: 33394
diff changeset
346 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
347 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
348 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
349 b'bzuser',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
350 default=None,
33396
96d3e5c1fd25 configitems: register the 'bugzilla.bzurl' config
Boris Feld <boris.feld@octobus.net>
parents: 33395
diff changeset
351 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
352 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
353 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
354 b'db',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
355 default=b'bugs',
33397
f656a4184a99 configitems: register the 'bugzilla.bzuser' config
Boris Feld <boris.feld@octobus.net>
parents: 33396
diff changeset
356 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
357 configitem(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
358 b'bugzilla',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
359 b'fixregexp',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
360 default=(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
361 br'fix(?:es)?\s*(?:bugs?\s*)?,?\s*'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
362 br'(?:nos?\.?|num(?:ber)?s?)?\s*'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
363 br'(?P<ids>(?:#?\d+\s*(?:,?\s*(?:and)?)?\s*)+)'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
364 br'\.?\s*(?:h(?:ours?)?\s*(?P<hours>\d*(?:\.\d+)?))?'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
365 ),
33399
bab1f3242140 configitems: register the 'bugzilla.fixregexp' config
Boris Feld <boris.feld@octobus.net>
parents: 33398
diff changeset
366 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
367 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
368 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
369 b'fixresolution',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
370 default=b'FIXED',
33400
76ca5097a2b6 configitems: register the 'bugzilla.fixresolution' config
Boris Feld <boris.feld@octobus.net>
parents: 33399
diff changeset
371 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
372 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
373 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
374 b'fixstatus',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
375 default=b'RESOLVED',
33401
960350659fa5 configitems: register the 'bugzilla.fixstatus' config
Boris Feld <boris.feld@octobus.net>
parents: 33400
diff changeset
376 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
377 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
378 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
379 b'host',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
380 default=b'localhost',
33402
26e4ba058215 configitems: register the 'bugzilla.host' config
Boris Feld <boris.feld@octobus.net>
parents: 33401
diff changeset
381 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
382 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
383 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
384 b'notify',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
385 default=configitem.dynamicdefault,
33524
a89f8329e0b0 configitems: register the 'bugzilla.notify' config
Boris Feld <boris.feld@octobus.net>
parents: 33470
diff changeset
386 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
387 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
388 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
389 b'password',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
390 default=None,
33433
f793e535b4b9 configitems: register the 'bugzilla.password' config
Boris Feld <boris.feld@octobus.net>
parents: 33402
diff changeset
391 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
392 configitem(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
393 b'bugzilla',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
394 b'regexp',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
395 default=(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
396 br'bugs?\s*,?\s*(?:#|nos?\.?|num(?:ber)?s?)?\s*'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
397 br'(?P<ids>(?:\d+\s*(?:,?\s*(?:and)?)?\s*)+)'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
398 br'\.?\s*(?:h(?:ours?)?\s*(?P<hours>\d*(?:\.\d+)?))?'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
399 ),
33462
c841712253d5 configitems: register the 'bugzilla.regexp' config
Boris Feld <boris.feld@octobus.net>
parents: 33433
diff changeset
400 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
401 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
402 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
403 b'strip',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
404 default=0,
33463
037d809737fb configitems: register the 'bugzilla.strip' config
Boris Feld <boris.feld@octobus.net>
parents: 33462
diff changeset
405 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
406 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
407 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
408 b'style',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
409 default=None,
33464
56f98a3f97d2 configitems: register the 'bugzilla.style' config
Boris Feld <boris.feld@octobus.net>
parents: 33463
diff changeset
410 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
411 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
412 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
413 b'template',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
414 default=None,
33465
9a36b964165e configitems: register the 'bugzilla.template' config
Boris Feld <boris.feld@octobus.net>
parents: 33464
diff changeset
415 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
416 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
417 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
418 b'timeout',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
419 default=5,
33466
9443a946efdc configitems: register the 'bugzilla.timeout' config
Boris Feld <boris.feld@octobus.net>
parents: 33465
diff changeset
420 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
421 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
422 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
423 b'user',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
424 default=b'bugs',
33467
6de2cd9d9258 configitems: register the 'bugzilla.user' config
Boris Feld <boris.feld@octobus.net>
parents: 33466
diff changeset
425 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
426 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
427 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
428 b'usermap',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
429 default=None,
33468
76269ea96935 configitems: register the 'bugzilla.usermap' config
Boris Feld <boris.feld@octobus.net>
parents: 33467
diff changeset
430 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
431 configitem(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
432 b'bugzilla',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
433 b'version',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
434 default=None,
33469
f2abf23a4d7b configitems: register the 'bugzilla.version' config
Boris Feld <boris.feld@octobus.net>
parents: 33468
diff changeset
435 )
33393
01a90fed5840 configitems: register the 'bugzilla.apikey' config
Boris Feld <boris.feld@octobus.net>
parents: 32839
diff changeset
436
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
437
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
438 class bzaccess(object):
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
439 '''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
440
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
441 def __init__(self, ui):
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
442 self.ui = ui
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
443 usermap = self.ui.config(b'bugzilla', b'usermap')
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
444 if usermap:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
445 self.ui.readconfig(usermap, sections=[b'usermap'])
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
446
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
447 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
448 '''map name of committer to Bugzilla user name.'''
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
449 for committer, bzuser in self.ui.configitems(b'usermap'):
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
450 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
451 return bzuser
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
452 return user
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
453
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
454 # Methods to be implemented by access classes.
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
455 #
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
456 # 'bugs' is a dict keyed on bug id, where values are a dict holding
17534
c5f7c4b515a4 en-us: recognized
timeless@mozdev.org
parents: 16881
diff changeset
457 # updates to bug state. Recognized dict keys are:
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
458 #
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
459 # 'hours': Value, float containing work hours to be updated.
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
460 # 'fix': If key present, bug is to be marked fixed. Value ignored.
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
461
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
462 def filter_real_bug_ids(self, bugs):
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
463 '''remove bug IDs that do not exist in Bugzilla from bugs.'''
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
464
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
465 def filter_cset_known_bug_ids(self, node, bugs):
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
466 '''remove bug IDs where node occurs in comment text from bugs.'''
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
467
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
468 def updatebug(self, bugid, newstate, text, committer):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
469 """update the specified bug. Add comment text and set new states.
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
470
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
471 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
472 the changeset. Otherwise use the default Bugzilla user.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
473 """
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
474
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
475 def notify(self, bugs, committer):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
476 """Force sending of Bugzilla notification emails.
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
477
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
478 Only required if the access method does not trigger notification
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
479 emails automatically.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
480 """
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
481
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
482
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
483 # 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
484 class bzmysql(bzaccess):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
485 """Support for direct MySQL access to Bugzilla.
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
486
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
487 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
488
16226
674ecd23c42c bugzilla: correct comment typo
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
489 If your Bugzilla is version 3.4 or above, you are strongly
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
490 recommended to use the XMLRPC access method instead.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
491 """
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
492
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
493 @staticmethod
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
494 def sql_buglist(ids):
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
495 '''return SQL-friendly list of bug ids'''
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
496 return b'(' + b','.join(map(str, ids)) + b')'
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
497
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
498 _MySQLdb = None
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
499
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
500 def __init__(self, ui):
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
501 try:
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
502 import MySQLdb as mysql
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
503
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
504 bzmysql._MySQLdb = mysql
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25186
diff changeset
505 except ImportError as err:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
506 raise error.Abort(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
507 _(b'python mysql support not available: %s') % err
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
508 )
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
509
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
510 bzaccess.__init__(self, ui)
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
511
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
512 host = self.ui.config(b'bugzilla', b'host')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
513 user = self.ui.config(b'bugzilla', b'user')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
514 passwd = self.ui.config(b'bugzilla', b'password')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
515 db = self.ui.config(b'bugzilla', b'db')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
516 timeout = int(self.ui.config(b'bugzilla', b'timeout'))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
517 self.ui.note(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
518 _(b'connecting to %s:%s as %s, password %s\n')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
519 % (host, db, user, b'*' * len(passwd))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
520 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
521 self.conn = bzmysql._MySQLdb.connect(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
522 host=host, user=user, passwd=passwd, db=db, connect_timeout=timeout
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
523 )
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
524 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
525 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
526 self.user_ids = {}
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
527 self.default_notify = b"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
528
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
529 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
530 '''run a query.'''
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
531 self.ui.note(_(b'query: %s %s\n') % (args, kwargs))
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
532 try:
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
533 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
534 except bzmysql._MySQLdb.MySQLError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
535 self.ui.note(_(b'failed query: %s %s\n') % (args, kwargs))
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
536 raise
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
537
7019
6b1ece890f9a Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents: 6762
diff changeset
538 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
539 '''get identity of longdesc field'''
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
540 self.run(b'select fieldid from fielddefs where name = "longdesc"')
7019
6b1ece890f9a Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents: 6762
diff changeset
541 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
542 if len(ids) != 1:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
543 raise error.Abort(_(b'unknown database schema'))
7019
6b1ece890f9a Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents: 6762
diff changeset
544 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
545
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
546 def filter_real_bug_ids(self, bugs):
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
547 '''filter not-existing bugs from set.'''
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
548 self.run(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
549 b'select bug_id from bugs where bug_id in %s'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
550 % bzmysql.sql_buglist(bugs.keys())
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
551 )
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
552 existing = [id for (id,) in self.cursor.fetchall()]
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
553 for id in bugs.keys():
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
554 if id not in existing:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
555 self.ui.status(_(b'bug %d does not exist\n') % id)
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
556 del bugs[id]
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
557
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
558 def filter_cset_known_bug_ids(self, node, bugs):
13799
d04fc5582772 bugzilla: keep bug IDs in set.
Jim Hague <jim.hague@acm.org>
parents: 13798
diff changeset
559 '''filter bug ids that already refer to this changeset from set.'''
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
560 self.run(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
561 '''select bug_id from longdescs where
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
562 bug_id in %s and thetext like "%%%s%%"'''
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
563 % (bzmysql.sql_buglist(bugs.keys()), short(node))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
564 )
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
565 for (id,) in self.cursor.fetchall():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
566 self.ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
567 _(b'bug %d already knows about changeset %s\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
568 % (id, short(node))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
569 )
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
570 del bugs[id]
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
571
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
572 def notify(self, bugs, committer):
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
573 '''tell bugzilla to send mail.'''
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
574 self.ui.status(_(b'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
575 (user, userid) = self.get_bugzilla_user(committer)
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
576 for id in bugs.keys():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
577 self.ui.status(_(b' bug %s\n') % id)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
578 cmdfmt = self.ui.config(b'bugzilla', b'notify', self.default_notify)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
579 bzdir = self.ui.config(b'bugzilla', b'bzdir')
7618
6c89dd0a7797 Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents: 7504
diff changeset
580 try:
6c89dd0a7797 Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents: 7504
diff changeset
581 # 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
582 # 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
583 # string.
6c89dd0a7797 Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents: 7504
diff changeset
584 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
585 except TypeError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
586 cmd = cmdfmt % {b'bzdir': bzdir, b'id': id, b'user': user}
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
587 self.ui.note(_(b'running notify command %s\n') % cmd)
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
588 fp = procutil.popen(b'(%s) 2>&1' % cmd, b'rb')
37458
00e4bd97b095 procutil: always popen() in binary mode
Yuya Nishihara <yuya@tcha.org>
parents: 37120
diff changeset
589 out = util.fromnativeeol(fp.read())
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
590 ret = fp.close()
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
591 if ret:
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
592 self.ui.warn(out)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
593 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
594 _(b'bugzilla notify command %s') % procutil.explainexit(ret)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
595 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
596 self.ui.status(_(b'done\n'))
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
597
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
598 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
599 '''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
600 try:
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
601 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
602 except KeyError:
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
603 try:
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
604 userid = int(user)
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
605 except ValueError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
606 self.ui.note(_(b'looking up user %s\n') % user)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
607 self.run(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
608 '''select userid from profiles
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
609 where login_name like %s''',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
610 user,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
611 )
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
612 all = self.cursor.fetchall()
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
613 if len(all) != 1:
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
614 raise KeyError(user)
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
615 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
616 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
617 return userid
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
618
7618
6c89dd0a7797 Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents: 7504
diff changeset
619 def get_bugzilla_user(self, committer):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
620 """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
621 bugzilla username and userid if so. If not, return default
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
622 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
623 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
624 try:
2306
4c67ba93560b bugzilla: allow to map between committer email and bugzilla user name.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2239
diff changeset
625 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
626 except KeyError:
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
627 try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
628 defaultuser = self.ui.config(b'bugzilla', b'bzuser')
2306
4c67ba93560b bugzilla: allow to map between committer email and bugzilla user name.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2239
diff changeset
629 if not defaultuser:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
630 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
631 _(b'cannot find bugzilla user id for %s') % user
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
632 )
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
633 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
634 user = defaultuser
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
635 except KeyError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
636 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
637 _(b'cannot find bugzilla user id for %s or %s')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
638 % (user, defaultuser)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
639 )
7618
6c89dd0a7797 Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents: 7504
diff changeset
640 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
641
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
642 def updatebug(self, bugid, newstate, text, committer):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
643 """update bug state with comment text.
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
644
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
645 Try adding comment as committer of changeset, otherwise as
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
646 default bugzilla user."""
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
647 if len(newstate) > 0:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
648 self.ui.warn(_(b"Bugzilla/MySQL cannot update bug state\n"))
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
649
7618
6c89dd0a7797 Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents: 7504
diff changeset
650 (user, userid) = self.get_bugzilla_user(committer)
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43380
diff changeset
651 now = time.strftime('%Y-%m-%d %H:%M:%S')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
652 self.run(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
653 '''insert into longdescs
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
654 (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
655 values (%s, %s, %s, %s)''',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
656 (bugid, userid, now, text),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
657 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
658 self.run(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
659 '''insert into bugs_activity (bug_id, who, bug_when, fieldid)
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
660 values (%s, %s, %s, %s)''',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
661 (bugid, userid, now, self.longdesc_id),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
662 )
7493
518afef5e350 Fix Bugzilla integration to work with new Bugzilla 3.2.
Jim Hague <jim.hague@acm.org>
parents: 7369
diff changeset
663 self.conn.commit()
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
664
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
665
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
666 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
667 '''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
668
6c89dd0a7797 Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents: 7504
diff changeset
669 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
670 bzmysql.__init__(self, ui)
41759
aaad36b88298 cleanup: use () to wrap long lines instead of \
Augie Fackler <augie@google.com>
parents: 41343
diff changeset
671 self.default_notify = (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
672 b"cd %(bzdir)s && perl -T contrib/sendbugmail.pl %(id)s %(user)s"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
673 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
674
7618
6c89dd0a7797 Bugzilla 2.18 and on use contrib/sendbugmail.pl, not processmail.
Jim Hague <jim.hague@acm.org>
parents: 7504
diff changeset
675
13800
c2ef8159dabe bugzilla: localise all MySQL direct access inside access class.
Jim Hague <jim.hague@acm.org>
parents: 13799
diff changeset
676 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
677 '''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
678
6b1ece890f9a Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents: 6762
diff changeset
679 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
680 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
681
6b1ece890f9a Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents: 6762
diff changeset
682 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
683 '''get identity of longdesc field'''
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
684 self.run(b'select id from fielddefs where name = "longdesc"')
7019
6b1ece890f9a Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents: 6762
diff changeset
685 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
686 if len(ids) != 1:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
687 raise error.Abort(_(b'unknown database schema'))
7019
6b1ece890f9a Add support for Bugzilla 3.0 series to bugzilla hook.
Jim Hague <jim.hague@acm.org>
parents: 6762
diff changeset
688 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
689
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
690
17424
e7cfe3587ea4 fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents: 16881
diff changeset
691 # Bugzilla via XMLRPC interface.
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
692
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
693
15870
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
694 class cookietransportrequest(object):
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
695 """A Transport request method that retains cookies over its lifetime.
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
696
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
697 The regular xmlrpclib transports ignore cookies. Which causes
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
698 a bit of a problem when you need a cookie-based login, as with
21542
d12d8d41428e bugzilla: support Bugzilla 4.4.3+ API login token authentication (issue4257)
Jim Hague <jim.hague@acm.org>
parents: 20673
diff changeset
699 the Bugzilla XMLRPC interface prior to 4.4.3.
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
700
15870
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
701 So this is a helper for defining a Transport which looks for
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
702 cookies being set in responses and saves them to add to all future
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
703 requests.
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
704 """
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
705
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
706 # Inspiration drawn from
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
707 # 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
708 # 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
709
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
710 cookies = []
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
711
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
712 def send_cookies(self, connection):
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
713 if self.cookies:
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
714 for cookie in self.cookies:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
715 connection.putheader(b"Cookie", cookie)
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
716
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
717 def request(self, host, handler, request_body, verbose=0):
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
718 self.verbose = verbose
16193
b468cea3f29d bugzilla: stop XMLRPC requests from requesting gzipped responses
Jim Hague <jim.hague@acm.org>
parents: 15870
diff changeset
719 self.accept_gzip_encoding = False
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
720
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
721 # issue XML-RPC request
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
722 h = self.make_connection(host)
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
723 if verbose:
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
724 h.set_debuglevel(1)
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
725
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
726 self.send_request(h, handler, request_body)
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
727 self.send_host(h, host)
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
728 self.send_cookies(h)
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
729 self.send_user_agent(h)
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
730 self.send_content(h, request_body)
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
731
30478
f7d66746ec18 bugzilla: stop mentioning Pythons older than 2.6
Augie Fackler <augie@google.com>
parents: 29841
diff changeset
732 # Deal with differences between Python 2.6 and 2.7.
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
733 # In the former h is a HTTP(S). In the latter it's a
30478
f7d66746ec18 bugzilla: stop mentioning Pythons older than 2.6
Augie Fackler <augie@google.com>
parents: 29841
diff changeset
734 # HTTP(S)Connection. Luckily, the 2.6 implementation of
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
735 # 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
736 # that and use it.
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
737 try:
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
738 response = h.getresponse()
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
739 except AttributeError:
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
740 response = h._conn.getresponse()
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
741
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
742 # Add any cookie definitions to our list.
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
743 for header in response.msg.getallmatchingheaders(b"Set-Cookie"):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
744 val = header.split(b": ", 1)[1]
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
745 cookie = val.split(b";", 1)[0]
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
746 self.cookies.append(cookie)
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
747
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
748 if response.status != 200:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
749 raise xmlrpclib.ProtocolError(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
750 host + handler,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
751 response.status,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
752 response.reason,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
753 response.msg.headers,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
754 )
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
755
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
756 payload = response.read()
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
757 parser, unmarshaller = self.getparser()
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
758 parser.feed(payload)
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
759 parser.close()
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
760
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
761 return unmarshaller.close()
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
762
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
763
15870
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
764 # The explicit calls to the underlying xmlrpclib __init__() methods are
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
765 # necessary. The xmlrpclib.Transport classes are old-style classes, and
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
766 # it turns out their __init__() doesn't get called when doing multiple
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
767 # inheritance with a new-style class.
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
768 class cookietransport(cookietransportrequest, xmlrpclib.Transport):
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
769 def __init__(self, use_datetime=0):
43115
4aa72cdf616f py3: delete b'' prefix from safehasattr arguments
Martin von Zweigbergk <martinvonz@google.com>
parents: 43077
diff changeset
770 if util.safehasattr(xmlrpclib.Transport, "__init__"):
16649
822e75386c16 bugzilla: fix transport initialization on python 2.4
Steven Stallion <sstallion@gmail.com>
parents: 16227
diff changeset
771 xmlrpclib.Transport.__init__(self, use_datetime)
15870
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
772
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
773
15870
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
774 class cookiesafetransport(cookietransportrequest, xmlrpclib.SafeTransport):
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
775 def __init__(self, use_datetime=0):
43115
4aa72cdf616f py3: delete b'' prefix from safehasattr arguments
Martin von Zweigbergk <martinvonz@google.com>
parents: 43077
diff changeset
776 if util.safehasattr(xmlrpclib.Transport, "__init__"):
16649
822e75386c16 bugzilla: fix transport initialization on python 2.4
Steven Stallion <sstallion@gmail.com>
parents: 16227
diff changeset
777 xmlrpclib.SafeTransport.__init__(self, use_datetime)
15870
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
778
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
779
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
780 class bzxmlrpc(bzaccess):
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
781 """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
782
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
783 Requires a minimum Bugzilla version 3.4.
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
784 """
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
785
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
786 def __init__(self, ui):
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
787 bzaccess.__init__(self, ui)
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
788
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
789 bzweb = self.ui.config(b'bugzilla', b'bzurl')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
790 bzweb = bzweb.rstrip(b"/") + b"/xmlrpc.cgi"
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
791
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
792 user = self.ui.config(b'bugzilla', b'user')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
793 passwd = self.ui.config(b'bugzilla', b'password')
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
794
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
795 self.fixstatus = self.ui.config(b'bugzilla', b'fixstatus')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
796 self.fixresolution = self.ui.config(b'bugzilla', b'fixresolution')
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
797
46081
734d051d0efb bugzilla: pass the url to xmlrpclib.ServerProxy as str
Mads Kiilerich <mads@kiilerich.com>
parents: 46080
diff changeset
798 self.bzproxy = xmlrpclib.ServerProxy(
734d051d0efb bugzilla: pass the url to xmlrpclib.ServerProxy as str
Mads Kiilerich <mads@kiilerich.com>
parents: 46080
diff changeset
799 pycompat.strurl(bzweb), self.transport(bzweb)
734d051d0efb bugzilla: pass the url to xmlrpclib.ServerProxy as str
Mads Kiilerich <mads@kiilerich.com>
parents: 46080
diff changeset
800 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
801 ver = self.bzproxy.Bugzilla.version()[b'version'].split(b'.')
16224
d52a6b542db1 bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
Jim Hague <jim.hague@acm.org>
parents: 16223
diff changeset
802 self.bzvermajor = int(ver[0])
d52a6b542db1 bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
Jim Hague <jim.hague@acm.org>
parents: 16223
diff changeset
803 self.bzverminor = int(ver[1])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
804 login = self.bzproxy.User.login(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
805 {b'login': user, b'password': passwd, b'restrict_login': True}
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
806 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
807 self.bztoken = login.get(b'token', b'')
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
808
15870
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
809 def transport(self, uri):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
810 if util.urlreq.urlparse(uri, b"http")[0] == b"https":
15870
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
811 return cookiesafetransport()
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
812 else:
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
813 return cookietransport()
f4c859293ed4 bugzilla: make XMLRPC interface support http and https access
Jim Hague <jim.hague@acm.org>
parents: 14619
diff changeset
814
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
815 def get_bug_comments(self, id):
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
816 """Return a string with all comment text for a bug."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
817 c = self.bzproxy.Bug.comments(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
818 {b'ids': [id], b'include_fields': [b'text'], b'token': self.bztoken}
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
819 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
820 return b''.join(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
821 [t[b'text'] for t in c[b'bugs'][b'%d' % id][b'comments']]
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
822 )
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
823
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
824 def filter_real_bug_ids(self, bugs):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
825 probe = self.bzproxy.Bug.get(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
826 {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
827 b'ids': sorted(bugs.keys()),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
828 b'include_fields': [],
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
829 b'permissive': True,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
830 b'token': self.bztoken,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
831 }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
832 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
833 for badbug in probe[b'faults']:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
834 id = badbug[b'id']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
835 self.ui.status(_(b'bug %d does not exist\n') % id)
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
836 del bugs[id]
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
837
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
838 def filter_cset_known_bug_ids(self, node, bugs):
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
839 for id in sorted(bugs.keys()):
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
840 if self.get_bug_comments(id).find(short(node)) != -1:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
841 self.ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
842 _(b'bug %d already knows about changeset %s\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
843 % (id, short(node))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
844 )
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
845 del bugs[id]
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
846
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
847 def updatebug(self, bugid, newstate, text, committer):
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
848 args = {}
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
849 if b'hours' in newstate:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
850 args[b'work_time'] = newstate[b'hours']
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
851
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
852 if self.bzvermajor >= 4:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
853 args[b'ids'] = [bugid]
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
854 args[b'comment'] = {b'body': text}
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
855 if b'fix' in newstate:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
856 args[b'status'] = self.fixstatus
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
857 args[b'resolution'] = self.fixresolution
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
858 args[b'token'] = self.bztoken
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
859 self.bzproxy.Bug.update(args)
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
860 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
861 if b'fix' in newstate:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
862 self.ui.warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
863 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
864 b"Bugzilla/XMLRPC needs Bugzilla 4.0 or later "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
865 b"to mark bugs fixed\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
866 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
867 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
868 args[b'id'] = bugid
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
869 args[b'comment'] = text
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
870 self.bzproxy.Bug.add_comment(args)
13801
60256f7f30c1 bugzilla: add XMLRPC interface.
Jim Hague <jim.hague@acm.org>
parents: 13800
diff changeset
871
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
872
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
873 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
874 """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
875
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
876 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
877 1. Comments can be added as any user, not just logged in user.
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
878 2. Bug statuses or other fields not accessible via XMLRPC can
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
879 potentially be updated.
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
880
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
881 There is no XMLRPC function to change bug status before Bugzilla
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
882 4.0, so bugs cannot be marked fixed via XMLRPC before Bugzilla 4.0.
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
883 But bugs can be marked fixed via email from 3.4 onwards.
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
884 """
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
885
16224
d52a6b542db1 bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
Jim Hague <jim.hague@acm.org>
parents: 16223
diff changeset
886 # The email interface changes subtly between 3.4 and 3.6. In 3.4,
d52a6b542db1 bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
Jim Hague <jim.hague@acm.org>
parents: 16223
diff changeset
887 # in-email fields are specified as '@<fieldname> = <value>'. In
d52a6b542db1 bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
Jim Hague <jim.hague@acm.org>
parents: 16223
diff changeset
888 # 3.6 this becomes '@<fieldname> <value>'. And fieldname @bug_id
d52a6b542db1 bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
Jim Hague <jim.hague@acm.org>
parents: 16223
diff changeset
889 # in 3.4 becomes @id in 3.6. 3.6 and 4.0 both maintain backwards
d52a6b542db1 bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
Jim Hague <jim.hague@acm.org>
parents: 16223
diff changeset
890 # compatibility, but rather than rely on this use the new format for
d52a6b542db1 bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
Jim Hague <jim.hague@acm.org>
parents: 16223
diff changeset
891 # 4.0 onwards.
d52a6b542db1 bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
Jim Hague <jim.hague@acm.org>
parents: 16223
diff changeset
892
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
893 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
894 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
895
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
896 self.bzemail = self.ui.config(b'bugzilla', b'bzemail')
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
897 if not self.bzemail:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
898 raise error.Abort(_(b"configuration 'bzemail' missing"))
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
899 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
900
16224
d52a6b542db1 bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
Jim Hague <jim.hague@acm.org>
parents: 16223
diff changeset
901 def makecommandline(self, fieldname, value):
d52a6b542db1 bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
Jim Hague <jim.hague@acm.org>
parents: 16223
diff changeset
902 if self.bzvermajor >= 4:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
903 return b"@%s %s" % (fieldname, pycompat.bytestr(value))
16224
d52a6b542db1 bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
Jim Hague <jim.hague@acm.org>
parents: 16223
diff changeset
904 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
905 if fieldname == b"id":
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
906 fieldname = b"bug_id"
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
907 return b"@%s = %s" % (fieldname, pycompat.bytestr(value))
16224
d52a6b542db1 bugzilla: add xmlrpcemail submission for Bugzilla 3.6 email interface
Jim Hague <jim.hague@acm.org>
parents: 16223
diff changeset
908
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
909 def send_bug_modify_email(self, bugid, commands, comment, committer):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
910 """send modification message to Bugzilla bug via email.
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
911
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
912 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
913 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
914 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
915
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
916 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
917 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
918 than the subject line, and leave a blank line after it.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
919 """
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
920 user = self.map_committer(committer)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
921 matches = self.bzproxy.User.get(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
922 {b'match': [user], b'token': self.bztoken}
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
923 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
924 if not matches[b'users']:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
925 user = self.ui.config(b'bugzilla', b'user')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
926 matches = self.bzproxy.User.get(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
927 {b'match': [user], b'token': self.bztoken}
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
928 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
929 if not matches[b'users']:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
930 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
931 _(b"default bugzilla user %s email not found") % user
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
932 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
933 user = matches[b'users'][0][b'email']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
934 commands.append(self.makecommandline(b"id", bugid))
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
935
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
936 text = b"\n".join(commands) + b"\n\n" + comment
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
937
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
938 _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
939 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
940 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
941 msg = mail.mimeencode(self.ui, text, _charsets)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
942 msg[b'From'] = user
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
943 msg[b'To'] = bzemail
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
944 msg[b'Subject'] = mail.headencode(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
945 self.ui, b"Bug modification", _charsets
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
946 )
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
947 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
948 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
949
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
950 def updatebug(self, bugid, newstate, text, committer):
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
951 cmds = []
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
952 if b'hours' in newstate:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
953 cmds.append(self.makecommandline(b"work_time", newstate[b'hours']))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
954 if b'fix' in newstate:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
955 cmds.append(self.makecommandline(b"bug_status", self.fixstatus))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
956 cmds.append(self.makecommandline(b"resolution", self.fixresolution))
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
957 self.send_bug_modify_email(bugid, cmds, text, committer)
13802
49b5a1aaf726 bugzilla: add modified XMLRPC mode that uses email to send bug comments.
Jim Hague <jim.hague@acm.org>
parents: 13801
diff changeset
958
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
959
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
960 class NotFound(LookupError):
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
961 pass
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
962
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
963
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
964 class bzrestapi(bzaccess):
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
965 """Read and write bugzilla data using the REST API available since
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
966 Bugzilla 5.0.
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
967 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
968
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
969 def __init__(self, ui):
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
970 bzaccess.__init__(self, ui)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
971 bz = self.ui.config(b'bugzilla', b'bzurl')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
972 self.bzroot = b'/'.join([bz, b'rest'])
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
973 self.apikey = self.ui.config(b'bugzilla', b'apikey')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
974 self.user = self.ui.config(b'bugzilla', b'user')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
975 self.passwd = self.ui.config(b'bugzilla', b'password')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
976 self.fixstatus = self.ui.config(b'bugzilla', b'fixstatus')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
977 self.fixresolution = self.ui.config(b'bugzilla', b'fixresolution')
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
978
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
979 def apiurl(self, targets, include_fields=None):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
980 url = b'/'.join([self.bzroot] + [pycompat.bytestr(t) for t in targets])
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
981 qv = {}
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
982 if self.apikey:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
983 qv[b'api_key'] = self.apikey
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
984 elif self.user and self.passwd:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
985 qv[b'login'] = self.user
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
986 qv[b'password'] = self.passwd
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
987 if include_fields:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
988 qv[b'include_fields'] = include_fields
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
989 if qv:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
990 url = b'%s?%s' % (url, util.urlreq.urlencode(qv))
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
991 return url
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
992
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
993 def _fetch(self, burl):
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
994 try:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
995 resp = url.open(self.ui, burl)
43380
579672b347d2 py3: define and use json.loads polyfill
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43115
diff changeset
996 return pycompat.json_loads(resp.read())
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
997 except util.urlerr.httperror as inst:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
998 if inst.code == 401:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
999 raise error.Abort(_(b'authorization failed'))
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1000 if inst.code == 404:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1001 raise NotFound()
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1002 else:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1003 raise
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1004
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1005 def _submit(self, burl, data, method=b'POST'):
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1006 data = json.dumps(data)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1007 if method == b'PUT':
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1008
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1009 class putrequest(util.urlreq.request):
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1010 def get_method(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1011 return b'PUT'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1012
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1013 request_type = putrequest
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1014 else:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1015 request_type = util.urlreq.request
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1016 req = request_type(burl, data, {b'Content-Type': b'application/json'})
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1017 try:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1018 resp = url.opener(self.ui).open(req)
43380
579672b347d2 py3: define and use json.loads polyfill
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43115
diff changeset
1019 return pycompat.json_loads(resp.read())
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1020 except util.urlerr.httperror as inst:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1021 if inst.code == 401:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1022 raise error.Abort(_(b'authorization failed'))
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1023 if inst.code == 404:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1024 raise NotFound()
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1025 else:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1026 raise
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1027
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1028 def filter_real_bug_ids(self, bugs):
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1029 '''remove bug IDs that do not exist in Bugzilla from bugs.'''
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1030 badbugs = set()
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1031 for bugid in bugs:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1032 burl = self.apiurl((b'bug', bugid), include_fields=b'status')
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1033 try:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1034 self._fetch(burl)
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1035 except NotFound:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1036 badbugs.add(bugid)
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1037 for bugid in badbugs:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1038 del bugs[bugid]
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1039
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1040 def filter_cset_known_bug_ids(self, node, bugs):
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1041 '''remove bug IDs where node occurs in comment text from bugs.'''
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1042 sn = short(node)
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1043 for bugid in bugs.keys():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1044 burl = self.apiurl(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1045 (b'bug', bugid, b'comment'), include_fields=b'text'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1046 )
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1047 result = self._fetch(burl)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1048 comments = result[b'bugs'][pycompat.bytestr(bugid)][b'comments']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1049 if any(sn in c[b'text'] for c in comments):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1050 self.ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1051 _(b'bug %d already knows about changeset %s\n')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1052 % (bugid, sn)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1053 )
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1054 del bugs[bugid]
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1055
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1056 def updatebug(self, bugid, newstate, text, committer):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
1057 """update the specified bug. Add comment text and set new states.
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1058
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1059 If possible add the comment as being from the committer of
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1060 the changeset. Otherwise use the default Bugzilla user.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
1061 """
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1062 bugmod = {}
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1063 if b'hours' in newstate:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1064 bugmod[b'work_time'] = newstate[b'hours']
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1065 if b'fix' in newstate:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1066 bugmod[b'status'] = self.fixstatus
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1067 bugmod[b'resolution'] = self.fixresolution
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1068 if bugmod:
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1069 # if we have to change the bugs state do it here
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1070 bugmod[b'comment'] = {
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1071 b'comment': text,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1072 b'is_private': False,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1073 b'is_markdown': False,
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1074 }
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1075 burl = self.apiurl((b'bug', bugid))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1076 self._submit(burl, bugmod, method=b'PUT')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1077 self.ui.debug(b'updated bug %s\n' % bugid)
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1078 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1079 burl = self.apiurl((b'bug', bugid, b'comment'))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1080 self._submit(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1081 burl,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1082 {
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1083 b'comment': text,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1084 b'is_private': False,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1085 b'is_markdown': False,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1086 },
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1087 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1088 self.ui.debug(b'added comment to bug %s\n' % bugid)
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1089
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1090 def notify(self, bugs, committer):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
1091 """Force sending of Bugzilla notification emails.
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1092
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1093 Only required if the access method does not trigger notification
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1094 emails automatically.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
1095 """
30923
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1096 pass
78de43ab585f bugzilla: add a rest api backend (usable with bugzilla 5.0+)
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 30478
diff changeset
1097
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1098
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1099 class bugzilla(object):
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1100 # 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
1101 # different schemas.
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1102 _versions = {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1103 b'2.16': bzmysql,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1104 b'2.18': bzmysql_2_18,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1105 b'3.0': bzmysql_3_0,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1106 b'xmlrpc': bzxmlrpc,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1107 b'xmlrpc+email': bzxmlrpcemail,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1108 b'restapi': bzrestapi,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1109 }
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1110
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1111 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
1112 self.ui = ui
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1113 self.repo = repo
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1114
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1115 bzversion = self.ui.config(b'bugzilla', b'version')
21855
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1116 try:
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1117 bzclass = bugzilla._versions[bzversion]
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1118 except KeyError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1119 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1120 _(b'bugzilla version %s not supported') % bzversion
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1121 )
21855
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1122 self.bzdriver = bzclass(self.ui)
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1123
21855
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1124 self.bug_re = re.compile(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1125 self.ui.config(b'bugzilla', b'regexp'), re.IGNORECASE
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1126 )
21855
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1127 self.fix_re = re.compile(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1128 self.ui.config(b'bugzilla', b'fixregexp'), re.IGNORECASE
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1129 )
41343
7370f302be71 py3: port test-bugzilla.t to Python 3
Augie Fackler <augie@google.com>
parents: 37463
diff changeset
1130 self.split_re = re.compile(br'\D+')
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1131
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
1132 def find_bugs(self, ctx):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
1133 """return bugs dictionary created from commit comment.
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1134
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
1135 Extract bug info from changeset comments. Filter out any that are
13799
d04fc5582772 bugzilla: keep bug IDs in set.
Jim Hague <jim.hague@acm.org>
parents: 13798
diff changeset
1136 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
1137 the given changeset in their comments.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
1138 """
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1139 start = 0
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
1140 bugs = {}
21855
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1141 bugmatch = self.bug_re.search(ctx.description(), start)
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1142 fixmatch = self.fix_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
1143 while True:
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
1144 bugattribs = {}
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
1145 if not bugmatch and not fixmatch:
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1146 break
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
1147 if not bugmatch:
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
1148 m = fixmatch
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
1149 elif not fixmatch:
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
1150 m = bugmatch
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
1151 else:
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
1152 if bugmatch.start() < fixmatch.start():
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
1153 m = bugmatch
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
1154 else:
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
1155 m = fixmatch
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1156 start = m.end()
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
1157 if m is bugmatch:
21855
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1158 bugmatch = self.bug_re.search(ctx.description(), start)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1159 if b'fix' in bugattribs:
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1160 del bugattribs[b'fix']
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
1161 else:
21855
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1162 fixmatch = self.fix_re.search(ctx.description(), start)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1163 bugattribs[b'fix'] = None
16223
ac4fd3238ead bugzilla: allow change comment to mark bugs fixed
Jim Hague <jim.hague@acm.org>
parents: 16222
diff changeset
1164
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
1165 try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1166 ids = m.group(b'ids')
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
1167 except IndexError:
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
1168 ids = m.group(1)
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
1169 try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1170 hours = float(m.group(b'hours'))
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1171 bugattribs[b'hours'] = hours
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
1172 except IndexError:
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
1173 pass
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
1174 except TypeError:
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
1175 pass
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
1176 except ValueError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1177 self.ui.status(_(b"%s: invalid hours\n") % m.group(b'hours'))
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
1178
21855
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1179 for id in self.split_re.split(ids):
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10263
diff changeset
1180 if not id:
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10263
diff changeset
1181 continue
16222
d7b7b453c035 bugzilla: extract optional hours from commit message and update bug time
Jim Hague <jim.hague@acm.org>
parents: 16221
diff changeset
1182 bugs[int(id)] = bugattribs
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
1183 if bugs:
21855
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1184 self.bzdriver.filter_real_bug_ids(bugs)
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
1185 if bugs:
21855
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1186 self.bzdriver.filter_cset_known_bug_ids(ctx.node(), bugs)
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
1187 return bugs
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1188
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
1189 def update(self, bugid, newstate, ctx):
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1190 '''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
1191
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1192 def webroot(root):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
1193 """strip leading prefix of repo root and turn into
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
1194 url-safe path."""
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1195 count = int(self.ui.config(b'bugzilla', b'strip'))
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1196 root = util.pconvert(root)
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1197 while count > 0:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1198 c = root.find(b'/')
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1199 if c == -1:
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1200 break
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1201 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
1202 count -= 1
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1203 return root
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1204
28950
9e1c9f016b72 bugzilla: do not load style file if template is specified (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 28091
diff changeset
1205 mapfile = None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1206 tmpl = self.ui.config(b'bugzilla', b'template')
28950
9e1c9f016b72 bugzilla: do not load style file if template is specified (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 28091
diff changeset
1207 if not tmpl:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1208 mapfile = self.ui.config(b'bugzilla', b'style')
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1209 if not mapfile and not tmpl:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1210 tmpl = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1211 b'changeset {node|short} in repo {root} refers '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1212 b'to bug {bug}.\ndetails:\n\t{desc|tabindent}'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1213 )
35888
c8e2d6ed1f9e cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents: 35151
diff changeset
1214 spec = logcmdutil.templatespec(tmpl, mapfile)
35954
386c1e45e671 logcmdutil: drop default arguments from changesetdisplayer/templater() calls
Yuya Nishihara <yuya@tcha.org>
parents: 35888
diff changeset
1215 t = logcmdutil.changesettemplater(self.ui, self.repo, spec)
3741
0897bf8d54c7 update bugzilla extension to use ui buffers
Matt Mackall <mpm@selenic.com>
parents: 3643
diff changeset
1216 self.ui.pushbuffer()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1217 t.show(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1218 ctx,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1219 changes=ctx.changeset(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1220 bug=pycompat.bytestr(bugid),
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1221 hgweb=self.ui.config(b'web', b'baseurl'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1222 root=self.repo.root,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1223 webroot=webroot(self.repo.root),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1224 )
3741
0897bf8d54c7 update bugzilla extension to use ui buffers
Matt Mackall <mpm@selenic.com>
parents: 3643
diff changeset
1225 data = self.ui.popbuffer()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1226 self.bzdriver.updatebug(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1227 bugid, newstate, data, stringutil.email(ctx.user())
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1228 )
21855
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1229
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1230 def notify(self, bugs, committer):
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1231 '''ensure Bugzilla users are notified of bug change.'''
1eda3e556845 bugzilla: stop trying to cache setup across hook invocation
Jim Hague <jim.hague@acm.org>
parents: 21842
diff changeset
1232 self.bzdriver.notify(bugs, committer)
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1233
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1234
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1235 def hook(ui, repo, hooktype, node=None, **kwargs):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
1236 """add comment to bugzilla for each changeset that refers to a
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1237 bugzilla bug id. only add a comment once per bug, so same change
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 43970
diff changeset
1238 seen multiple times does not fill bug with duplicate data."""
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1239 if node is None:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1240 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1241 _(b'hook type %s does not pass a changeset id') % hooktype
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1242 )
2192
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1243 try:
2be3ac7abc21 add bugzilla integration hook. example of writing hook in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
1244 bz = bugzilla(ui, repo)
6747
f6c00b17387c use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents: 6548
diff changeset
1245 ctx = repo[node]
16221
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
1246 bugs = bz.find_bugs(ctx)
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
1247 if bugs:
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
1248 for bug in bugs:
4fc9fcd991c1 bugzilla: modify access interface to include new bug states
Jim Hague <jim.hague@acm.org>
parents: 16193
diff changeset
1249 bz.update(bug, bugs[bug], ctx)
37084
f0b6fbea00cf stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 35954
diff changeset
1250 bz.notify(bugs, stringutil.email(ctx.user()))
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25186
diff changeset
1251 except Exception as e:
46080
1d252e73af61 bugzilla: fix reporting of exceptions with py3
Mads Kiilerich <mads@kiilerich.com>
parents: 43970
diff changeset
1252 raise error.Abort(_(b'Bugzilla error: %s') % stringutil.forcebytestr(e))