(use ugarit-backend) (use matchable) (use parley) (define (admin-storage! storage) (parameterize ((backend-log! (lambda (type message) (printf "~a: ~a\n" type message) (void)))) (let* ((be (import-storage storage))) (printf "Connected to ~a. Type \"help\" for a list of available commands. ^D to exit.\n" storage) (let loop () (let ((raw-line (parley "admin> "))) (if (eof-object? raw-line) (begin (newline) ((storage-close! be)) (void)) (let ((parsed-line (with-input-from-string (string-append "(" raw-line ")") read))) (handle-exceptions exn (printf "~A\n" ((condition-property-accessor 'exn 'message "Unknown error") exn)) (let ((result ((storage-admin! be) parsed-line))) (for-each (lambda (r) (printf "~a: ~s\n" (car r) (cdr r))) result))) (loop)))))))) (match (command-line-arguments) ((storage) (admin-storage! storage)) (else (printf "USAGE: ugarit-storage-admin ''\n")))