>From d7f7902c87065ec23c796f81c28ac4e902d4e5a3 Mon Sep 17 00:00:00 2001 From: Evan Hanson Date: Fri, 8 Nov 2013 06:28:27 +1300 Subject: [PATCH 2/2] Warn and exit when the user declines an egg upgrade during chicken-install This avoids an error when the user declines an egg upgrade, since that extension doesn't go into eggs+dirs+vers but the installation carries on regardless (and its dependency associates to #f where an e+d+v is expected). --- chicken-install.scm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/chicken-install.scm b/chicken-install.scm index 8df8865..7bcac90 100644 --- a/chicken-install.scm +++ b/chicken-install.scm @@ -478,7 +478,7 @@ (or *force* (yes-or-no? (make-replace-extension-question e+d+v upgrade) - default: "no" + default: "no" abort: (abort-setup) ) ) ) (let ([ueggs (unzip1 upgrade)]) (print " upgrade: " (string-intersperse ueggs ", ")) @@ -576,7 +576,13 @@ (unless *retrieve-only* (let* ((dag (reverse (topological-sort *dependencies* string=?))) (num (length dag)) - (depinstall-ok *force*)) + (depinstall-ok *force*) + (eggs+dirs+vers (map (cut assoc <> *eggs+dirs+vers*) dag))) + (and-let* ((ibad (list-index not eggs+dirs+vers))) + ;; A dependency was left unretrieved, most likely because the user declined an upgrade. + (fprintf (current-error-port) "\nUnresolved dependency: ~a\n\n" (list-ref dag ibad)) + (cleanup) + (exit 1)) (print "install order:") (pp dag) (for-each @@ -646,7 +652,7 @@ (print "installing for target ...") (fluid-let ((*host-extension* #f)) (setup tmpcopy))))))) - (map (cut assoc <> *eggs+dirs+vers*) dag) + eggs+dirs+vers (iota num num -1))))) (define (delete-stale-binaries) -- 1.7.10.4