summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Lirzin <mthl@gnu.org>2016-07-01 14:39:21 +0200
committerMathieu Lirzin <mthl@gnu.org>2016-07-01 16:00:14 +0200
commita62624301bc7ffef4996364a208b17cd7f3584bc (patch)
treea32cf1394c86cf7f21517a86aa789bbd7f5a9260
parent0f04df269157ee005d7030196780c738c67c5a0a (diff)
downloadcuirass-a62624301bc7ffef4996364a208b17cd7f3584bc.tar
cuirass-a62624301bc7ffef4996364a208b17cd7f3584bc.tar.gz
base: Add %program-name parameter object.
-rw-r--r--.dir-locals.el2
-rw-r--r--bin/cuirass.in31
-rw-r--r--src/cuirass/base.scm21
-rw-r--r--src/cuirass/ui.scm6
-rw-r--r--tests/base.scm4
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 <ludo@gnu.org>
+;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
;;;
;;; 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 <http://www.gnu.org/licenses/>.
(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 <http://gnu.org/licenses/gpl.html>
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))