[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