~ chicken-core (chicken-5) 09efd966a77bfc0cc2dca873fa72a7843a86b58f
commit 09efd966a77bfc0cc2dca873fa72a7843a86b58f Author: felix <felix@call-with-current-continuation.org> AuthorDate: Fri Oct 28 21:42:03 2016 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Fri Oct 28 21:42:03 2016 +0200 write version file, always copy sources from location diff --git a/chicken-install.scm b/chicken-install.scm index 54386b90..0a6c11c7 100644 --- a/chicken-install.scm +++ b/chicken-install.scm @@ -50,6 +50,7 @@ (define +status-file+ "STATUS") (define +egg-extension+ "egg") (define +egg-info-extension+ "egg.info") +(define +version-file+ "VERSION") (include "mini-srfi-1.scm") (include "egg-environment.scm") @@ -315,15 +316,24 @@ (d "status changed for ~a~%" name) (fetch))) (let* ((info (load-egg-info eggfile)) - (lversion (get-egg-property info 'version))) - (cond ((and (file-exists? timestamp) - (> (- now (with-input-from-file timestamp read)) +one-hour+) - (not (check-remote-version name version - (and lversion lversion)))) + (vfile (make-pathname cached +version-file+)) + (lversion (or (get-egg-property info 'version) + (and (file-exists? vfile) + (with-input-from-file vfile read))))) + ;; yes, awkward - we must make sure locally available eggs are always + ;; fetched (check-remote-version takes care of that), so only check + ;; the timestamp, if it exists (as it does for downloaded eggs) + (cond ((if (file-exists? timestamp) + (and (> (- now (with-input-from-file timestamp read)) +one-hour+) + (not (check-remote-version name version lversion))) + (not (check-remote-version name version lversion))) (d "version of ~a out of date~%" name) (fetch) - (let ((info (load-egg-info eggfile))) ; new egg info (fetched) - (values cached (get-egg-property info 'version)))) + (let* ((info (load-egg-info eggfile)) ; new egg info (fetched) + (lversion (or (get-egg-property info 'version) + (and (file-exists? vfile) + (with-input-from-file vfile read))))) + (values cached lversion))) (else (values cached version)))))) (define (resolve-location name) @@ -350,9 +360,11 @@ (cond (dir (copy-egg-sources tmpdir dest) (delete-directory tmpdir #t) - (with-output-to-file - (make-pathname dest +timestamp-file+) - (lambda () (write (current-seconds))))) + (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)))) ((null? srvs) (error "extension or version not found")) (else (loop (cdr srvs)))))))) ((probe-dir (make-pathname (car locs) name)) @@ -385,14 +397,7 @@ (or (and versions (any (cut version>=? <> version) versions)) (loop (cdr srvs))))))) - ((probe-dir (make-pathname (car locs) name)) - => (lambda (dir) - (let* ((eggfile (make-pathname dir name +egg-extension+)) - (info (load-egg-info eggfile)) - (rversion (get-egg-property info 'version))) - (or (and rversion - (version>=? rversion version)) - (loop (cdr locs)))))) + ((probe-dir (make-pathname (car locs) name)) #f) (else (loop (cdr locs))))))Trap