]> git.elephly.net Git - software/mumi.git/commitdiff
Support live hacking.
authorArun Isaac <arunisaac@systemreboot.net>
Wed, 5 Sep 2018 10:51:23 +0000 (16:21 +0530)
committerRicardo Wurmus <rekado@elephly.net>
Fri, 9 Nov 2018 18:50:27 +0000 (19:50 +0100)
* scripts/mumi.in: Spawn REPL server to support live hacking, if
--listen-repl is provided on the command line.

scripts/mumi.in

index f5ade2203cb50b4a4fb90d929479c416e77dd269..1b1c5e50abf4301a8ad47ae5d699e22aaac8104b 100644 (file)
@@ -4,6 +4,7 @@
 !#
 ;;; mumi -- Mediocre, uh, mail interface
 ;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of mumi.
 ;;;
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with mumi.  If not, see <http://www.gnu.org/licenses/>.
 
-(use-modules (mumi web server))
+(use-modules (srfi srfi-1)
+             (srfi srfi-37)
+             (system repl server)
+             (mumi web server))
+
+(define %default-repl-server-port
+  ;; Default port to run REPL server on, if --listen-repl is provided
+  ;; but no port is mentioned
+  37146)
+
+(define %options
+  ;; Specifications of the command-line options
+  (list (option '("listen-repl") #f #t
+                (lambda (opt name arg result)
+                  (let ((port (cond (arg => string->number)
+                                    (else %default-repl-server-port))))
+                    (if port
+                        (alist-cons 'listen-repl port
+                                    (alist-delete 'listen-repl result))
+                        (error "invalid REPL server port" arg)))))))
+
+(define %default-options
+  ;; Alist of default option values
+  `((listen-repl . #f)))
+
+(define (parse-options args)
+  (args-fold
+   args %options
+   (lambda (opt name arg result)
+     (error "unrecognized option" name))
+   (lambda (arg result)
+     (error "extraneous argument" arg))
+   %default-options))
+
+(let ((opts (parse-options (cdr (program-arguments)))))
+  (let ((repl-port (assoc-ref opts 'listen-repl)))
+    (when repl-port
+      (spawn-server (make-tcp-server-socket #:port repl-port)))))
+
 (start-mumi-web-server 1234)