[Pkg-mailman-hackers] Bug#1049957: mailman3: diff for NMU version 3.3.8-3.1

Michael R. Crusoe crusoe at debian.org
Sat Aug 26 11:04:07 BST 2023


Control: tags 1049957 + pending


Dear maintainer,

I've prepared an NMU for mailman3 (versioned as 3.3.8-3.1) and
uploaded it to DELAYED/7. Please feel free to tell me if I
should delay it longer.

I uploaded a similar NMU to experimental with the exact same changes and
all the tests passed: https://qa.debian.org/excuses.php?package=mailman3&experimental=1

Regards.

diff -Nru mailman3-3.3.8/debian/changelog mailman3-3.3.8/debian/changelog
--- mailman3-3.3.8/debian/changelog	2023-07-10 19:41:47.000000000 +0200
+++ mailman3-3.3.8/debian/changelog	2023-08-26 12:01:31.000000000 +0200
@@ -1,3 +1,13 @@
+mailman3 (3.3.8-3.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * d/patches/1130.patch: cherry-pick upstream fix to drop
+    dependency on importlib-resources
+    d/control: remove python3-importlib-resources
+    (Closes: #1049957)
+
+ -- Michael R. Crusoe <crusoe at debian.org>  Sat, 26 Aug 2023 12:01:31 +0200
+
 mailman3 (3.3.8-3) unstable; urgency=medium
 
   * s/postgres/postgresql/ in config files
diff -Nru mailman3-3.3.8/debian/control mailman3-3.3.8/debian/control
--- mailman3-3.3.8/debian/control	2023-07-10 19:40:45.000000000 +0200
+++ mailman3-3.3.8/debian/control	2023-08-21 14:32:38.000000000 +0200
@@ -22,7 +22,6 @@
                python3-flufl.lock,
                python3-gunicorn,
                python3-httplib2,
-               python3-importlib-resources,
                python3-lazr.config,
                python3-passlib,
                python3-public,
diff -Nru mailman3-3.3.8/debian/patches/1130.patch mailman3-3.3.8/debian/patches/1130.patch
--- mailman3-3.3.8/debian/patches/1130.patch	1970-01-01 01:00:00.000000000 +0100
+++ mailman3-3.3.8/debian/patches/1130.patch	2023-08-21 14:36:23.000000000 +0200
@@ -0,0 +1,444 @@
+From 1346ffdbd2ad36e3f37732f3217be3b34dc7bc48 Mon Sep 17 00:00:00 2001
+From: Abhilash Raj <raj.abhilash1 at gmail.com>
+Date: Sun, 9 Jul 2023 16:03:17 +0530
+Subject: fix: Remove dependency on importlib_resources
+Origin: upstream, https://gitlab.com/mailman/mailman/-/merge_requests/1130
+
+Since importlib.resources is part of stdlib since 3.9, remove dependency on the
+PyPI package importlib_resources
+
+---
+ .gitlab-ci.yml                                 | 10 ----------
+ _ext/configplugin.py                           |  2 +-
+ setup.py                                       |  1 -
+ src/mailman/archiving/tests/test_mhonarc.py    |  2 +-
+ src/mailman/bin/tests/test_mailman.py          |  2 +-
+ src/mailman/bin/tests/test_master.py           |  2 +-
+ src/mailman/chains/tests/test_hold.py          |  2 +-
+ src/mailman/commands/docs/import.rst           |  2 +-
+ src/mailman/commands/tests/test_cli_control.py |  2 +-
+ src/mailman/commands/tests/test_cli_import.py  |  2 +-
+ src/mailman/config/config.py                   |  2 +-
+ src/mailman/config/tests/test_configuration.py |  2 +-
+ src/mailman/core/initialize.py                 |  2 +-
+ src/mailman/email/tests/test_message.py        |  2 +-
+ src/mailman/handlers/tests/test_decorate.py    |  2 +-
+ src/mailman/handlers/tests/test_mimedel.py     |  2 +-
+ src/mailman/plugins/docs/intro.rst             |  2 +-
+ src/mailman/plugins/testing/layer.py           |  2 +-
+ src/mailman/rules/dmarc.py                     |  2 +-
+ src/mailman/rules/tests/test_dmarc.py          |  2 +-
+ src/mailman/runners/tests/test_digest.py       |  2 +-
+ src/mailman/testing/i18n.py                    |  2 +-
+ src/mailman/testing/layers.py                  |  2 +-
+ src/mailman/utilities/filesystem.py            | 10 +++++-----
+ src/mailman/utilities/modules.py               |  2 +-
+ src/mailman/utilities/tests/test_import.py     |  2 +-
+ src/mailman/utilities/tests/test_scrubber.py   |  2 +-
+ 27 files changed, 29 insertions(+), 40 deletions(-)
+
+--- mailman3.orig/_ext/configplugin.py
++++ mailman3/_ext/configplugin.py
+@@ -23,7 +23,7 @@
+ from docutils import nodes
+ from docutils.parsers.rst import Directive, directives
+ from docutils.statemachine import ViewList
+-from importlib_resources import files
++from importlib.resources import files
+ from sphinx.util.nodes import nested_parse_with_titles
+ 
+ 
+--- mailman3.orig/setup.py
++++ mailman3/setup.py
+@@ -121,7 +121,6 @@
+         'flufl.bounce>=4.0',
+         'flufl.i18n>=3.2',
+         'flufl.lock>=5.1',
+-        'importlib_resources>=1.1.0',
+         'gunicorn',
+         'lazr.config',
+         'python-dateutil>=2.0',
+--- mailman3.orig/src/mailman/archiving/tests/test_mhonarc.py
++++ mailman3/src/mailman/archiving/tests/test_mhonarc.py
+@@ -23,7 +23,7 @@
+ import tempfile
+ import unittest
+ 
+-from importlib_resources import path
++from importlib.resources import path
+ from mailman.app.lifecycle import create_list
+ from mailman.archiving.mhonarc import MHonArc
+ from mailman.database.transaction import transaction
+--- mailman3.orig/src/mailman/bin/tests/test_mailman.py
++++ mailman3/src/mailman/bin/tests/test_mailman.py
+@@ -21,7 +21,7 @@
+ 
+ from click.testing import CliRunner
+ from datetime import timedelta
+-from importlib_resources import path
++from importlib.resources import path
+ from mailman.app.lifecycle import create_list
+ from mailman.bin.mailman import main
+ from mailman.config import config
+--- mailman3.orig/src/mailman/bin/tests/test_master.py
++++ mailman3/src/mailman/bin/tests/test_master.py
+@@ -25,7 +25,7 @@
+ from contextlib import ExitStack, suppress
+ from datetime import timedelta
+ from flufl.lock import Lock, TimeOutError
+-from importlib_resources import path
++from importlib.resources import path
+ from io import StringIO
+ from mailman.bin import master
+ from mailman.config import config
+--- mailman3.orig/src/mailman/chains/tests/test_hold.py
++++ mailman3/src/mailman/chains/tests/test_hold.py
+@@ -20,7 +20,7 @@
+ import unittest
+ 
+ from email import message_from_bytes as mfb
+-from importlib_resources import read_binary
++from importlib.resources import read_binary
+ from mailman.app.lifecycle import create_list
+ from mailman.chains.builtin import BuiltInChain
+ from mailman.chains.hold import autorespond_to_sender, HoldChain
+--- mailman3.orig/src/mailman/commands/docs/import.rst
++++ mailman3/src/mailman/commands/docs/import.rst
+@@ -26,7 +26,7 @@
+ 
+ Too bad the list doesn't exist.
+ 
+-    >>> from importlib_resources import path
++    >>> from importlib.resources import path
+     >>> with path('mailman.testing', 'config.pck') as pickle_path:
+     ...     pickle_file = str(pickle_path)
+     ...     command('mailman import21 import at example.com ' + pickle_file)
+--- mailman3.orig/src/mailman/commands/tests/test_cli_control.py
++++ mailman3/src/mailman/commands/tests/test_cli_control.py
+@@ -29,7 +29,7 @@
+ from contextlib import ExitStack, suppress
+ from datetime import datetime, timedelta
+ from flufl.lock import SEP
+-from importlib_resources import path
++from importlib.resources import path
+ from mailman.bin.master import WatcherState
+ from mailman.commands.cli_control import reopen, restart, start
+ from mailman.config import config
+--- mailman3.orig/src/mailman/commands/tests/test_cli_import.py
++++ mailman3/src/mailman/commands/tests/test_cli_import.py
+@@ -21,7 +21,7 @@
+ 
+ from click.testing import CliRunner
+ from contextlib import ExitStack
+-from importlib_resources import path
++from importlib.resources import path
+ from mailman.app.lifecycle import create_list
+ from mailman.commands.cli_import import import21
+ from mailman.testing.layers import ConfigLayer
+--- mailman3.orig/src/mailman/config/config.py
++++ mailman3/src/mailman/config/config.py
+@@ -24,7 +24,7 @@
+ from configparser import ConfigParser
+ from contextlib import ExitStack
+ from flufl.lock import Lock
+-from importlib_resources import path, read_text
++from importlib.resources import path, read_text
+ from lazr.config import as_boolean, ConfigSchema
+ from mailman import version
+ from mailman.interfaces.configuration import (
+--- mailman3.orig/src/mailman/config/tests/test_configuration.py
++++ mailman3/src/mailman/config/tests/test_configuration.py
+@@ -22,7 +22,7 @@
+ import unittest
+ 
+ from contextlib import ExitStack
+-from importlib_resources import path
++from importlib.resources import path
+ from mailman.config.config import (
+     Configuration,
+     external_configuration,
+--- mailman3.orig/src/mailman/core/initialize.py
++++ mailman3/src/mailman/core/initialize.py
+@@ -30,7 +30,7 @@
+ import mailman.core.logging
+ import mailman.config.config
+ 
+-from importlib_resources import read_text
++from importlib.resources import read_text
+ from mailman.interfaces.database import IDatabaseFactory
+ from public import public
+ from zope.component import getUtility
+--- mailman3.orig/src/mailman/email/tests/test_message.py
++++ mailman3/src/mailman/email/tests/test_message.py
+@@ -24,7 +24,7 @@
+ from email.header import Header
+ from email.parser import FeedParser
+ from email.utils import _has_surrogates
+-from importlib_resources import path
++from importlib.resources import path
+ from mailman.app.lifecycle import create_list
+ from mailman.email.message import Message, UserNotification
+ from mailman.testing.helpers import (
+--- mailman3.orig/src/mailman/handlers/tests/test_decorate.py
++++ mailman3/src/mailman/handlers/tests/test_decorate.py
+@@ -22,7 +22,7 @@
+ import email
+ import unittest
+ 
+-from importlib_resources import open_binary as resource_open
++from importlib.resources import open_binary as resource_open
+ from mailman.app.lifecycle import create_list
+ from mailman.config import config
+ from mailman.email.message import Message
+--- mailman3.orig/src/mailman/handlers/tests/test_mimedel.py
++++ mailman3/src/mailman/handlers/tests/test_mimedel.py
+@@ -25,7 +25,7 @@
+ import unittest
+ 
+ from contextlib import contextmanager, ExitStack
+-from importlib_resources import open_binary as resource_open, read_text
++from importlib.resources import open_binary as resource_open, read_text
+ from io import StringIO
+ from mailman.app.lifecycle import create_list
+ from mailman.config import config
+--- mailman3.orig/src/mailman/plugins/docs/intro.rst
++++ mailman3/src/mailman/plugins/docs/intro.rst
+@@ -20,7 +20,7 @@
+ 
+ We have such a configuration file handy.
+ 
+-    >>> from importlib_resources import path
++    >>> from importlib.resources import path
+     >>> config_file = str(cleanups.enter_context(
+     ...     path('mailman.plugins.testing', 'hooks.cfg')))
+ 
+--- mailman3.orig/src/mailman/plugins/testing/layer.py
++++ mailman3/src/mailman/plugins/testing/layer.py
+@@ -20,7 +20,7 @@
+ import os
+ 
+ from contextlib import ExitStack
+-from importlib_resources import path
++from importlib.resources import path
+ from mailman.testing.helpers import (
+     hackenv,
+     TestableMaster,
+--- mailman3.orig/src/mailman/rules/dmarc.py
++++ mailman3/src/mailman/rules/dmarc.py
+@@ -24,7 +24,7 @@
+ 
+ from dns.exception import DNSException
+ from email.utils import parseaddr
+-from importlib_resources import read_binary
++from importlib.resources import read_binary
+ from lazr.config import as_timedelta
+ from mailman.config import config
+ from mailman.core.i18n import _
+--- mailman3.orig/src/mailman/rules/tests/test_dmarc.py
++++ mailman3/src/mailman/rules/tests/test_dmarc.py
+@@ -27,7 +27,7 @@
+ from dns.resolver import NoAnswer, NoNameservers, NXDOMAIN
+ from email import message_from_bytes
+ from http.server import BaseHTTPRequestHandler, HTTPServer
+-from importlib_resources import path
++from importlib.resources import path
+ from lazr.config import as_timedelta
+ from mailman.app.lifecycle import create_list
+ from mailman.config import config
+--- mailman3.orig/src/mailman/runners/tests/test_digest.py
++++ mailman3/src/mailman/runners/tests/test_digest.py
+@@ -24,7 +24,7 @@
+ from email import message_from_binary_file, message_from_bytes
+ from email.iterators import _structure as structure
+ from email.mime.text import MIMEText
+-from importlib_resources import open_binary
++from importlib.resources import open_binary
+ from io import StringIO
+ from mailman.app.lifecycle import create_list
+ from mailman.config import config
+--- mailman3.orig/src/mailman/testing/i18n.py
++++ mailman3/src/mailman/testing/i18n.py
+@@ -19,7 +19,7 @@
+ 
+ from flufl.i18n import registry
+ from gettext import GNUTranslations, NullTranslations
+-from importlib_resources import open_binary
++from importlib.resources import open_binary
+ from public import public
+ 
+ 
+--- mailman3.orig/src/mailman/testing/layers.py
++++ mailman3/src/mailman/testing/layers.py
+@@ -32,7 +32,7 @@
+ import datetime
+ import tempfile
+ 
+-from importlib_resources import files, read_text
++from importlib.resources import files, read_text
+ from lazr.config import as_boolean
+ from mailman.config import config
+ from mailman.core import initialize
+--- mailman3.orig/src/mailman/utilities/filesystem.py
++++ mailman3/src/mailman/utilities/filesystem.py
+@@ -18,7 +18,6 @@
+ """Filesystem utilities."""
+ 
+ import os
+-import sys
+ 
+ from contextlib import suppress
+ from public import public
+@@ -110,38 +109,3 @@
+                 "The path %s exists but is not a directory.",
+                 directory)
+         directory, rhs = os.path.split(directory)
+-
+-
+- at public
+-def path(package, module, *args, **kw):
+-    """Wrap around importlib.resources.path.
+-
+-    importlib_resources.path (PyPI package we use for compatibility in Python <
+-    3.7) has now diverged in behavior from importlib.resources.path (in Python
+-    >= 3.7), especially in terms of supporting directories. Even though we can
+-    just jump to the new version of the library, many distributions packaging
+-    Mailman do not package importlib_resources at all and instead patch the
+-    source code to simply replace importlib_resources with importlib.resources.
+-
+-    This utility method is meant to keep that patching ability without any
+-    complicated patches to make Mailman work with standard library
+-    importlib.resources. This is only supposed to be used where the divergent
+-    behavior causes problems for us.
+-    """
+-    # Note to packaging teams: This function will handle both standard library
+-    # and 3rd party importlib_resources package. Please do not patch it.
+-    if module:
+-        module_package = '{}.{}'.format(package, module)
+-    else:
+-        module_package = package
+-
+-    try:
+-        if sys.version_info < (3, 9):
+-            from importlib.resources import path
+-            return path(package, module, *args, **kw)
+-        else:
+-            from importlib.resources import files  # pragma: nocover
+-            return files(module_package, *args, **kw)         # pragma: nocover
+-    except ImportError:                                       # pragma: nocover
+-        from importlib_resources import files  # pragma: nocover
+-        return files(module_package, *args, **kw)             # pragma: nocover
+--- mailman3.orig/src/mailman/utilities/modules.py
++++ mailman3/src/mailman/utilities/modules.py
+@@ -22,7 +22,7 @@
+ 
+ from contextlib import contextmanager
+ from importlib import import_module
+-from importlib_resources import contents, is_resource, path
++from importlib.resources import contents, is_resource, path
+ from public import public
+ 
+ 
+--- mailman3.orig/src/mailman/utilities/tests/test_import.py
++++ mailman3/src/mailman/utilities/tests/test_import.py
+@@ -23,7 +23,7 @@
+ from contextlib import ExitStack, redirect_stderr
+ from datetime import datetime, timedelta
+ from enum import Enum
+-from importlib_resources import open_binary
++from importlib.resources import open_binary
+ from io import StringIO
+ from mailman.app.lifecycle import create_list
+ from mailman.config import config
+--- mailman3.orig/src/mailman/utilities/tests/test_scrubber.py
++++ mailman3/src/mailman/utilities/tests/test_scrubber.py
+@@ -19,7 +19,7 @@
+ 
+ import unittest
+ 
+-from importlib_resources import open_text
++from importlib.resources import open_text
+ from mailman.testing.helpers import specialized_message_from_string as mfs
+ from mailman.utilities import scrubber
+ 
+--- mailman3.orig/src/mailman/utilities/i18n.py
++++ mailman3/src/mailman/utilities/i18n.py
+@@ -21,11 +21,11 @@
+ import sys
+ 
+ from contextlib import ExitStack
++from importlib.resources import files
+ from itertools import product
+ from mailman.config import config
+ from mailman.core.constants import system_preferences
+ from mailman.interfaces.errors import MailmanError
+-from mailman.utilities.filesystem import path
+ from public import public
+ 
+ 
+@@ -114,7 +114,8 @@
+         languages.append(language)
+     languages.reverse()
+     # The non-language qualified $template_dir paths in search order.
+-    templates_dir = str(resources.enter_context(path('mailman', 'templates')))
++    templates_dir = str(resources.enter_context(
++        files('mailman').joinpath('templates')))
+     paths = [templates_dir, os.path.join(config.TEMPLATE_DIR, 'site')]
+     if mlist is not None:
+         # Don't forget these are in REVERSE search order!
+--- mailman3.orig/src/mailman/utilities/tests/test_modules.py
++++ mailman3/src/mailman/utilities/tests/test_modules.py
+@@ -22,11 +22,11 @@
+ import unittest
+ 
+ from contextlib import contextmanager, ExitStack
++from importlib.resources import files
+ from mailman.interfaces.rules import IRule
+ from mailman.interfaces.styles import IStyle
+ from mailman.testing.helpers import configuration
+ from mailman.testing.layers import ConfigLayer
+-from mailman.utilities.filesystem import path
+ from mailman.utilities.modules import (
+     find_components,
+     find_pluggable_components,
+@@ -165,7 +165,7 @@
+     def test_find_pluggable_components_by_plugin_name(self):
+         with ExitStack() as resources:
+             testing_path = resources.enter_context(
+-                path('mailman.plugins.testing',  ''))
++                files('mailman.plugins.testing'))
+             resources.enter_context(hack_syspath(0, str(testing_path)))
+             resources.enter_context(configuration('plugin.example', **{
+                 'class': 'example.hooks.ExamplePlugin',
+@@ -177,7 +177,7 @@
+     def test_find_pluggable_components_by_component_package(self):
+         with ExitStack() as resources:
+             testing_path = resources.enter_context(
+-                path('mailman.plugins.testing', ''))
++                files('mailman.plugins.testing'))
+             resources.enter_context(hack_syspath(0, str(testing_path)))
+             resources.enter_context(configuration('plugin.example', **{
+                 'class': 'example.hooks.ExamplePlugin',
+--- mailman3.orig/src/mailman/utilities/tests/test_templates.py
++++ mailman3/src/mailman/utilities/tests/test_templates.py
+@@ -23,11 +23,11 @@
+ import unittest
+ 
+ from contextlib import ExitStack
++from importlib.resources import files as resource_path
+ from mailman.app.lifecycle import create_list
+ from mailman.config import config
+ from mailman.interfaces.languages import ILanguageManager
+ from mailman.testing.layers import ConfigLayer
+-from mailman.utilities.filesystem import path as resource_path
+ from mailman.utilities.i18n import find, search, TemplateNotFoundError
+ from zope.component import getUtility
+ 
+@@ -64,7 +64,7 @@
+         # /m/ as the root.
+         with ExitStack() as resources:
+             in_tree = str(resources.enter_context(
+-                resource_path('mailman', 'templates')).parent)
++                resource_path('mailman').joinpath('templates')).parent)
+             raw_search_order = search(
+                 resources, template_file, mailing_list, language)
+         for path in raw_search_order:
diff -Nru mailman3-3.3.8/debian/patches/series mailman3-3.3.8/debian/patches/series
--- mailman3-3.3.8/debian/patches/series	2023-01-29 11:47:41.000000000 +0100
+++ mailman3-3.3.8/debian/patches/series	2023-08-21 14:33:36.000000000 +0200
@@ -1,2 +1,3 @@
+1130.patch
 0001_README_remove_embedded_images.patch
 0002-remove_sphinxcontrib.zopeext_dependency.patch



More information about the Pkg-mailman-hackers mailing list