[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#865792: marked as done (reportbug: Allow an arbitrary MUA to be configured (patch))



Your message dated Fri, 10 Jul 2020 02:37:55 +0000
with message-id <E1jtivD-000CRo-AT@fasolo.debian.org>
and subject line Bug#865792: fixed in reportbug 7.7.0
has caused the Debian Bug report #865792,
regarding reportbug: Allow an arbitrary MUA to be configured (patch)
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
865792: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=865792
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: reportbug
Version: 7.1.7
Severity: normal
Tags: patch

Dear Maintainer,

The "mua" option allowed a custom mua command to be defined, but it
was only permitted for the list of 5 supported muas. This patch allows
an arbitrary mua command string to be defined.

The defined mua is set to default, and is added to the list of available
MUAs.

This also adds a 'mua-version' option, which specifies the mua
command-line argument for 'no action', which is used in utils.mua_exists()
as an 'are you there?" check. This only applies to custom muas. The option
defaults to "--version".

As a side effect, the overloaded definition of 'mua' in utils, where
it could either be a string or a Mua object, depending on user options,
is eliminated.

This does not introduce any test failures.


-- Package-specific info:
** Environment settings:
DEBEMAIL="dsteele@gmail.com"
DEBFULLNAME="David Steele"
INTERFACE="gtk2"

** /home/daves/.reportbugrc:
reportbug_version "6.6.6"
mode standard
ui gtk2
email "steele@debian.org"
smtphost "smtp.gmail.com"

-- System Information:
Debian Release: 9.0
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.9.0-3-amd64 (SMP w/6 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages reportbug depends on:
ii  apt                1.4.6
ii  python3            3.5.3-1
ii  python3-reportbug  7.1.7

reportbug recommends no packages.

Versions of packages reportbug suggests:
pn  claws-mail                                 <none>
pn  debconf-utils                              <none>
ii  debsums                                    2.2.2
pn  dlocate                                    <none>
pn  emacs24-bin-common | emacs25-bin-common    <none>
ii  exim4                                      4.89-3
ii  exim4-daemon-light [mail-transport-agent]  4.89-3
ii  file                                       1:5.30-1
ii  gir1.2-gtk-3.0                             3.22.16-1
ii  gir1.2-vte-2.91                            0.46.1-1
ii  gnupg                                      2.1.18-8
ii  python3-gi                                 3.22.0-2
ii  python3-gi-cairo                           3.22.0-2
pn  python3-gtkspellcheck                      <none>
ii  python3-urwid                              1.3.1-2+b1
ii  xdg-utils                                  1.1.1-1

Versions of packages python3-reportbug depends on:
ii  apt                1.4.6
ii  file               1:5.30-1
ii  python3            3.5.3-1
ii  python3-debian     0.1.30
ii  python3-debianbts  2.6.1
ii  python3-requests   2.12.4-1

python3-reportbug suggests no packages.

-- Configuration Files:
/etc/reportbug.conf changed [not included]

-- no debconf information
From df360fb1796706f1f96f0af4113419bf50d9010a Mon Sep 17 00:00:00 2001
From: David Steele <steele@debian.org>
Date: Wed, 21 Jun 2017 12:14:35 -0500
Subject: [PATCH] Add support for a custom mua command

The "mua" option allowed a custom mua command to be defined, but it
was only permitted for the list of 5 supported muas. This patch allows
an arbitrary mua command string to be defined.

The defined mua is set to default, and is added to the list of available
MUAs.

This also adds a 'mua-version' option, which specifies the mua
command-line argument for 'no action', which is used in utils.mua_exists(),
as an 'are you there?" check. This only applies to custom muas. The option
defaults to "--version".

As a side effect, the overloaded definition of 'mua' in utils, where
it could either be a string or a Mua object, depending on user options,
is eliminated.
---
 bin/reportbug        |  14 +++----
 conf/reportbug.conf  |   9 ++++-
 man/reportbug.1      |   9 ++++-
 man/reportbug.conf.5 |  12 +++++-
 reportbug/utils.py   | 107 ++++++++++++++++++++-------------------------------
 test/test_utils.py   |  29 ++++++++------
 6 files changed, 93 insertions(+), 87 deletions(-)

diff --git a/bin/reportbug b/bin/reportbug
index 7eda598..71282c5 100755
--- a/bin/reportbug
+++ b/bin/reportbug
@@ -793,7 +793,8 @@ def main():
                     editor='', offline=False, verify=True, check_uid=True,
                     testmode=False, attachments=[], keyid='', body=None,
                     bodyfile=None, smtptls=False, smtpuser='', smtppasswd='',
-                    paranoid=False, mbox_reader_cmd=None)
+                    paranoid=False, mbox_reader_cmd=None,
+                    mua_version="--version")
 
     # Convention: consider `option.foo' names read-only; they always contain
     # the original value as determined by the cascade of command-line options
