From 68df43ac1645ff1a3dfcc17c614e0ef3f5fa8173 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 30 Sep 2013 09:15:36 -0600 Subject: [PATCH] raco setup: fix command-line argument handling --- racket/collects/setup/option.rkt | 25 ++++++++++++++++++++----- racket/collects/setup/setup-go.rkt | 12 +++++++++--- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/racket/collects/setup/option.rkt b/racket/collects/setup/option.rkt index dc81e802ad..9451ca88ed 100644 --- a/racket/collects/setup/option.rkt +++ b/racket/collects/setup/option.rkt @@ -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")) diff --git a/racket/collects/setup/setup-go.rkt b/racket/collects/setup/setup-go.rkt index bf77e3ebb6..0e9fb6abca 100644 --- a/racket/collects/setup/setup-go.rkt +++ b/racket/collects/setup/setup-go.rkt @@ -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)))