~ chicken-core (chicken-5) 177058d4e996111cd5d1b7d2815233f298a46b23
commit 177058d4e996111cd5d1b7d2815233f298a46b23
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Fri Apr 26 11:56:42 2013 +0200
Commit: Peter Bex <peter.bex@xs4all.nl>
CommitDate: Sun Apr 28 20:43:14 2013 +0200
when trying all available sources for egg-download, do not invalidate list-entries on failure for "local" transport. This allows using local egg-trees as "overlay" repositories. Hetwork-based transports are still invalidated once a download failed, as it is assumed that the network access is down (or timing out). This patch also fixes a bug in the handling of "local" transport, which didn't test whether the egg directory acutally existed.
Signed-off-by: Peter Bex <peter.bex@xs4all.nl>
diff --git a/chicken-install.scm b/chicken-install.scm
index 1ba5b978..4283d038 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -196,9 +196,6 @@
(transport ,*default-transport*)))
*default-sources* ) )
- (define (invalidate-default-source! def)
- (set! *default-sources* (delete def *default-sources* eq?)) )
-
(define (deps key meta)
(or (and-let* ((d (assq key meta)))
(cdr d))
@@ -337,26 +334,30 @@
(abort e) ] ) )
(define (with-default-sources proc)
- (let trying-sources ([defs (known-default-sources)])
- (if (null? defs)
- (proc #f #f
- (lambda ()
- (with-output-to-port (current-error-port)
- (lambda ()
- (print "Could not determine a source of extensions. "
- "Please, specify a location and a transport for "
- "a source.")))
- (exit 1)))
- (let* ([def (car defs)]
- [locn (resolve-location
- (cadr (or (assq 'location def)
- (error "missing location entry" def))))]
- [trans (cadr (or (assq 'transport def)
- (error "missing transport entry" def)))])
- (proc trans locn
+ (let ((sources (known-default-sources)))
+ (let trying-sources ((defs sources))
+ (if (null? defs)
+ (proc #f #f
(lambda ()
- (invalidate-default-source! def)
- (trying-sources (cdr defs)) ) ) ) ) ) )
+ (with-output-to-port (current-error-port)
+ (lambda ()
+ (print "Could not determine a source of extensions. "
+ "Please specify a valid location and transport.")))
+ (exit 1)))
+ (let ((def (car defs)))
+ (if def
+ (let* ((locn (resolve-location
+ (cadr (or (assq 'location def)
+ (error "missing location entry" def)))))
+ (trans (cadr (or (assq 'transport def)
+ (error "missing transport entry" def)))))
+ (proc trans locn
+ (lambda ()
+ (unless (eq? 'local trans)
+ ;; invalidate this entry in the list of sources
+ (set-car! defs #f))
+ (trying-sources (cdr defs)))))
+ (trying-sources (cdr defs))))))))
(define (try-default-sources name version)
(with-default-sources
diff --git a/setup-download.scm b/setup-download.scm
index 30934c4b..06c040bf 100644
--- a/setup-download.scm
+++ b/setup-download.scm
@@ -106,7 +106,9 @@
(if (and (file-exists? trunkdir) (directory? trunkdir))
(values trunkdir "trunk")
(values eggdir "") ) ) ) ) )
- (cond (dest
+ (cond ((or (not (file-exists? eggdir)) (not (directory? eggdir)))
+ (values #f ""))
+ (dest
(create-directory dest)
(let ((qdest (qs (normalize-pathname dest)))
(qsrc (qs (normalize-pathname src)))
Trap