@@ -861,6 +862,8 @@ def main():
                       dest='bugnumber', help='specify a bug number to look for')
     parser.add_option('--mua', dest='mua',
                       help='send the report using the specified mail user agent')
+    parser.add_option('--mua-version', dest='mua_version',
+                      help='an mua option that results in no action (to verify mua is available)')
     parser.add_option('--mta', dest='mta', help='send the report using the '
                                                 'specified mail transport agent')
     parser.add_option('--list-cc', action='append', dest='listcc',
@@ -1054,17 +1057,14 @@ def main():
             ewrite("The directory %s does not exist; exiting.\n" % options.draftpath)
             sys.exit(1)
 
-    if options.mua and not options.template:
-        if not utils.mua_is_supported(options.mua):
-            ewrite("Specified mail user agent is not supported; exiting.\n")
-            sys.exit(1)
+    if isinstance(options.mua, str):
+        options.mua = utils.mua_create(options.mua, options.mua_version)
 
+    if options.mua and not options.template:
         if not utils.mua_exists(options.mua):
             ewrite("Selected mail user agent cannot be found; exiting.\n")
             sys.exit(1)
 
-        options.mua = utils.mua_name(options.mua)
-
     # try to import the specified UI, but only if template
     # is not set (it's useful only in 'text' UI).
     if options.interface and not options.template:
diff --git a/conf/reportbug.conf b/conf/reportbug.conf
index fd08bab..e55bf10 100644
--- a/conf/reportbug.conf
+++ b/conf/reportbug.conf
@@ -19,9 +19,16 @@ submit
 # mh
 # nmh
 
-# You can also use 'mua'; it takes an argument like that to --mua
+# You can also use 'mua'; it takes an argument like that to --mua.
+# '%s' is replaced with the path to the message file. It is appended if
+# not present.
 # mua 'mutt -H'
 
+# If you use the 'mua' option, you can also specify an mua option that
+# causes the mua to exit without action. This is used to verify that the
+# mua is present and available. It defaults to "--version".
+# mua_version '--version'
+
 # Additional headers to add:
 # header "X-Debbugs-CC: debian-qa@lists.debian.org"
 # header "X-Silly-Header: I haven't edited my /etc/reportbug.conf"
diff --git a/man/reportbug.1 b/man/reportbug.1
index f5f0ede..cc6a0bf 100644
--- a/man/reportbug.1
+++ b/man/reportbug.1
@@ -286,7 +286,14 @@ Specify an alternate \fIMTA\fP, instead of \fB/usr/sbin/sendmail\fP
 .B \-\-mua=MUA
 Instead of spawning an editor to revise the bug report, use the
 specified \fIMUA\fP (mail user agent) to edit and send
-it. \fB--mutt\fP and \fB--nmh\fP options are processed.
+it. The string \fI%s\fP is replaced with the file containing the
+message to send. It is appended to the command if not present.
+.TP
+.B \-\-mua-version=OPTION
+If the \fB--mua\fP option is used, specify the command-line MUA option
+for returning with no action. This is used by reportbug to determine
+that the MUA is installed and available. If not specified, this
+defaults to "--version".
 .TP
 .B \-n, \-\-mh, \-\-nmh
 Instead of spawning an editor to revise the bug report, use the
diff --git a/man/reportbug.conf.5 b/man/reportbug.conf.5
index 3493889..03b4a0a 100644
--- a/man/reportbug.conf.5
+++ b/man/reportbug.conf.5
@@ -166,11 +166,21 @@ with the default:
 .TP
 .B mua
 The mail user agent to use (the default is empty, to use an internal
-mailer). Example:
+mailer). The string "%s" is replaced with the path to the file containing
+the message to be sent. If not present, the path is set as the last
+argument. Example:
 
 \fBmua\fP \fI'mutt \-H'\fP
 
 .TP
