[arch-commits] Commit in mailman3/trunk (2 files)
David Runge
dvzrv at gemini.archlinux.org
Sun Feb 20 13:45:35 UTC 2022
Date: Sunday, February 20, 2022 @ 13:45:34
Author: dvzrv
Revision: 1135278
upgpkg: mailman3 3.3.5-5: Rebuild to add fix for mangled moderated messages when cross-posting.
Add patch for mangled messages when modering messages that are cross-posted between lists:
https://bugs.archlinux.org/task/73863
https://gitlab.com/mailman/mailman/-/issues/955
Remove unneeded quotes and curly braces.
Remove commented code.
Added:
mailman3/trunk/mailman3-3.3.5-moderate_cross_posted.patch
Modified:
mailman3/trunk/PKGBUILD
--------------------------------------------+
PKGBUILD | 107 +++++++++++++--------------
mailman3-3.3.5-moderate_cross_posted.patch | 86 +++++++++++++++++++++
2 files changed, 140 insertions(+), 53 deletions(-)
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2022-02-20 13:12:10 UTC (rev 1135277)
+++ PKGBUILD 2022-02-20 13:45:34 UTC (rev 1135278)
@@ -3,22 +3,22 @@
_name=mailman
pkgname=mailman3
pkgver=3.3.5
-pkgrel=4
+pkgrel=5
pkgdesc="The GNU mailing list manager"
-arch=('any')
+arch=(any)
url="https://www.list.org/"
-license=('GPL3')
+license=(GPL3)
# mailman3 does not support python-sqlalchemy >= 1.4 https://gitlab.com/mailman/mailman/-/issues/899
-depends=('gunicorn' 'python-aiosmtpd' 'python-alembic' 'python-atpublic'
-'python-authheaders' 'python-authres' 'python-click' 'python-dateutil'
-'python-dnspython' 'python-falcon' 'python-flufl.bounce' 'python-flufl.i18n'
-'python-flufl-lock' 'python-importlib_resources' 'python-lazr.config'
-'python-passlib' 'python-requests' 'python-sqlalchemy1.3'
-'python-zope-component' 'python-zope-configuration' 'python-zope-event'
-'python-zope-interface')
-makedepends=('git' 'python-setuptools')
-checkdepends=('python-flufl.testing' 'python-nose2' 'python-psycopg2'
-'python-pymysql' 'python-pytest')
+depends=(gunicorn python-aiosmtpd python-alembic python-atpublic
+python-authheaders python-authres python-click python-dateutil
+python-dnspython python-falcon python-flufl.bounce python-flufl.i18n
+python-flufl-lock python-importlib_resources python-lazr.config
+python-passlib python-requests python-sqlalchemy1.3
+python-zope-component python-zope-configuration python-zope-event
+python-zope-interface)
+makedepends=(git python-setuptools)
+checkdepends=(python-flufl.testing python-nose2 python-psycopg2
+python-pymysql python-pytest)
optdepends=('hyperkitty: for local archive and list interaction'
'lynx: for the default HTML to plaintext conversion'
'mailman3-hyperkitty: for archiving mails with an instance of hyperkitty'
@@ -27,25 +27,27 @@
'python-psycopg2: for PostgreSQL support'
'python-pymysql: for MySQL support'
'smtp-server: for using a local mail server')
-conflicts=('mailman')
-replaces=('mailman-core')
-backup=('etc/mailman.cfg')
+conflicts=(mailman)
+replaces=(mailman-core)
+backup=(etc/mailman.cfg)
# the pypi sdist tarball for 3.3.5 misses the chain of trust:
# 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}-3.3.5-python-alembic1.7.patch"
- "${pkgname}.service"
- "${pkgname}-digests.service"
- "${pkgname}-digests.timer"
- "${pkgname}-gatenews.service"
- "${pkgname}-gatenews.timer"
- "${pkgname}-notify.service"
- "${pkgname}-notify.timer"
- "${pkgname}.sysusers"
- "${pkgname}.tmpfiles")
+# 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.service
+ $pkgname-digests.service
+ $pkgname-digests.timer
+ $pkgname-gatenews.service
+ $pkgname-gatenews.timer
+ $pkgname-notify.service
+ $pkgname-notify.timer
+ $pkgname.sysusers
+ $pkgname.tmpfiles
+ $pkgname-3.3.5-python-alembic1.7.patch
+ $pkgname-3.3.5-moderate_cross_posted.patch
+)
sha512sums=('SKIP'
- '3cba6577f70a212eca3590afbb03de0943c3509c7f93c29cd50da538e7a109626790becfa3f83098ee085ccf33c0612a9bedf3292089cfc9bdeabb83bda3f653'
'5773eae02dee11b83eb73ba81bca98d9d0a22fa3175d53172d17bbc0e9821360a4d562b6f42a3bb55c2f0c0b5b50ab84ee82da4cf8b3ff38555a378687dcde3c'
'dccb7bfac560252f6c36ce26149d72d7faa52c1ff283b725deab802b0a94c45692224936b1a099b95dd5d90782dd39ecb15e299303d0264f1c14a6ac8052ee77'
'5d7ccba8cf1262ab052078f2188ded15e43e1201302c7c24ce763efef9789ec99d8ea9a19e8fbd9bc5a38f47a162fe5cf4b0ade284894cb57af66350f23507bc'
@@ -54,9 +56,10 @@
'edc14e009d117c9799bb5d20f0f81dd580acdc184c35cbaf6596056467bc3116d77e5e4a1d9957cf23201cfd57c3a82970fe996e0565c8e527d83fcfc132051a'
'b8538618be8bdd6313d24b844d15c8f25a059c3391cd06db69314b7be19996bfbe913d6c0c9c99d6a19c4f92df32212d31785e92fb32faf5eb792fffe121fcce'
'074cf58a93204d4b7631c4cc8af62d5720560301c6fefef6baa5d3aa33e72720870757fac7803f7b2835f8f02bb776f9d049df5c7528c743b56dda7da2085b07'
- '6f4b51fd5eb34ac974b3312c34eb1437d9435cfd50f0cb89db02b94ce514bceca2c6dc7cb172b79b2d6a23d68e7ea391ec58dbd9899938c0fe88c03c67c521b9')
+ '6f4b51fd5eb34ac974b3312c34eb1437d9435cfd50f0cb89db02b94ce514bceca2c6dc7cb172b79b2d6a23d68e7ea391ec58dbd9899938c0fe88c03c67c521b9'
+ '3cba6577f70a212eca3590afbb03de0943c3509c7f93c29cd50da538e7a109626790becfa3f83098ee085ccf33c0612a9bedf3292089cfc9bdeabb83bda3f653'
+ '55fa201bedc7926dfe1b8d7ca81c72e575f4c83a80ca3585c66f222efbc78c1a70af74be864d3e310aec7f10d2fc740e746c7d995b84aea716aceadd4c266d16')
b2sums=('SKIP'
- '736b7bfb0d41cbf0703212139f326c1aeb04d7d800b0819c4f5fe101d5d105686dfe2fa0d8c2ae2c87d3e23314a8c126a83b5b4d467d7fb1b8073e176daa297b'
'3efaa4559bcf54b322f4a21ee3000f5b2bea72dad2f9f436967f5c4d4ed8046bc08f8e31457991e63252237134f3f7d2f9e7e7862ebc211aeef11d506ded4440'
'fc6d6545dad6cecfd4c1197269a3ec025eb0b830e04151bb2dee778b9e357127667c5a65ea401b10e31e2ec6a8509719de29c30471fa50d09634c934bdf50b9b'
'b0d764dd4f7017c2d5b76e8a52b0c8d75e35b0b0d9025609853d389f8fa0732ea902549ef168f988bf845370cf67aeb7d439af8dec1997127522055b11e64000'
@@ -65,50 +68,48 @@
'ca8aca1a916e99ed313adfd57c33fdd7a3e1b883e22daae8a1e32084331aa32e7ab99b8adfb6ef95b8b696232d044c65de23dba28b2c7e31a9bd02a5f2cb22c2'
'b980470b16171ed0e32a0c1d9de7d5e6802431dd5275089c03f7bc862d5ac886b78af8aa8828faa71a63e847c9caf660c3da2890828ecb2e0bea537c2c4001a5'
'594d6a6712f9e817f4d935225d3a1d87c96e23f1e449caab6bfb00ce2a0421af1401505c6d1d280a03f8c551136639f0dabf27d8b549ca4ea26bdb3febdda660'
- '461dce577696405011ed89f7fc109caaf27f4183b4d315baa8ad03db0f12015ebc447cbe9c0b8c5bcba38b63fcaf45adcfcb3e5bf5afb7eb0bd87a2e1b0301e5')
+ '461dce577696405011ed89f7fc109caaf27f4183b4d315baa8ad03db0f12015ebc447cbe9c0b8c5bcba38b63fcaf45adcfcb3e5bf5afb7eb0bd87a2e1b0301e5'
+ '736b7bfb0d41cbf0703212139f326c1aeb04d7d800b0819c4f5fe101d5d105686dfe2fa0d8c2ae2c87d3e23314a8c126a83b5b4d467d7fb1b8073e176daa297b'
+ '21e9213373b2432e0c7a90bd11b203e7e71dc110001dde40e9a258d6c26de9484a6b45c06444864bb65f727a587c5eec7b052358549025a9fab4e9cb9762a5fb')
validpgpkeys=('541EA0448453394FF77A0ECC9D9B2BA061D0A67C') # Abhilash Raj <maxking at asynchronous.in>
prepare() {
-# mv -v "${_name}-$pkgver" "$pkgname-$pkgver"
-# cd "$pkgname-$pkgver"
- cd "$pkgname"
# use python-alembic >= 1.7 as well, as alembic upstream claims to support sqlalchemy >= 1.3
- patch -Np1 -i ../"${pkgname}-3.3.5-python-alembic1.7.patch"
+ 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
+
+ cd $pkgname
# make sure that mailman runs in a FHS compliant way
- echo -e "[mailman]\nlayout: fhs" >> "../${_name}.cfg"
+ printf "[mailman]\nlayout: fhs\n" >> ../$_name.cfg
# set /var/lib/mailman instead of /var/tmp/mailman as default var_dir:
- sed -e 's|/var/tmp/mailman|/var/lib/mailman|g' \
- -i src/${_name}/config/schema.cfg
+ sed -e 's|/var/tmp/mailman|/var/lib/mailman|g' -i src/$_name/config/schema.cfg
}
build() {
-# cd "$pkgname-$pkgver"
- cd "$pkgname"
+ cd $pkgname
python setup.py build
}
check() {
-# cd "$pkgname-$pkgver"
- cd "$pkgname"
+ cd $pkgname
# thanks to test design it is impossible to run tests:
# https://gitlab.com/mailman/mailman/-/issues/400
}
package() {
-# cd "$pkgname-$pkgver"
- cd "$pkgname"
- python setup.py install --optimize=1 --root="${pkgdir}"
+ cd $pkgname
+ python setup.py install --optimize=1 --root="$pkgdir"
# config
- install -vDm 640 "../${_name}.cfg" -t "${pkgdir}/etc/"
+ install -vDm 640 ../$_name.cfg -t "$pkgdir/etc/"
# state dir
- install -vdm 750 "${pkgdir}/var/lib/mailman"
+ install -vdm 750 "$pkgdir/var/lib/mailman"
# sysusers.d
- install -vDm 644 "../${pkgname}.sysusers" \
- "${pkgdir}/usr/lib/sysusers.d/${pkgname}.conf"
+ install -vDm 644 ../$pkgname.sysusers "$pkgdir/usr/lib/sysusers.d/$pkgname.conf"
# tmpfiles.d
- install -vDm 644 "../${pkgname}.tmpfiles" \
- "${pkgdir}/usr/lib/tmpfiles.d/${pkgname}.conf"
+ install -vDm 644 ../$pkgname.tmpfiles "$pkgdir/usr/lib/tmpfiles.d/$pkgname.conf"
# services and timer
- install -vDm 644 ../*.{service,timer} -t "${pkgdir}/usr/lib/systemd/system"
+ install -vDm 644 ../*.{service,timer} -t "$pkgdir/usr/lib/systemd/system"
}
Added: mailman3-3.3.5-moderate_cross_posted.patch
===================================================================
--- mailman3-3.3.5-moderate_cross_posted.patch (rev 0)
+++ mailman3-3.3.5-moderate_cross_posted.patch 2022-02-20 13:45:34 UTC (rev 1135278)
@@ -0,0 +1,86 @@
+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('test2 at example.com')
++ 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
More information about the arch-commits
mailing list