~ chicken-core (chicken-5) 59b5a6576b2b305f32905008d29122b97b93123f
commit 59b5a6576b2b305f32905008d29122b97b93123f Author: Evan Hanson <evhan@foldling.org> AuthorDate: Sun Apr 23 15:41:19 2017 +1200 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Sun Apr 23 15:41:19 2017 +1200 Re-prompt on invalid input in replace-extension-question This redisplays the "replace extension? yes/no/abort" prompt when the user enters an invalid response on egg upgrades, so that it's clear chicken-install is still waiting for input. Also, fix the indentation of the procedure's `filter-map` form. diff --git a/chicken-install.scm b/chicken-install.scm index d3d7558e..69179255 100644 --- a/chicken-install.scm +++ b/chicken-install.scm @@ -720,34 +720,32 @@ (append (list "The following installed extensions are outdated, because `" (car e+d+v) - "' requires later versions:\n") - (filter-map - (lambda (e) - (cond ((assq (string->symbol (car e)) override) => - (lambda (a) - (unless (equal? (cadr a) (cdr e)) - (warning - (sprintf "version `~a' of extension `~a' overrides required version `~a'" - (cadr a) (car a) (cdr e)))) - #f)) - (else - (conc - " " (car e) - " (" (let ((v (assq 'version (extension-information (car e))))) - (if v (cadr v) "???")) - " -> " (cdr e) ")" - #\newline) ))) - upgrade) - '("\nDo you want to replace the existing extensions ? (yes/no/abort) ")) - "")) - (flush-output) + "' requires later versions:\n\n") + (filter-map + (lambda (e) + (cond ((assq (string->symbol (car e)) override) => + (lambda (a) + (unless (equal? (cadr a) (cdr e)) + (warning + (sprintf "version `~a' of extension `~a' overrides required version `~a'" + (cadr a) (car a) (cdr e)))) + #f)) + (else + (conc " " (car e) + " (" (let ((v (assq 'version (extension-information (car e))))) + (if v (cadr v) "unknown")) + " -> " (cdr e) ")" #\newline)))) + upgrade)) + "")) (let loop () + (display "Do you want to replace the existing extensions? (yes/no/abort) ") + (flush-output) (let ((r (trim (read-line)))) (cond ((string=? r "yes")) ((string=? r "no") #f) ((string=? r "abort") (exit 1)) (else (loop)))))) - + (define (trim str) (define (left lst) (cond ((null? lst) '())Trap