~ chicken-core (chicken-5) 380bb96803732e078e453abdd7fe078eb05733b1
commit 380bb96803732e078e453abdd7fe078eb05733b1
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Sat Nov 12 23:40:21 2016 +0100
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Sun Nov 13 11:41:49 2016 +0100
if cached version exists, ignore if egg can't be found or retrieved from server
diff --git a/chicken-install.scm b/chicken-install.scm
index c490b5c4..b7f8ed94 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -300,23 +300,23 @@
(timestamp (make-pathname cached +timestamp-file+))
(status (make-pathname cached +status-file+))
(eggfile (make-pathname cached name +egg-extension+)))
- (define (fetch)
+ (define (fetch lax)
(when (file-exists? cached)
(delete-directory cached #t))
(create-directory cached)
- (fetch-egg-sources name version cached)
+ (fetch-egg-sources name version cached lax)
(with-output-to-file status (cut write current-status)))
(unless (file-exists? cache-directory)
(create-directory cache-directory))
(cond ((or (not (probe-dir cached))
(not (file-exists? eggfile)))
(d "~a not cached~%" name)
- (fetch))
+ (fetch #f))
((and (file-exists? status)
(not (equal? current-status
(with-input-from-file status read))))
(d "status changed for ~a~%" name)
- (fetch)))
+ (fetch #f)))
(let* ((info (load-egg-info eggfile))
(vfile (make-pathname cached +version-file+))
(lversion (or (get-egg-property info 'version)
@@ -330,7 +330,7 @@
(not (check-remote-version name version lversion)))
(not (check-remote-version name version lversion)))
(d "version of ~a out of date~%" name)
- (fetch)
+ (fetch #t)
(let* ((info (load-egg-info eggfile)) ; new egg info (fetched)
(lversion (or (get-egg-property info 'version)
(and (file-exists? vfile)
@@ -346,30 +346,34 @@
(resolve-location new))))
(else name)))
-(define (fetch-egg-sources name version dest)
+(define (fetch-egg-sources name version dest lax)
(let loop ((locs default-locations))
(cond ((null? locs)
(let ((tmpdir (create-temporary-directory)))
(let loop ((srvs default-servers))
- (when (null? srvs)
- (error "extension or version not found"))
- (receive (dir ver)
- (try-download name (resolve-location (car srvs))
- version: version
- destination: tmpdir
- tests: run-tests
- proxy-host: proxy-host
- proxy-port: proxy-port
- proxy-user-pass: proxy-user-pass)
- (cond (dir
- (copy-egg-sources tmpdir dest)
- (delete-directory tmpdir #t)
- (when ver
- (with-output-to-file (make-pathname dest +version-file+)
- (cut write ver)))
- (with-output-to-file (make-pathname dest +timestamp-file+)
- (cut write (current-seconds))))
- (else (loop (cdr srvs))))))))
+ (if (null? srvs)
+ (if lax
+ (print "no connection to server or egg not found remotely - will use cached version")
+ (error "extension or version not found"))
+ (receive (dir ver)
+ (try-download name (resolve-location (car srvs))
+ version: version
+ destination: tmpdir
+ tests: run-tests
+ proxy-host: proxy-host
+ proxy-port: proxy-port
+ proxy-user-pass: proxy-user-pass)
+ (cond (dir
+ (copy-egg-sources tmpdir dest)
+ (delete-directory tmpdir #t)
+ (when ver
+ (with-output-to-file
+ (make-pathname dest +version-file+)
+ (cut write ver)))
+ (with-output-to-file
+ (make-pathname dest +timestamp-file+)
+ (cut write (current-seconds))))
+ (else (loop (cdr srvs)))))))))
((probe-dir (make-pathname (car locs) name))
=> (lambda (dir)
(let* ((eggfile (make-pathname dir name +egg-extension+))
Trap