raco setup: fix command-line argument handling

This commit is contained in:
Matthew Flatt 2013-09-30 09:15:36 -06:00
parent 413985eeb4
commit 68df43ac16
2 changed files with 29 additions and 8 deletions

View File

@ -2,7 +2,8 @@
(require racket/future)
;; other params are provided by declaration
(provide set-flag-params
(provide call-with-flag-params
set-flag-params
setup-program-name
specific-collections
specific-planet-dirs
@ -20,14 +21,28 @@
(let ([param (make-parameter default)])
(defined-flag-params (cons (cons 'name param) (defined-flag-params)))
param))))
;; this macro is used to actually do the setting, `more ...' is for additional
;; parameters to set
(define (call-with-flag-params flags k)
(let loop ([flag-params (defined-flag-params)])
(cond
[(null? flag-params) (k)]
[else
(define name+param (car flag-params))
(define x (assq (car name+param) flags))
(if x
(parameterize ([(cdr name+param) (cadr x)])
(loop (cdr flag-params)))
(loop (cdr flag-params)))])))
;; Imperative version of `with-flag-params':
(define-syntax-rule (set-flag-params flags more ...)
(set-flag-params* flags (list* (cons 'more more) ... (defined-flag-params))))
(define (set-flag-params* flags flag-params)
(for ([name+param flag-params])
(cond [(assq (car name+param) flags)
=> (lambda (x) ((cdr name+param) (cadr x)))])))
;; this macro is used to actually do the setting, `more ...' is for additional
;; parameters to set
(define-syntax-rule (set-flag-params flags more ...)
(set-flag-params* flags (list* (cons 'more more) ... (defined-flag-params))))
(define setup-program-name (make-parameter "raco setup"))

View File

@ -7,14 +7,18 @@
(define-values (short-name x-flags x-specific-collections x-specific-planet-packages x-archives)
(parse-cmdline (current-command-line-arguments)))
(define (has-x-flag? s)
(define a (assq s x-flags))
(and a (cadr a)))
(parameterize
;; Converting parse-cmdline results into parameter settings:
([current-target-plt-directory-getter
(if (assq 'all-users x-flags)
(if (has-x-flag? 'all-users)
(lambda (preferred main-collects-parent-dir choices)
main-collects-parent-dir)
(current-target-plt-directory-getter))]
[trust-existing-zos (or (assq 'trust-existing-zos x-flags)
[trust-existing-zos (or (has-x-flag? 'trust-existing-zos)
(trust-existing-zos))]
[specific-collections x-specific-collections]
[archives x-archives]
@ -22,4 +26,6 @@
[setup-program-name short-name])
(setup-core)))
(call-with-flag-params
x-flags
setup-core)))