Mark Sapiro pushed to branch master at GNU Mailman / Mailman Core
Commits:
c12e8d49 by Mark Sapiro at 2021-11-06T13:10:18-07:00
Don't remove held message from store if there are other requests for it.
- - - - -
84040cab by Mark Sapiro at 2021-11-06T20:37:34+00:00
Merge branch 'held' into 'master'
Don't remove held message from store if there are other requests for it.
See merge request mailman/mailman!932
- - - - -
3 changed files:
- src/mailman/app/moderator.py
- src/mailman/app/tests/test_moderation.py
- src/mailman/docs/NEWS.rst
Changes:
=====================================
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:
=====================================
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)
=====================================
src/mailman/docs/NEWS.rst
=====================================
@@ -20,6 +20,8 @@ Bugs fixed
* The ``mailman members`` command reports incompatible options that would
otherwise throw exceptions.
* Require authheaders >=0.14.0 and adjust tests accordingly. (Closes #954)
+* Handling a held message will not remove it from the message store if there
+ are other requests for it. (Closes #955)
.. _news-3.3.5:
View it on GitLab:
https://gitlab.com/mailman/mailman/-/compare/df4eb855e2bebc096ad235fc4ed3b2035878474d...84040cabdc69e8362da402f86b174ec4a82d9014
--
View it on GitLab:
https://gitlab.com/mailman/mailman/-/compare/df4eb855e2bebc096ad235fc4ed3b2035878474d...84040cabdc69e8362da402f86b174ec4a82d9014
You're receiving this email because of your account on gitlab.com.
_______________________________________________
Mailman-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/mailman-checkins.python.org/
Member address: [email protected]