From 37b608ab675ba8c44c788ae1fe11ebff420fb43f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Wed, 16 Apr 2025 21:21:08 +0200 Subject: [PATCH 1/5] Add dry run support. --- members-base-stats.gp | 22 --------------------- src/Makefile | 4 ++-- src/configuration.scm | 4 ++++ src/export-cards.scm | 8 +++++--- src/export-web-static.scm | 11 ++++++----- src/hackerbase.scm | 2 ++ src/mailman3.scm | 40 ++++++++++++++++++++------------------- 7 files changed, 40 insertions(+), 51 deletions(-) delete mode 100644 members-base-stats.gp diff --git a/members-base-stats.gp b/members-base-stats.gp deleted file mode 100644 index a8bfdeb..0000000 --- a/members-base-stats.gp +++ /dev/null @@ -1,22 +0,0 @@ -set terminal pngcairo size 1000,600 -set title "Members stats" -set output 'members-base-stats-2023-11.png' - -src='members-base-stats-2023-11.data' - -set timefmt "%Y-%m" -set xdata time -set format x "%Y-%m" - -set xlabel "Month" -set ylabel "Members" - -set grid - -set key out right - -plot[1420066800:][0:] \ -src u 1:3 w l lw 2 t 'active', \ -src u 1:4 w l t 'suspended', \ -src u 1:5 w l t 'students', \ -src u 1:6 w l t 'destroyed' diff --git a/src/Makefile b/src/Makefile index 8a9a50b..8f05d4d 100644 --- a/src/Makefile +++ b/src/Makefile @@ -187,8 +187,8 @@ PROGRESS-SOURCES=progress.scm util-time.import.scm progress.o: progress.import.scm progress.import.scm: $(PROGRESS-SOURCES) -EXPORT-CARDS-SOURCES=export-cards.scm util-bst-ldict.import.scm \ - mbase.import.scm brmember.import.scm +EXPORT-CARDS-SOURCES=export-cards.scm util-bst-ldict.import.scm \ + mbase.import.scm brmember.import.scm configuration.import.scm export-cards.o: export-cards.import.scm export-cards.import.scm: $(EXPORT-CARDS-SOURCES) diff --git a/src/configuration.scm b/src/configuration.scm index 3518efc..b49d320 100644 --- a/src/configuration.scm +++ b/src/configuration.scm @@ -43,6 +43,7 @@ *mailman3-sql* *mailman3-sql-path* *notifications-cc* + *dummy-run* load-configuration! ) @@ -121,6 +122,9 @@ (define *notifications-cc* (make-parameter #f)) (define =notifications-cc= "rada@brmlab.cz") + ;; If #t, do not do anything + (define *dummy-run* (make-parameter #f)) + (define (load-single-configuration! fname) (when (file-exists? fname) (let loop ((lines (read-lines (open-input-file fname)))) diff --git a/src/export-cards.scm b/src/export-cards.scm index 41d7721..6940eaa 100644 --- a/src/export-cards.scm +++ b/src/export-cards.scm @@ -38,7 +38,8 @@ (chicken irregex) util-bst-ldict mbase - brmember) + brmember + configuration) ;; Prints single card type records. (define (cards-print/type mb type) @@ -84,7 +85,8 @@ ;; Exports cards and desfires to the files specified. (define (cards-export mb cardsfn desfirefn) - (cards-export/type mb 'card cardsfn) - (cards-export/type mb 'desfire desfirefn)) + (when (not (*dummy-run*)) + (cards-export/type mb 'card cardsfn) + (cards-export/type mb 'desfire desfirefn))) ) diff --git a/src/export-web-static.scm b/src/export-web-static.scm index 6647104..12c2abe 100644 --- a/src/export-web-static.scm +++ b/src/export-web-static.scm @@ -191,10 +191,11 @@ ;; Generates all members in given directory (define (gen-html-members mb dir) - (ensure-directory dir) - (with-mbase-progress% - mb dir mr - (gen-html-member mr dir)) - (clean-members-files mb dir)) + (when (not (*dummy-run*)) + (ensure-directory dir) + (with-mbase-progress% + mb dir mr + (gen-html-member mr dir)) + (clean-members-files mb dir))) ) diff --git a/src/hackerbase.scm b/src/hackerbase.scm index 9f29a94..8b8d60c 100644 --- a/src/hackerbase.scm +++ b/src/hackerbase.scm @@ -116,6 +116,8 @@ (-mailman3-sql-path (path) "Set mailman3 direct SQL access path" (*mailman3-sql* "1") (*mailman3-sql-path* path)) + (-n () "Do not do anything" + (*dummy-run* #t)) "" "Email options:" (-from (email) "Sender email address" diff --git a/src/mailman3.scm b/src/mailman3.scm index 571398d..2693504 100644 --- a/src/mailman3.scm +++ b/src/mailman3.scm @@ -94,27 +94,29 @@ ;; Adds given email (define (add-email-to-mailman3-list lst email) - (print "Add " email " to " lst ".") - (let ((result - (mailman3-send/recv - (list "addmembers" "-" (format "~A@brmlab.cz" lst)) - email))) - (let loop ((lines result)) - (when (not (null? lines)) - (print " | " (car lines)) - (loop (cdr lines)))))) + (print "Add " email " to " lst "." (if (*dummy-run*) " [no-op]" "")) + (when (not (*dummy-run*)) + (let ((result + (mailman3-send/recv + (list "addmembers" "-" (format "~A@brmlab.cz" lst)) + email))) + (let loop ((lines result)) + (when (not (null? lines)) + (print " | " (car lines)) + (loop (cdr lines))))))) ;; Removes given email from given listname (define (remove-email-from-mailman3-list lst email) - (print "Remove " email " from " lst ".") - (let ((result - (get-mailman3-output-lines - "delmembers" - "-l" (format "~A@brmlab.cz" lst) - "-m" email))) - (let loop ((lines result)) - (when (not (null? lines)) - (print " | " (car lines)) - (loop (cdr lines)))))) + (print "Remove " email " from " lst "." (if (*dummy-run*) " [no-op]" "")) + (when (not (*dummy-run*)) + (let ((result + (get-mailman3-output-lines + "delmembers" + "-l" (format "~A@brmlab.cz" lst) + "-m" email))) + (let loop ((lines result)) + (when (not (null? lines)) + (print " | " (car lines)) + (loop (cdr lines))))))) ) From c06bc95b36fc3dcb836586e3ce3b47eea70a8d15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Wed, 16 Apr 2025 21:41:07 +0200 Subject: [PATCH 2/5] Fix handling missing MLs DB. --- src/brmember-parser.scm | 8 ++++++-- src/configuration.scm | 4 ++-- src/mailman3-sql.scm | 16 +++++++++++----- src/members-print.scm | 2 +- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/brmember-parser.scm b/src/brmember-parser.scm index 4c35225..0ab6d28 100644 --- a/src/brmember-parser.scm +++ b/src/brmember-parser.scm @@ -61,7 +61,8 @@ grantstart grantstop joined destroyed feestart feestop - phone)) + phone + councilmlstart councilmlstop)) (define ignored-keys '(mail2)) (define known-keys (append mandatory-keys optional-keys)) @@ -88,6 +89,9 @@ (feestart fee start) (feestop fee stop) + + (councilmlstart councilml start) + (councilmlstop councilml stop) )) (define start-stop-markers (map car start-stop-markers-lookup)) @@ -114,7 +118,7 @@ (info ,(lambda (mr output key value) (case key - ((student suspend member revision chair council grant fee) + ((student suspend member revision chair council grant fee councilml) (let* ((res (period-markers->cal-periods value)) (ok? (car res)) (periods0 (cadr res)) diff --git a/src/configuration.scm b/src/configuration.scm index b49d320..aa63384 100644 --- a/src/configuration.scm +++ b/src/configuration.scm @@ -101,7 +101,7 @@ ;; Which version of mailman to use (define *mailman-version* (make-parameter #f)) - (define =mailman-version= 2) + (define =mailman-version= 3) ;; What is the mailman 3 command (define *mailman3-bin* (make-parameter #f)) @@ -112,7 +112,7 @@ ;; A string is the default, gets converted to boolean at the end of ;; loading configuration (define *mailman3-sql* (make-parameter #f)) - (define =mailman3-sql= "0") + (define =mailman3-sql= "1") ;; The path to SQLite3 DB file (define *mailman3-sql-path* (make-parameter #f)) diff --git a/src/mailman3-sql.scm b/src/mailman3-sql.scm index 741ec23..3e7514e 100644 --- a/src/mailman3-sql.scm +++ b/src/mailman3-sql.scm @@ -37,7 +37,8 @@ (chicken base) (chicken format) sqlite3 - configuration) + configuration + (chicken condition)) ;; Thread-local parameter to re-use SQLite3 DB handle for subsequent queries (define *cached-mailman3-db* (make-parameter #f)) @@ -55,10 +56,15 @@ ;; Returns the list of mailman3 mailinglists by querying te ;; underlying SQLite3 DB directly (define (list-mailman3-sql-lists) - (let-values (((stmt _) - (prepare (mailman3-db) - "SELECT list_name FROM mailinglist"))) - (map-row identity stmt))) + (handle-exceptions + ex + '() + (let ((result + (let-values (((stmt _) + (prepare (mailman3-db) + "SELECT list_name FROM mailinglist"))) + (map-row identity stmt)))) + result))) ;; Returns a list of email addresses subscribed to given mailinglist (define (list-mailman3-sql-list-members lst) diff --git a/src/members-print.scm b/src/members-print.scm index e8b6720..00ee070 100644 --- a/src/members-print.scm +++ b/src/members-print.scm @@ -114,7 +114,7 @@ (caddr c))) (brmember-credit mr)) #:border '(((#:right light) ... none) ...)))) - ((suspend student member council chair revision grant) + ((suspend student member council chair revision grant councilml) (let* ((pdata (cons (list "Since" "Until") (map (lambda (p) From b0b558c8d400cfce8a6993af1fe8d74e34f3caf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Wed, 16 Apr 2025 22:08:52 +0200 Subject: [PATCH 3/5] Add councilml predicate to rada-ml-pred. --- src/brmember.scm | 2 ++ src/mailinglist.scm | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/brmember.scm b/src/brmember.scm index cb065f4..ac1199b 100644 --- a/src/brmember.scm +++ b/src/brmember.scm @@ -65,6 +65,7 @@ brmember-chair? brmember-council? + brmember-councilml? brmember-revision? brmember-grant? @@ -394,6 +395,7 @@ ;; Predicates for all organizational bodies recognized (define brmember-chair? (brmember-body? 'chair)) (define brmember-council? (brmember-body? 'council)) + (define brmember-councilml? (brmember-body? 'councilml)) (define brmember-revision? (brmember-body? 'revision)) (define brmember-grant? (brmember-body? 'grant)) diff --git a/src/mailinglist.scm b/src/mailinglist.scm index 73f3e5b..b88a338 100644 --- a/src/mailinglist.scm +++ b/src/mailinglist.scm @@ -73,6 +73,7 @@ (define (rada-ml-pred? mr) (or (brmember-council? mr) (brmember-chair? mr) - (brmember-revision? mr))) + (brmember-revision? mr) + (brmember-councilml? mr))) ) From 42620b38ff151ec4ed6432ad32da729dc77163e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Wed, 16 Apr 2025 22:09:28 +0200 Subject: [PATCH 4/5] Preliminary release of 1.19. --- src/texts.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/texts.scm b/src/texts.scm index a3383c6..3f9d0b3 100644 --- a/src/texts.scm +++ b/src/texts.scm @@ -39,7 +39,7 @@ (chicken format)) ;; Short banner - (define banner-line "HackerBase 1.19-dev (c) 2023-2025 Brmlab, z.s.") + (define banner-line "HackerBase 1.19 (c) 2023-2025 Brmlab, z.s.") ;; Banner source with numbers for ANSI CSI SGR (define banner-source " From c648fe8c52aa97a6429a5cc8bda09b3da68d2e3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Wed, 11 Jun 2025 17:18:03 +0200 Subject: [PATCH 5/5] Update changelog for 1.19. --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a5bfc54..23adfd9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ ChangeLog ========= +1.19 - released 2025-04-16 +-------------------------- + +* manpage updated +* added -n option for dry-runs +* removed mailman 2.x support +* added "councilml" start/stop support for member files + 1.18 - released 2025-01-06 --------------------------