Date: Wednesday, October 26, 2022 @ 15:46:54 Author: dvzrv Revision: 1336362
upgpkg: mailman3 3.3.6-1: Upgrade to 3.3.6. Remove all included patches. Switch to validating using a pinned commit. Modified: mailman3/trunk/PKGBUILD Deleted: mailman3/trunk/mailman3-3.3.5-booleans_rest_api.patch mailman3/trunk/mailman3-3.3.5-moderate_cross_posted.patch mailman3/trunk/mailman3-3.3.5-python-alembic1.7.patch --------------------------------------------+ PKGBUILD | 29 +-------- mailman3-3.3.5-booleans_rest_api.patch | 58 ------------------ mailman3-3.3.5-moderate_cross_posted.patch | 86 --------------------------- mailman3-3.3.5-python-alembic1.7.patch | 13 ---- 4 files changed, 6 insertions(+), 180 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2022-10-26 15:45:45 UTC (rev 1336361) +++ PKGBUILD 2022-10-26 15:46:54 UTC (rev 1336362) @@ -2,8 +2,9 @@ _name=mailman pkgname=mailman3 -pkgver=3.3.5 -pkgrel=6 +pkgver=3.3.6 +_commit=d98a9106fc6dfb521971c74823cc07d0f922361b # refs/tags/3.3.6 +pkgrel=1 pkgdesc="The GNU mailing list manager" arch=(any) url="https://www.list.org/" @@ -36,7 +37,7 @@ # https://gitlab.com/mailman/mailman/-/issues/948 # source=(https://files.pythonhosted.org/packages/source/${_name::1}/$_name/$_name-$pkgver.tar.gz{,.asc} source=( - $pkgname::git+https://gitlab.com/$_name/$_name#tag=$pkgver?signed + $pkgname::git+https://gitlab.com/$_name/$_name#tag=$_commit?signed $pkgname.service $pkgname-digests.service $pkgname-digests.timer @@ -46,9 +47,6 @@ $pkgname-notify.timer $pkgname.sysusers $pkgname.tmpfiles - $pkgname-3.3.5-python-alembic1.7.patch - $pkgname-3.3.5-moderate_cross_posted.patch - $pkgname-3.3.5-booleans_rest_api.patch ) sha512sums=('SKIP' '5773eae02dee11b83eb73ba81bca98d9d0a22fa3175d53172d17bbc0e9821360a4d562b6f42a3bb55c2f0c0b5b50ab84ee82da4cf8b3ff38555a378687dcde3c' @@ -59,10 +57,7 @@ 'edc14e009d117c9799bb5d20f0f81dd580acdc184c35cbaf6596056467bc3116d77e5e4a1d9957cf23201cfd57c3a82970fe996e0565c8e527d83fcfc132051a' 'b8538618be8bdd6313d24b844d15c8f25a059c3391cd06db69314b7be19996bfbe913d6c0c9c99d6a19c4f92df32212d31785e92fb32faf5eb792fffe121fcce' '074cf58a93204d4b7631c4cc8af62d5720560301c6fefef6baa5d3aa33e72720870757fac7803f7b2835f8f02bb776f9d049df5c7528c743b56dda7da2085b07' - '6f4b51fd5eb34ac974b3312c34eb1437d9435cfd50f0cb89db02b94ce514bceca2c6dc7cb172b79b2d6a23d68e7ea391ec58dbd9899938c0fe88c03c67c521b9' - '3cba6577f70a212eca3590afbb03de0943c3509c7f93c29cd50da538e7a109626790becfa3f83098ee085ccf33c0612a9bedf3292089cfc9bdeabb83bda3f653' - '55fa201bedc7926dfe1b8d7ca81c72e575f4c83a80ca3585c66f222efbc78c1a70af74be864d3e310aec7f10d2fc740e746c7d995b84aea716aceadd4c266d16' - 'd4912abf8b13f205993f68d2f18fcad4e3b11a00da0ed54b4177417f129e074f066527e5984f237a8ae71d6c4277c12163ea53e695d376434a6cfe2c65ee3c2a') + '6f4b51fd5eb34ac974b3312c34eb1437d9435cfd50f0cb89db02b94ce514bceca2c6dc7cb172b79b2d6a23d68e7ea391ec58dbd9899938c0fe88c03c67c521b9') b2sums=('SKIP' '3efaa4559bcf54b322f4a21ee3000f5b2bea72dad2f9f436967f5c4d4ed8046bc08f8e31457991e63252237134f3f7d2f9e7e7862ebc211aeef11d506ded4440' 'fc6d6545dad6cecfd4c1197269a3ec025eb0b830e04151bb2dee778b9e357127667c5a65ea401b10e31e2ec6a8509719de29c30471fa50d09634c934bdf50b9b' @@ -72,22 +67,10 @@ 'ca8aca1a916e99ed313adfd57c33fdd7a3e1b883e22daae8a1e32084331aa32e7ab99b8adfb6ef95b8b696232d044c65de23dba28b2c7e31a9bd02a5f2cb22c2' 'b980470b16171ed0e32a0c1d9de7d5e6802431dd5275089c03f7bc862d5ac886b78af8aa8828faa71a63e847c9caf660c3da2890828ecb2e0bea537c2c4001a5' '594d6a6712f9e817f4d935225d3a1d87c96e23f1e449caab6bfb00ce2a0421af1401505c6d1d280a03f8c551136639f0dabf27d8b549ca4ea26bdb3febdda660' - '461dce577696405011ed89f7fc109caaf27f4183b4d315baa8ad03db0f12015ebc447cbe9c0b8c5bcba38b63fcaf45adcfcb3e5bf5afb7eb0bd87a2e1b0301e5' - '736b7bfb0d41cbf0703212139f326c1aeb04d7d800b0819c4f5fe101d5d105686dfe2fa0d8c2ae2c87d3e23314a8c126a83b5b4d467d7fb1b8073e176daa297b' - '21e9213373b2432e0c7a90bd11b203e7e71dc110001dde40e9a258d6c26de9484a6b45c06444864bb65f727a587c5eec7b052358549025a9fab4e9cb9762a5fb' - '20bae136e041690fe000659ce400499cc7391176cd5852888863fb85669d514b6a6081674eac9d73ee6fe2b89416665aedc9bec5aa4570406842d652dbfcb765') + '461dce577696405011ed89f7fc109caaf27f4183b4d315baa8ad03db0f12015ebc447cbe9c0b8c5bcba38b63fcaf45adcfcb3e5bf5afb7eb0bd87a2e1b0301e5') validpgpkeys=('541EA0448453394FF77A0ECC9D9B2BA061D0A67C') # Abhilash Raj <[email protected]> prepare() { - # use python-alembic >= 1.7 as well, as alembic upstream claims to support sqlalchemy >= 1.3 - patch -d $pkgname -Np1 -i ../$pkgname-3.3.5-python-alembic1.7.patch - - # fix issue with moderating cross-posted messages: https://gitlab.com/mailman/mailman/-/issues/955 - patch -d $pkgname -Np1 -i ../$pkgname-3.3.5-moderate_cross_posted.patch - - # accept booleans in REST API: https://gitlab.com/mailman/mailman/-/issues/970 - patch -d $pkgname -Np1 -i ../$pkgname-3.3.5-booleans_rest_api.patch - cd $pkgname # make sure that mailman runs in a FHS compliant way printf "[mailman]\nlayout: fhs\n" >> ../$_name.cfg Deleted: mailman3-3.3.5-booleans_rest_api.patch =================================================================== --- mailman3-3.3.5-booleans_rest_api.patch 2022-10-26 15:45:45 UTC (rev 1336361) +++ mailman3-3.3.5-booleans_rest_api.patch 2022-10-26 15:46:54 UTC (rev 1336362) @@ -1,58 +0,0 @@ -diff --git a/src/mailman/rest/helpers.py b/src/mailman/rest/helpers.py -index 6f5d02872551d68942bfcc09b89dfec2934dce27..3efd772411769b502a2d32fec19e83d87d44a47c 100644 ---- a/src/mailman/rest/helpers.py -+++ b/src/mailman/rest/helpers.py -@@ -249,6 +249,8 @@ class GetterSetter: - """ - if self.decoder is None: - return value -+ if self.decoder is as_boolean and isinstance(value, bool): -+ return value - return self.decoder(value) - - -diff --git a/src/mailman/rest/tests/test_listconf.py b/src/mailman/rest/tests/test_listconf.py -index e9f1844fb0d5393c66b91b1ff9a01597a7a48e9b..59885bd9ef57f9258cb224281244dd2983788ebe 100644 ---- a/src/mailman/rest/tests/test_listconf.py -+++ b/src/mailman/rest/tests/test_listconf.py -@@ -292,6 +292,17 @@ class TestConfiguration(unittest.TestCase): - 'Invalid Parameter "archive_policy": Accepted Values are:' - ' never, private, public.') - -+ def test_patch_with_json_boolean(self): -+ # Ensure we can patch with JSON boolean value. -+ with transaction(): -+ self._mlist.gateway_to_mail = False -+ response = call_api( -+ 'http://localhost:9001/3.0/lists/ant.example.com/config', -+ method='PATCH', headers={'Content-Type': 'application/json'}, -+ json={'gateway_to_mail': True}) -+ self.assertEqual(response[1].status_code, 204) -+ self.assertTrue(self._mlist.gateway_to_mail) -+ - def test_bad_pipeline_name(self): - with self.assertRaises(HTTPError) as cm: - call_api( -diff --git a/src/mailman/rest/tests/test_validator.py b/src/mailman/rest/tests/test_validator.py -index 32c4a60c8d8920592a83d8296934a404f89eadfe..664770d7261872f428ac4a7991df7015d1414679 100644 ---- a/src/mailman/rest/tests/test_validator.py -+++ b/src/mailman/rest/tests/test_validator.py -@@ -19,6 +19,7 @@ - - import unittest - -+from lazr.config import as_boolean - from mailman.app.lifecycle import create_list - from mailman.core.api import API30, API31 - from mailman.database.transaction import transaction -@@ -170,3 +171,10 @@ class TestGetterSetter(unittest.TestCase): - ['application/octet-stream']) - self.assertEqual(list(self._mlist.pass_extensions), - ['.pdf']) -+ -+ def test_set_boolean_as_bool(self): -+ # Non-pythonic POST data can contain JSON booleans. Ensure we can -+ # handle that. -+ getset = helpers.GetterSetter(as_boolean) -+ self.assertTrue(getset(True)) -+ self.assertFalse(getset(False)) Deleted: mailman3-3.3.5-moderate_cross_posted.patch =================================================================== --- mailman3-3.3.5-moderate_cross_posted.patch 2022-10-26 15:45:45 UTC (rev 1336361) +++ mailman3-3.3.5-moderate_cross_posted.patch 2022-10-26 15:46:54 UTC (rev 1336362) @@ -1,86 +0,0 @@ -diff --git a/src/mailman/app/moderator.py b/src/mailman/app/moderator.py -index 513d0108e..aa044b83d 100644 ---- a/src/mailman/app/moderator.py -+++ b/src/mailman/app/moderator.py -@@ -189,7 +189,7 @@ def handle_message(mlist, id, action, comment=None, forward=None): - # Delete the request and message if it's not being kept. - if not keep: - # There are two pended tokens. The request id has the moderator -- # token, but wee need to delete the user token too. -+ # token, but we need to delete the user token too. - user_token = None - pendings = getUtility(IPendings) - for token, data in pendings.find(pend_type='held message'): -@@ -200,7 +200,14 @@ def handle_message(mlist, id, action, comment=None, forward=None): - if user_token is not None: - pendings.confirm(user_token, expunge=True) - requestdb.delete_request(id) -- message_store.delete_message(message_id) -+ # Only delete the message from the message store if there's no other -+ # request for it. -+ delete = True -+ for token, data in pendings.find(pend_type='data'): -+ if data['_mod_message_id'] == message_id: -+ delete = False -+ if delete: -+ message_store.delete_message(message_id) - # Log the rejection - if rejection: - note = """%s: %s posting: -diff --git a/src/mailman/app/tests/test_moderation.py b/src/mailman/app/tests/test_moderation.py -index a99048a48..1206611f5 100644 ---- a/src/mailman/app/tests/test_moderation.py -+++ b/src/mailman/app/tests/test_moderation.py -@@ -206,9 +206,36 @@ Message-ID: <alpha> - self.assertIsNone(message) - self.assertIsNone(getUtility(IPendings).confirm(hash)) - -+ def test_handled_cross_posted_message_not_removed(self): -+ # A cross posted message is not removed when handled on the first list. -+ mlist2 = create_list('[email protected]') -+ request_db2 = IListRequests(mlist2) -+ request_id = hold_message(self._mlist, self._msg) -+ request_id2 = hold_message(mlist2, self._msg) -+ # Get the hashes for these pending requests. -+ hash0 = list(self._request_db.held_requests)[0].data_hash -+ hash1 = list(request_db2.held_requests)[0].data_hash -+ # Handle the first list's message. -+ handle_message(self._mlist, request_id, Action.discard) -+ # There's now only the request for list2. -+ self.assertEqual(self._request_db.count, 0) -+ self.assertEqual(request_db2.count, 1) -+ message = getUtility(IMessageStore).get_message_by_id('<alpha>') -+ self.assertIsNotNone(message) -+ self.assertIsNone(getUtility(IPendings).confirm(hash0)) -+ self.assertIsNotNone(getUtility(IPendings).confirm(hash1, -+ expunge=False)) -+ # Handle the second list's message. -+ handle_message(mlist2, request_id2, Action.discard) -+ # Now the request and message are gone. -+ self.assertEqual(request_db2.count, 0) -+ message = getUtility(IMessageStore).get_message_by_id('<alpha>') -+ self.assertIsNone(message) -+ self.assertIsNone(getUtility(IPendings).confirm(hash1)) -+ - def test_all_pendings_removed(self): - # A held message pends two tokens, One for the moderator and one for -- # the user. Ensure both are removed when meddage is handled. -+ # the user. Ensure both are removed when message is handled. - request_id = hold_message(self._mlist, self._msg) - # The hold chain does more. - pendings = getUtility(IPendings) -diff --git a/src/mailman/app/moderator.py b/src/mailman/app/moderator.py -index aa044b83d..898b14160 100644 ---- a/src/mailman/app/moderator.py -+++ b/src/mailman/app/moderator.py -@@ -204,8 +204,9 @@ def handle_message(mlist, id, action, comment=None, forward=None): - # request for it. - delete = True - for token, data in pendings.find(pend_type='data'): -- if data['_mod_message_id'] == message_id: -+ if data and data.get('_mod_message_id') == message_id: - delete = False -+ break - if delete: - message_store.delete_message(message_id) - # Log the rejection Deleted: mailman3-3.3.5-python-alembic1.7.patch =================================================================== --- mailman3-3.3.5-python-alembic1.7.patch 2022-10-26 15:45:45 UTC (rev 1336361) +++ mailman3-3.3.5-python-alembic1.7.patch 2022-10-26 15:46:54 UTC (rev 1336362) @@ -1,13 +0,0 @@ -diff --git i/setup.py w/setup.py -index 60c165cbe..c7042c0b1 100644 ---- i/setup.py -+++ w/setup.py -@@ -111,7 +111,7 @@ case second 'm'. Any other spelling is incorrect.""", - }, - install_requires = [ - 'aiosmtpd>=1.4.1', -- 'alembic>=1.6.2,<1.7', -+ 'alembic>=1.6.2', - 'atpublic', - 'authheaders>=0.9.2', - 'authres>=1.0.1',