+.B mua_version
+If the \fBmua\fP option is used, this specifies a MUA command-line
+option that causes the MUA to return without action. This is used to
+verify that the MUA is installed and available. Example:
+
+\fBmua_version\fP \fI'\-h'\fP
+
+.TP
 .B mutt
 Use the \fBmutt\fP mailer.
 .TP
diff --git a/reportbug/utils.py b/reportbug/utils.py
index 8139668..42c9cec 100644
--- a/reportbug/utils.py
+++ b/reportbug/utils.py
@@ -865,21 +865,19 @@ USERFILE = os.path.expanduser('~/.reportbugrc')
 FILES = ('/etc/reportbug.conf', USERFILE)
 
 CONFIG_ARGS = (
-    'sendto', 'severity', 'mua', 'mta', 'email', 'realname', 'bts', 'verify',
-    'replyto', 'http_proxy', 'smtphost', 'editor', 'debconf', 'justification',
-    'sign', 'nocc', 'nocompress', 'dontquery', 'noconf', 'mirrors', 'keyid',
-    'headers', 'interface', 'template', 'mode', 'check_available', 'query_src',
-    'printonly', 'offline', 'check_uid', 'smtptls', 'smtpuser', 'smtppasswd',
-    'paranoid', 'mbox_reader_cmd', 'max_attachment_size')
+    'sendto', 'severity', 'mua', 'mua_version', 'mta', 'email', 'realname',
+    'bts', 'verify', 'replyto', 'http_proxy', 'smtphost', 'editor', 'debconf',
+    'justification', 'sign', 'nocc', 'nocompress', 'dontquery', 'noconf',
+    'mirrors', 'keyid', 'headers', 'interface', 'template', 'mode',
+    'check_available', 'query_src', 'printonly', 'offline', 'check_uid',
+    'smtptls', 'smtpuser', 'smtppasswd', 'paranoid', 'mbox_reader_cmd',
+    'max_attachment_size')
 
 
 class Mua:
-    command = ""
-    name = ""
-
-    def __init__(self, command):
+    def __init__(self, name, command):
         self.command = command
-        self.name = command.split()[0]
+        self.name = name
 
     def send(self, filename):
         mua = self.command
@@ -892,9 +890,8 @@ class Mua:
 
 
 class Gnus(Mua):
-    name = "gnus"
-
     def __init__(self):
+        self.name = "gnus"
         pass
 
     def send(self, filename):
@@ -908,65 +905,53 @@ class Gnus(Mua):
 
 
 MUA = {
-    'mutt': Mua('mutt -H'),
-    'mh': Mua('/usr/bin/mh/comp -use -file'),
+    'mutt': Mua('mutt', 'mutt -H'),
+    'mh': Mua('mh', '/usr/bin/mh/comp -use -file'),
+    'nmh': Mua('nmh', '/usr/bin/mh/comp -use -file'),
     'gnus': Gnus(),
-    'claws-mail': Mua('claws-mail --compose-from-file'),
+    'claws-mail': Mua('claws-mail', 'claws-mail --compose-from-file'),
 }
-MUA['nmh'] = MUA['mh']
+
 
 # TODO: convert them to class methods
 MUAVERSION = {
-    MUA['mutt']: 'mutt -v',
-    MUA['mh']: '/usr/bin/mh/comp -use -file',
-    MUA['gnus']: 'emacs --version',
-    MUA['claws-mail']: 'claws-mail --version',
+    'mutt': 'mutt -v',
+    'mh': '/usr/bin/mh/comp -use -file',
+    'nmh': '/usr/bin/mh/comp -use -file',
+    'gnus': 'emacs --version',
+    'claws-mail': 'claws-mail --version',
 }
 
 
