From a62624301bc7ffef4996364a208b17cd7f3584bc Mon Sep 17 00:00:00 2001 From: Mathieu Lirzin Date: Fri, 1 Jul 2016 14:39:21 +0200 Subject: base: Add %program-name parameter object. --- .dir-locals.el | 2 ++ bin/cuirass.in | 31 ++++++++++++++++--------------- src/cuirass/base.scm | 21 ++++++++++++++++++--- src/cuirass/ui.scm | 6 ++++-- tests/base.scm | 4 ++++ 5 files changed, 44 insertions(+), 20 deletions(-) diff --git a/.dir-locals.el b/.dir-locals.el index 29c6c99..50d9520 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -11,4 +11,6 @@ (scheme-mode . ((indent-tabs-mode . nil) + (eval . (put 'test-error 'scheme-indent-function 1)) + (eval . (put 'make-parameter 'scheme-indent-function 1)) (eval . (put 'with-database 'scheme-indent-function 1))))) diff --git a/bin/cuirass.in b/bin/cuirass.in index edcf940..cd01c94 100644 --- a/bin/cuirass.in +++ b/bin/cuirass.in @@ -28,8 +28,8 @@ exec ${GUILE:-@GUILE@} --no-auto-compile -e main -s "$0" "$@" (cuirass ui) (ice-9 getopt-long)) -(define* (show-help prog) - (simple-format #t "Usage: ~a [OPTIONS] [CACHEDIR]" prog) +(define* (show-help) + (simple-format #t "Usage: ~a [OPTIONS] [CACHEDIR]" (%program-name)) (display " Run Guix job from a git repository cloned in CACHEDIR. @@ -113,19 +113,20 @@ DIR if required." ;;; (define* (main #:optional (args (command-line))) - (let ((opts (getopt-long args %options)) - (progname "cuirass")) - (cond - ((option-ref opts 'help #f) - (show-help progname) - (exit 0)) - ((option-ref opts 'version #f) - (show-version progname) - (exit 0)) - (else - (parameterize ((%package-database - (option-ref opts 'database (%package-database)))) + (let ((opts (getopt-long args %options))) + (parameterize + ((%program-name (car args)) + (%package-database (option-ref opts 'database (%package-database)))) + (cond + ((option-ref opts 'help #f) + (show-help) + (exit 0)) + ((option-ref opts 'version #f) + (show-version) + (exit 0)) + (else (let* ((specfile (option-ref opts 'file "tests/hello-subset.scm")) + (interval (option-ref opts 'interval "60")) (specs (primitive-load specfile)) (args (option-ref opts '() #f)) (cachedir (if (null? args) @@ -148,4 +149,4 @@ DIR if required." (lambda () ((guix-variable 'store 'close-connection) store))))) specs) - (sleep (string->number (option-ref opts 'interval "60"))))))))))) + (sleep (string->number interval)))))))))) diff --git a/src/cuirass/base.scm b/src/cuirass/base.scm index c7c23e2..63e1b7a 100644 --- a/src/cuirass/base.scm +++ b/src/cuirass/base.scm @@ -1,6 +1,7 @@ ;;;; base.scm - Cuirass base module ;;; ;;; Copyright © 2012, 2016 Ludovic Courtès +;;; Copyright © 2016 Mathieu Lirzin ;;; ;;; This file is part of Cuirass. ;;; @@ -20,9 +21,23 @@ (define-module (cuirass base) #:use-module (ice-9 format) #:use-module (srfi srfi-19) - #:export (guix-variable - with-directory-excursion - call-with-time-display)) + #:export (;; Procedures. + guix-variable + call-with-time-display + ;; Parameters. + %program-name + ;; Macros. + with-directory-excursion)) + +(define %program-name + ;; Similar in spirit to Gnulib 'progname' module. + (make-parameter "" + (λ (val) + (cond ((not (string? val)) + (scm-error 'wrong-type-arg + "%program-name" "Not a string: ~S" (list #f) #f)) + ((string-rindex val #\/) => (λ (idx) (substring val (1+ idx)))) + (else val))))) (define (guix-variable module name) "Dynamically link variable NAME under Guix module MODULE and return it. diff --git a/src/cuirass/ui.scm b/src/cuirass/ui.scm index d953f8a..d351e4e 100644 --- a/src/cuirass/ui.scm +++ b/src/cuirass/ui.scm @@ -18,13 +18,15 @@ ;;; along with Cuirass. If not, see . (define-module (cuirass ui) + #:use-module (cuirass base) #:use-module (cuirass config) #:export (show-version show-package-information)) -(define (show-version prog) +(define (show-version) "Display version information for COMMAND." - (simple-format #t "~a (~a) ~a~%" prog %package-name %package-version) + (simple-format #t "~a (~a) ~a~%" + (%program-name) %package-name %package-version) (display "Copyright (C) 2016 the Cuirass authors License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. diff --git a/tests/base.scm b/tests/base.scm index 2e09bc9..4557bb8 100644 --- a/tests/base.scm +++ b/tests/base.scm @@ -19,3 +19,7 @@ (use-modules (cuirass base) (srfi srfi-64)) + +(test-error "invalid program name" + 'wrong-type-arg + (%program-name #f)) -- cgit v1.2.3