~ 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