-def mua_is_supported(mua):
-    # check if the mua is supported by reportbug
-    if mua == 'mh' or mua == MUA['mh']:
-        mua_tmp = 'mh'
-    elif mua == 'nmh' or mua == MUA['nmh']:
-        mua_tmp = 'mh'
-    elif mua == 'gnus' or mua == MUA['gnus']:
-        mua_tmp = 'gnus'
-    elif mua == 'mutt' or mua == MUA['mutt']:
-        mua_tmp = 'mutt'
-    elif mua == 'claws-mail' or mua == MUA['claws-mail']:
-        mua_tmp = 'claws-mail'
-    else:
-        mua_tmp = mua
-    if mua_tmp not in MUA:
-        return False
+def mua_create(muacmd, verstr):
+    global MUA, MUAVERSION
+
+    if muacmd in MUA:
+        mua = MUA[muacmd]
     else:
-        return True
+        muaname = muacmd.split(' ')[0]
+        mua = Mua(muaname, muacmd)
+        MUA[muaname] = mua
+        MUAVERSION[muaname] = "{0} {1}".format(muaname, verstr)
+
+    return mua
+
+
+def mua_version_cmd(mua):
+    return MUAVERSION[mua]
 
 
 def mua_exists(mua):
-    # check if the mua is available on the system
-    if mua == 'mh' or mua == MUA['mh']:
-        mua_tmp = MUA['mh']
-    elif mua == 'nmh' or mua == MUA['nmh']:
-        mua_tmp = MUA['mh']
-    elif mua == 'gnus' or mua == MUA['gnus']:
-        mua_tmp = MUA['gnus']
-    elif mua == 'mutt' or mua == MUA['mutt']:
-        mua_tmp = MUA['mutt']
-    elif mua == 'claws-mail' or mua == MUA['claws-mail']:
-        mua_tmp = MUA['claws-mail']
-    else:
-        mua_tmp = MUA[mua]
     output = '/dev/null'
+    muaname = mua.get_name()
     if os.path.exists(output):
         try:
-            returnvalue = subprocess.call(MUAVERSION[mua_tmp], stdout=open(output, 'w'), stderr=subprocess.STDOUT,
+            returnvalue = subprocess.call(mua_version_cmd(muaname), stdout=open(output, 'w'), stderr=subprocess.STDOUT,
                                           shell=True)
         except (IOError, OSError):
-            returnvalue = subprocess.call(MUAVERSION[mua_tmp], shell=True)
+            returnvalue = subprocess.call(mua_version_cmd(muaname), shell=True)
     else:
-        returnvalue = subprocess.call(MUAVERSION[mua_tmp], shell=True)
+        returnvalue = subprocess.call(mua_version_cmd(muaname), shell=True)
     # 127 is the shell standard return value to indicate a 'command not found' result
     if returnvalue == 127:
         return False
@@ -974,14 +959,6 @@ def mua_exists(mua):
         return True
 
 
-def mua_name(mua):
-    # in case the user specifies only the mua name in --mua, returns the default options
-    if mua in MUA:
-        return MUA[mua]
-    else:
-        return mua
-
-
 def first_run():
     return not os.path.exists(USERFILE)
 
@@ -1019,9 +996,9 @@ def parse_config_files():
                 elif token in ('printonly', 'template', 'offline'):
                     args[token] = True
                 elif token in ('email', 'realname', 'replyto', 'http_proxy',
-                               'smtphost', 'editor', 'mua', 'mta', 'smtpuser',
-                               'smtppasswd', 'justification', 'keyid',
-                               'mbox_reader_cmd'):
+                               'smtphost', 'editor', 'mua', 'mua_version',
+                               'mta', 'smtpuser', 'smtppasswd',
+                               'justification', 'keyid', 'mbox_reader_cmd'):
                     bit = lex.get_token()
                     args[token] = bit
                 elif token in ('no-smtptls', 'smtptls'):
diff --git a/test/test_utils.py b/test/test_utils.py
index 09a42b1..8e924dd 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -372,26 +372,31 @@ class TestSystemInformation(unittest.TestCase):
 
 
 class TestMua(unittest.TestCase):
-    def test_mua_is_supported(self):
+    def test_mua_exists(self):
 
