[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