annotate hgext/bugzilla.py @ 49000:dd6b67d5c256 stable

rust: fix unsound `OwningDirstateMap` As per the previous patch, `OwningDirstateMap` is unsound. Self-referential structs are difficult to implement correctly in Rust since the compiler is free to move structs around as much as it wants to. They are also very rarely needed in practice, so the state-of-the-art on how they should be done within the Rust rules is still a bit new. The crate `ouroboros` is an attempt at providing a safe way (in the Rust sense) of declaring self-referential structs. It is getting a lot attention and was improved very quickly when soundness issues were found in the past: rather than relying on our own (limited) review circle, we might as well use the de-facto common crate to fix this problem. This will give us a much better chance of finding issues should any new ones be discovered as well as the benefit of fewer `unsafe` APIs of our own. I was starting to think about how I would present a safe API to the old struct but soon realized that the callback-based approach was already done in `ouroboros`, along with a lot more care towards refusing incorrect structs. In short: we don't return a mutable reference to the `DirstateMap` anymore, we expect users of its API to pass a `FnOnce` that takes the map as an argument. This allows our `OwningDirstateMap` to control the input and output lifetimes of the code that modifies it to prevent such issues. Changing to `ouroboros` meant changing every API with it, but it is relatively low churn in the end. It correctly identified the example buggy modification of `copy_map_insert` outlined in the previous patch as violating the borrow rules. Differential Revision: https://phab.mercurial-scm.org/D12429
author Raphaël Gomès <rgomes@octobus.net>
date Tue, 05 Apr 2022 10:55:28 +0200
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))