-        for mua in ('mh', 'nmh', 'gnus', 'mutt', 'claws-mail'):
-            self.assertTrue(utils.mua_is_supported(mua))
+        for muaname in ('mh', 'nmh', 'gnus', 'mutt', 'claws-mail'):
+            if not utils.mua_exists(utils.MUA[muaname]):
+                self.fail("%s MUA program not available" % muaname)
 
-        self.assertFalse(utils.mua_is_supported('mua-of-my-dreams'))
+    def test_mua_custom_exists(self):
+        mymua = utils.mua_create('ls -l', '-h')
 
-    def test_mua_exists(self):
+        self.assertTrue(utils.mua_exists(mymua))
 
-        for mua in ('mh', 'nmh', 'gnus', 'mutt', 'claws-mail'):
-            if not utils.mua_exists(mua):
-                self.fail("%s MUA program not available" % mua)
+        del utils.MUA['ls']
+        del utils.MUAVERSION['ls']
 
-    def test_mua_name(self):
+    def test_mua_version(self):
+        self.assertEqual(utils.mua_version_cmd('mutt'), 'mutt -v')
 
-        for mua in ('mh', 'nmh', 'gnus', 'mutt', 'claws-mail'):
-            self.assertIsInstance(utils.mua_name(mua), utils.Mua)
+    def test_mua_set_custom(self):
+        utils.mua_create('mua-of-my-dreams --send', '-h')
 
-        self.assertEqual(utils.mua_name('mua-of-my-dreams'), 'mua-of-my-dreams')
+        self.assertEqual(utils.mua_version_cmd('mua-of-my-dreams'),
+                                               'mua-of-my-dreams -h')
 
+        del utils.MUA['mua-of-my-dreams']
+        del utils.MUAVERSION['mua-of-my-dreams']
 
 class TestBugreportBody(unittest.TestCase):
     def test_get_dependency_info(self):
-- 
2.13.1

Attachment: signature.asc
Description: GooPG digital signature


--- End Message ---
--- Begin Message ---
Source: reportbug
Source-Version: 7.7.0
Done: Sandro Tosi <morph@debian.org>

