@@ -8,20 +8,22 @@ ;; PURPOSE. ;; (include "common.scm") ;; (include "megatest-version.scm") -(use sqlite3 srfi-1 posix regex regex-case srfi-69 base64 format) +(use sqlite3 srfi-1 posix regex regex-case srfi-69 base64 format readline apropos) (import (prefix sqlite3 sqlite3:)) (import (prefix base64 base64:)) (declare (uses common)) (declare (uses megatest-version)) (declare (uses margs)) (declare (uses runs)) (declare (uses launch)) (declare (uses server)) + +(define *db* #f) ;; this is only for the repl, do not use in general!!!! (include "common_records.scm") (include "key_records.scm") (include "db_records.scm") @@ -93,10 +95,11 @@ -setvars VAR1=val1,VAR2=val2 : Add environment variables to a run NB// these are overwritten by values set in config files. -archive : archive tests, use -target, :runname, -itempatt and -testpatt -server -|hostname : start the server (reduces contention on megatest.db), use - to automatically figure out hostname + -repl : start a repl (useful for extending megatest) Spreadsheet generation -extract-ods fname.ods : extract an open document spreadsheet from the database -pathmod path : insert path, i.e. path/runame/itempath/logfile.html will clear the field if no rundir/testname/itempath/logfile @@ -170,10 +173,11 @@ "-load-test-data" "-summarize-items" "-gui" ;; misc "-archive" + "-repl" ;; queries "-test-paths" ;; get path(s) to a test, ordered by youngest first "-runall" ;; run all tests "-remove-runs" @@ -266,14 +270,14 @@ (setup-for-run) (open-db))) (runpatt (args:get-arg "-list-runs")) (testpatt (args:get-arg "-testpatt")) (itempatt (args:get-arg "-itempatt")) - (runsdat (db:get-runs db runpatt #f #f '())) + (runsdat (rdb:get-runs db runpatt #f #f '())) (runs (db:get-rows runsdat)) (header (db:get-header runsdat)) - (keys (db-get-keys db)) + (keys (rdb:get-keys db)) (keynames (map key:get-fieldname keys))) ;; Each run (for-each (lambda (run) (debug:print 2 "Run: " @@ -393,18 +397,18 @@ (db (if toppath (open-db) #f))) (if db (server:start db (args:get-arg "-server")) (debug:print 0 "ERROR: Failed to setup for megatest")))) -;;;====================================================================== +;;====================================================================== ;; Rollup into a run ;;====================================================================== (if (args:get-arg "-rollup") (general-run-call "-rollup" "rollup tests" - (lambda (db keys keynames keyvallst) + (lambda (db target runname keys keynames keyvallst) (runs:rollup-run db keys (keys->alist keys "na") (args:get-arg ":runname") user)))) @@ -437,11 +441,11 @@ (begin (debug:print 0 "Failed to setup, giving up on -test-paths, exiting") (exit 1))) (set! db (open-db)) (let* ((itempatt (args:get-arg "-itempatt")) - (keys (db-get-keys db)) + (keys (rdb:get-keys db)) (keynames (map key:get-fieldname keys)) (paths (db:test-get-paths-matching db keynames target))) (set! *didsomething* #t) (for-each (lambda (path) (print path)) @@ -485,11 +489,11 @@ (begin (debug:print 0 "Failed to setup, giving up on -archive, exiting") (exit 1))) (set! db (open-db)) (let* ((itempatt (args:get-arg "-itempatt")) - (keys (db-get-keys db)) + (keys (rdb:get-keys db)) (keynames (map key:get-fieldname keys)) (paths (db:test-get-paths-matching db keynames target))) (set! *didsomething* #t) (for-each (lambda (path) (print path)) @@ -682,11 +686,11 @@ (if (not (setup-for-run)) (begin (debug:print 0 "Failed to setup, exiting") (exit 1))) (set! db (open-db)) - (set! keys (db-get-keys db)) + (set! keys (rdb:get-keys db)) (debug:print 1 "Keys: " (string-intersperse (map key:get-fieldname keys) ", ")) (sqlite3:finalize! db) (set! *didsomething* #t))) (if (args:get-arg "-gui") @@ -724,10 +728,31 @@ ;; now can find our db (set! db (open-db)) (runs:update-all-test_meta db) (sqlite3:finalize! db) (set! *didsomething* #t))) + +;;====================================================================== +;; Start a repl +;;====================================================================== +(if (args:get-arg "-repl") + (let* ((toppath (setup-for-run)) + (db (if toppath (open-db) #f))) + (if db + (begin + (set! *db* db) + (import readline) + (import apropos) + (gnu-history-install-file-manager + (string-append + (or (get-environment-variable "HOME") ".") "/.megatest_history")) + (current-input-port (make-gnu-readline-port "megatest> ")) + (repl))))) + +;;====================================================================== +;; Exit and clean up +;;====================================================================== (if (not *didsomething*) (debug:print 0 help)) (if (not (eq? *globalexitstatus* 0))