Improve mailman analysis.
This commit is contained in:
parent
6cf1cd66d1
commit
902ca13189
2 changed files with 46 additions and 13 deletions
|
@ -140,6 +140,8 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
(-unpaired () "Show latest unpaired bank transactions"
|
(-unpaired () "Show latest unpaired bank transactions"
|
||||||
(-needs-bank- #t)
|
(-needs-bank- #t)
|
||||||
(-action- 'unpaired))
|
(-action- 'unpaired))
|
||||||
|
(-mlcheck () "Check internal ML"
|
||||||
|
(-action- 'mlcheck))
|
||||||
(-mlsync () "Synchronize internal ML"
|
(-mlsync () "Synchronize internal ML"
|
||||||
(-action- 'mlsync))
|
(-action- 'mlsync))
|
||||||
)
|
)
|
||||||
|
@ -282,6 +284,19 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
(if (-normal-month-)
|
(if (-normal-month-)
|
||||||
(mailman-sync-members internal-ml (members-base-active-emails MB))
|
(mailman-sync-members internal-ml (members-base-active-emails MB))
|
||||||
(print "Mailman synchronization disabled with manually specified current month.")))
|
(print "Mailman synchronization disabled with manually specified current month.")))
|
||||||
|
((mlcheck)
|
||||||
|
(define-values (missing surplus)
|
||||||
|
(mailman-compare-members internal-ml
|
||||||
|
(membars-base-active-emails MB)))
|
||||||
|
(if (and (null? missing)
|
||||||
|
(null? surplus))
|
||||||
|
(print "Internal mailing list membership in sync.")
|
||||||
|
(let ()
|
||||||
|
(print "Internal mailing list:")
|
||||||
|
(when (not (null? missing))
|
||||||
|
(print " Missing: " missing))
|
||||||
|
(when (not (null? surplus))
|
||||||
|
(print " Outsiders: " surplus)))))
|
||||||
(else
|
(else
|
||||||
(print "Nothing to do."))
|
(print "Nothing to do."))
|
||||||
|
|
||||||
|
|
|
@ -29,13 +29,27 @@
|
||||||
mailman
|
mailman
|
||||||
(
|
(
|
||||||
*mailman-bin*
|
*mailman-bin*
|
||||||
|
|
||||||
list-mailman-lists
|
list-mailman-lists
|
||||||
list-mailman-list-members
|
list-mailman-list-members
|
||||||
load-mailman-list
|
load-mailman-list
|
||||||
load-mailman-lists
|
load-mailman-lists
|
||||||
|
|
||||||
find-mailman-list
|
find-mailman-list
|
||||||
|
|
||||||
mailman-list-name
|
mailman-list-name
|
||||||
mailman-list-members
|
mailman-list-members
|
||||||
|
|
||||||
|
email-in-mailman-list?
|
||||||
|
|
||||||
|
add-email-to-mailman-list
|
||||||
|
remove-email-from-mailman-list
|
||||||
|
|
||||||
|
mailman-ensure-member
|
||||||
|
mailman-ensure-not-member
|
||||||
|
|
||||||
|
mailman-compare-members
|
||||||
|
|
||||||
mailman-sync-members
|
mailman-sync-members
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -153,20 +167,24 @@
|
||||||
(when (email-in-mailman-list? ml email)
|
(when (email-in-mailman-list? ml email)
|
||||||
(remove-email-from-mailman-list (mailman-list-name ml) email)))
|
(remove-email-from-mailman-list (mailman-list-name ml) email)))
|
||||||
|
|
||||||
|
;; Returns two values - missing members and surplus list members
|
||||||
|
(define (mailman-compare-members ml emails)
|
||||||
|
(let* ((mlemails (list->lset (mailman-list-members ml)))
|
||||||
|
(emails (list->lset emails))
|
||||||
|
(surplus (lset-subtract mlemails emails))
|
||||||
|
(missing (lset-subtract emails mlemails)))
|
||||||
|
(values missing surplus)))
|
||||||
|
|
||||||
;; Ensures given ML subscribers are exactly what is in emails list
|
;; Ensures given ML subscribers are exactly what is in emails list
|
||||||
(define (mailman-sync-members ml emails)
|
(define (mailman-sync-members ml emails)
|
||||||
;; Ensure all emails in ml
|
(define-values (missing surplus)
|
||||||
(let loop ((emails emails))
|
(mailman-compare-members ml emails))
|
||||||
(when (not (null? emails))
|
(define listname (mailman-list-name ml))
|
||||||
(let ((email (car emails)))
|
(let loop ((emails missing))
|
||||||
(mailman-ensure-member ml email)
|
(add-emails-to-mailman-list listname (car emails))
|
||||||
(loop (cdr emails)))))
|
(loop (cdr emails)))
|
||||||
;; Go through all emails in ml and remove all not in emails list
|
(let loop ((emails surplus))
|
||||||
(let loop ((ml-emails (mailman-list-members ml)))
|
(remove-email-from-mailman-list listname (car emails))
|
||||||
(when (not (null? ml-emails))
|
(loop (cdr loop))))
|
||||||
(let ((email (car ml-emails)))
|
|
||||||
(when (not (member email emails))
|
|
||||||
(mailman-ensure-not-member ml email))
|
|
||||||
(loop (cdr ml-emails))))))
|
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue