~ chicken-core (chicken-5) e090c524b782e3bc982299b4c021a5fc96db36e4
commit e090c524b782e3bc982299b4c021a5fc96db36e4 Author: Peter Bex <peter@more-magic.net> AuthorDate: Sat Jan 16 16:30:41 2016 +0100 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Sun Jan 24 11:39:00 2016 +1300 Do not reinstall satisfied deps in deploy mode This fixes #1106 Signed-off-by: Evan Hanson <evhan@foldling.org> diff --git a/NEWS b/NEWS index ca5cdb37..401a1922 100644 --- a/NEWS +++ b/NEWS @@ -41,6 +41,9 @@ basic source-level debugging of compiled Scheme code. - A statistical profiler has been added, enabling sampling-based runtime profiling of compiled programs. + - "chicken-install" + - When installing eggs in deploy mode, already satisfied + dependencies aren't reinstalled every time (#1106). - "chicken-uninstall" - -prefix and -deploy options were added, matching chicken-install. - "chicken-status" diff --git a/chicken-install.scm b/chicken-install.scm index bc23c9dd..033a2524 100644 --- a/chicken-install.scm +++ b/chicken-install.scm @@ -110,9 +110,15 @@ (define *hacks* '()) (define (repo-path) - (if (and *cross-chicken* (not *host-extension*)) - (make-pathname C_TARGET_LIB_HOME (sprintf "chicken/~a" C_BINARY_VERSION)) - (repository-path))) + (if *deploy* + *prefix* + (if (and *cross-chicken* (not *host-extension*)) + (make-pathname C_TARGET_LIB_HOME (sprintf "chicken/~a" C_BINARY_VERSION)) + (if *prefix* + (make-pathname + *prefix* + (sprintf "lib/chicken/~a" (##sys#fudge 42))) + (repository-path))))) (define (get-prefix #!optional runtime) (cond ((and *cross-chicken* @@ -200,7 +206,7 @@ '())) (define (init-repository dir) - (let ((src (repository-path)) + (let ((src (get-prefix)) (copy (if *windows-shell* "copy" "cp -r"))) @@ -217,7 +223,12 @@ (or (member xs ##sys#core-library-modules) (member xs ##sys#core-syntax-modules)))) (chicken-version) ) - ((extension-information x) => + ;; Duplication of (extension-information) to get custom + ;; prefix. This should be fixed. + ((let* ((ep (##sys#canonicalize-extension-path x 'ext-version)) + (sf (make-pathname (repo-path) ep "setup-info"))) + (and (file-exists? sf) + (with-input-from-file sf read))) => (lambda (info) (let ((a (assq 'version info))) (if a @@ -233,12 +244,9 @@ (define (check-dependency dep) (cond ((or (symbol? dep) (string? dep)) - (values - (if *deploy* - (->string dep) - (and (not (ext-version dep)) - (->string dep))) - #f)) + (values (and (not (ext-version dep)) + (->string dep)) + #f)) ((and (list? dep) (eq? 'or (car dep))) (let scan ((ordeps (cdr dep)) (bestm #f) (bestu #f)) (if (null? ordeps) @@ -260,10 +268,8 @@ ((and (list? dep) (= 2 (length dep)) (or (string? (car dep)) (symbol? (car dep)))) (let ((v (ext-version (car dep)))) - (cond ((or *deploy* (not v)) - (values - (->string (car dep)) - #f)) + (cond ((not v) + (values (->string (car dep)) #f)) ((not (version>=? v (->string (cadr dep)))) (cond ((string=? "chicken" (->string (car dep))) (if *force* @@ -675,7 +681,7 @@ (remove-directory tmpdir)))) (define (update-db) - (let* ((files (glob (make-pathname (repository-path) "*.import.*"))) + (let* ((files (glob (make-pathname (repo-path) "*.import.*"))) (tmpdir (create-temporary-directory)) (dbfile (make-pathname tmpdir +module-db+)) (rx (irregex ".*/([^/]+)\\.import\\.(scm|so)"))) @@ -709,7 +715,7 @@ (with-output-to-file dbfile (lambda () (for-each (lambda (x) (write x) (newline)) db))) - (copy-file dbfile (make-pathname (repository-path) +module-db+)) + (copy-file dbfile (make-pathname (repo-path) +module-db+)) (remove-directory tmpdir)))) (define (apply-mappings eggs) @@ -850,10 +856,11 @@ EOF (setup-proxy (get-environment-variable "http_proxy")) (let loop ((args args) (eggs '())) (cond ((null? args) - (cond ((and *deploy* (not *prefix*)) - (error - "`-deploy' only makes sense in combination with `-prefix DIRECTORY`")) - (update (update-db)) + (when *deploy* + (unless *prefix* + (error + "`-deploy' only makes sense in combination with `-prefix DIRECTORY`"))) + (cond (update (update-db)) (scan (scan-directory scan)) (else (let ((defaults (load-defaults))) @@ -906,7 +913,7 @@ EOF (string=? arg "--help")) (usage 0)) ((string=? arg "-repository") - (print (repository-path)) + (print (repo-path)) (exit 0)) ((string=? arg "-force") (set! *force* #t)Trap