We believe that the bug you reported is fixed in the latest version of
reportbug, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 865792@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Sandro Tosi <morph@debian.org> (supplier of updated reportbug package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Format: 1.8
Date: Thu, 09 Jul 2020 22:18:36 -0400
Source: reportbug
Architecture: source
Version: 7.7.0
Distribution: unstable
Urgency: medium
Maintainer: Reportbug Maintainers <debian-reportbug@lists.debian.org>
Changed-By: Sandro Tosi <morph@debian.org>
Closes: 271084 532150 544812 620712 657066 687214 709862 730236 780747 788045 843337 855380 865792 867663 871048 872772 883346 894794 918989 919102 922058 926726 936061 940532 942261 946363 946963 955809 961675 961955 963073 963762 964260
Changes:
 reportbug (7.7.0) unstable; urgency=medium
 .
   [ Bastian Venthur ]
   * Replace nosetests with pytest
   * replace pep8, pyflake, pylint with flake8
   * updated docs
   * removed references to non-existing coverage targets
   * removed remaining traces of nose
 .
   [ Nis Martensen ]
   * reportbug/utils.py
     - support merged-/usr during file search; Closes: #942261
     - get_source_name: improve, use python apt
     - use a single global apt cache
     - simplify mua_is_supported
     - switch from pipes to shlex.quotes
     - simplify mua_exists, drop MUAVERSION
     - drop Mua.get_name()
     - add mua support via xdg-email
       (Closes: #532150, #788045, #865792)
     - protect against too long mailto argument
     - Mua.send: return commandline instead of calling ui.system
     - Mua: rename send → get_send_command
     - rename Xdg → Mailto
     - add direct support for a few more MUAs
       Closes: #271084, #922058
     - reportbug/utils.py: clean up cleanup_msg
     - fix get_source_name breakage from previous change
   * bin/reportbug
     - recognize source packages (and `src:linux`) when sending followup info;
       Closes: #946363
     - try to determine an unambiguous package name to pass to debsums;
       Closes: #940532
     - do not create an empty tempfile if the `outfile` option is given
     - fix re-execution after configuration;
       Closes: #620712, #730236, #780747, #926726
     - Query both binary and source package by default; Closes: #936061
     - minor update for STARTTLS clarification
     - Improved QuertBTSError handling
     - improve and simplify mailer selection in handle_editing
     - handle_editing: capitalize "print ..." menu option
   * reportbug/bugreport.py
     - correctly detect LANGUAGE; Closes: #946963
     - bugreport.py: fix missing cores → threads
   * reportbug/debbugs.py:
     - get_reports: also include bugs that affect the package;
       Closes: #544812
     - get_reports: add support for lists of packages
     - get_reports: drop one try..except
   * reportbug/submit.py:
     - use implicit SSL with port 465
     - show output file name after quitting mailer without sending
   * bin/reportbug, reportbug.utils, test_utils: drop mua_name function
   * reportbug/utils.py,submit.py: rename Mua.name → Mua.executable
   * urlutils.py, checkversions.py: use proxy and timeout;
       Closes: #961955
   * reportbug/ui/gtk_ui.py:
     - fix crash in handle_bts_query on non-Debian systems; Closes: #709862
     - Hide back button; Closes: #855380, #867663, #872772
     - handle_bts_query: Use QuertBTSError instead of NoBugs;
       Closes: #919102, #918989
     - drop broken/unused error_dialog function
     - fix argument order in _assert_context
     - fix crash when copying text to clipboard
     - do not change window title in final_message
   * reportbug/ui/text_ui.py:
     - use subprocess.Popen instead of os.popen; Closes: #961675
     - handle_bts_query: Use QuertBTSError
   * reportbug/ui/urwid_ui.py:
     - survive ancient encoding
     - handle_bts_query: Use QuertBTSError
   * Testsuite:
     - adapt to recent code changes
     - test get_source_name with astroid
     - test_debbugs.py: add ftbfs tag
     - test_utils.py: add test for new xdg-email Mua
     - test: adapt to splitting mailer off utils
     - test/test_mailer.py: do not require all MUAs to be installed
       (Closes: #843337)
     - test_mailer.py: extend for big messages and attachments
     - test_utils.py: dirtify test data for cleanup_msg
     - test_utils.py: complete test for cleanup_msg
     - test_utils.py: adapt cleanup_msg expected results
   * fix some minor typos in various files
   * manpages:
     - document that reportbug will exit after --configure
     - Update for SSL/TLS encrypted submission support
     - reportbug.1: mention how to obtain list of valid BTS systems
       (Closes: #964260)
   * doc/README.Users:
     - Clarify how to configure reportbug.debian.org
       (Closes: #963073)
     - document limitations of MUA support
     - some MUAs now support attachments
   * share/handle_bugscript: convert to UTF-8
   * Lintian fixes:
     - add override for desktop-command-not-in-package
     - d/control: suggest default mta
     - d/copyright: fix obsolete-field-in-dep5-copyright
     - d/copyright: fix dep5-copyright-license-name-not-unique
     - d/copyright: fix missing-license-paragraph-in-dep5-copyright
     - d/copyright: fix missing-field-in-dep5-copyright
     - d/copyright: GPL-any is equivalent to GPL-1+
   * debian/control:
     - switch to debhelper compat level 12
     - add Rules-Requires-Root (R³)
     - update standards-version (no changes needed)
   * split off MUA stuff from utils into new mailer submodule
   * reportbug/mailer.py:
     - Mailto Mua: fix payload decoding
     - Mailto Mua: multipart → mailto is not supported
     - Mailto Mua: not urlquoting "/" should be safe
     - mua_exists: invert logic
     - better attachment file check
   * reportbug/exceptions.py,mailer.py: use custom BadMessage exception
   * do not try to run graphical MUAs in text-only environments
   * Use X-Debbugs-CC as pseudoheader instead of header
   * bin/reportbug,reportbug/submit.py,mailer.py: support attachments with MUA
     Closes: #894794
   * bin/reportbug, reportbug/utils.py: minor regex improvements
   * bin/reportbug, reportbug/ui/gtk_ui.py: allow reply with -N in GTK ui
     (Closes: #687214)
   * bin/reportbug, reportbug.desktop: drop --exit-prompt option
 .
   [ Fabrice BAUZAC ]
   * Improve code documentation
 .
   [ Jens Korte ]
   * Update description of --bts option in reportbug.1 man page
 .
   [ Paul Gevers ]
   * Add template to (o)pu release.debian.org bugs; Closes: #883346
 .
   [ Josh Triplett ]
   * querybts: Use http_proxy when opening mbox URLs
 .
   [ Ansgar ]
   * bugreport.py: "CPU cores" → "CPU threads"
 .
   [ Bas Couwenberg ]
   * reportbug/debbugs.py: add the 'ftbfs' tag to make `-T ftbfs` work;
     Closes: #955809
 .
   [ chrysn ]
   * reportbug/ui/gtk_ui.py: add hint to press Next of no bug matches;
     Closes: #871048
 .
   [ mozbugbox ]
   * bin/reportbug: allow followups on ITP bugs; Closes: #657066
 .
   [ Brian Murray ]
   * reportbug/ui/text_ui.py: launch browser for correct package type
     (Closes: #963762)
 .
   [ Sandro Tosi ]
   * Add Nis Martensen to Uploaders, very much well deserved!
   * Extend copyright notice to 2020
   * New release
Checksums-Sha1:
 20ad830744d0814d53de5a11ead01ccfe2fd62de 1860 reportbug_7.7.0.dsc
 812cb194deb7373f3dd4aa3fdf289049f5e4b549 202056 reportbug_7.7.0.tar.xz
 3a15bf52ca785e8c9b136d6b9bfafb1a038e7fff 6283 reportbug_7.7.0_source.buildinfo
Checksums-Sha256:
 f5ab2572330fc8bdb336212b6d3f11ab3486d82993736b4b75f95ee2568ceaea 1860 reportbug_7.7.0.dsc
 f3f268f855b42693b7524944bcb1e3fee83d2872f25f8d8bbd0a8b204a8b99bd 202056 reportbug_7.7.0.tar.xz
 897aa6378897f8de00405e3a1b043d5dc886cfec87852496af5da8b5366748c7 6283 reportbug_7.7.0_source.buildinfo
Files:
 73da77951afd412d6249b60cd5261d4b 1860 utils standard reportbug_7.7.0.dsc
 b6a7d0e74aca40f4da6aefbb272f25cf 202056 utils standard reportbug_7.7.0.tar.xz
 0cf7936d7813e72f86b1d966fc542e7e 6283 utils standard reportbug_7.7.0_source.buildinfo

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEufrTGSrz5KUwnZ05h588mTgBqU8FAl8H0R8ACgkQh588mTgB
qU/kjxAAxKSeRQPXM20evcywKz7y+180QrFJVo5s2oyDpqcv+KYf699aHslQC4un
PpiF6ems447ouZgQ1l3IewA8IaaVwZUPdtCKulHZaVNa4KLcwQ/6Ip57rPo9Jzhu
a+d5nhBtZYy39yTnbEQiEutuoVrzJuCLY8VDUsYaxApDLPBR7SgOI56FmUWPgZGA
kZQuct6qwcJeRa/aOsZy7SqrAESxbWGBLapiKPX0NEU4J+7ldzKTmcqfUlLToZnk
1r1qdphrraPGkjZJnO6xzOnh7po64IFOH3zmds7a0JBp6hqrV5loS1HBq3cpzv0T
kdRDhDgxFtu6DZjfRMnP4oB0/X11fsIQWni+iSGuWir3FmWcZk6eKdhOkW7n889A
pSq5QiAH3u0Ihvh1c1lzQG28xMhw5BfSgh4xStfDhe8ghgA+dAgiqf1qzGGALVlv
+Tm0TP2EZRb5gEfR0iLFp53hZOx+x/+9kxuOwFLD3mt2B3MPJjukR9+fpMQ760LM
Pwp3oE94QuWH9A2oH1WiN8LGKpNymMbDInb5c8k8pJncSKiR3FR29BQ+0BK5iTra
wv2vyFU8laBvhnCmyIkUUXyR8ZOt1lAr0uZx47xwby6WeBsGaVLO7FUs12p/WzJh
qgkZH65bvOJB/enhgPTsDWYmY2tlMiU/Usp2BVrcoMdQnRd2Lbk=
=f9WK
-----END PGP SIGNATURE-----

--- End Message ---

Reply to: