~ chicken-core (chicken-5) 34e46927468244553f5df14237a65df856d2d93a
commit 34e46927468244553f5df14237a65df856d2d93a Author: felix <felix@call-with-current-continuation.org> AuthorDate: Wed May 11 04:44:16 2011 -0400 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Wed May 11 04:44:16 2011 -0400 -reinstall: needs internal property in setup info to handle egg installing multiple subextensions (problem pointed out by kon) diff --git a/chicken-install.scm b/chicken-install.scm index ce8d8039..fcffb038 100644 --- a/chicken-install.scm +++ b/chicken-install.scm @@ -645,9 +645,18 @@ (error "shell command terminated with nonzero exit code" r str)))) (define (installed-extensions) - (map (lambda (sf) - (cons (pathname-file sf) (first (read-file sf)))) - (glob (make-pathname (repo-path) "*" "setup-info")))) + (delete-duplicates + (filter-map + (lambda (sf) + (let ((info (first (read-file sf)))) + (cond ((assq 'egg-name-and-version info) => cadr) + (else + (warning + "installed extension has no information about the egg it belongs to" + (pathname-file sf)) + #f)))) + (glob (make-pathname (repo-path) "*" "setup-info"))) + equal?)) (define (command fstr . args) (let ((cmd (apply sprintf fstr args))) @@ -702,10 +711,9 @@ EOF (set! *proxy-port* 80))))))) (define (info->egg info) - (let ((version (assq 'version (cdr info)))) - (if version - (cons (car info) (->string (cadr version))) - (car info)))) + (if (member (cadr info) '("" "unknown" "trunk")) + (car info) + (cons (car info) (cadr info)))) (define *short-options* '(#\h #\k #\l #\t #\s #\p #\r #\n #\v #\i #\u #\D)) diff --git a/setup-api.scm b/setup-api.scm index e88dd302..60d41b0f 100644 --- a/setup-api.scm +++ b/setup-api.scm @@ -544,9 +544,17 @@ "unknown")))) (define (supply-version info version) - (if (assq 'version info) - info - (cons `(version ,(what-version version)) info))) + (cond ((assq 'version info) => + (lambda (a) + (cons + `(egg-name-and-version (,(extension-name) ,(->string (cadr a)))) + info))) + (else + (let ((v (what-version version))) + (cons* + `(version ,v) + `(egg-name-and-version (,(extension-name) ,(->string v))) + info))))) ;;; Convenience function @@ -763,8 +771,7 @@ [ensure-string (lambda (x) (if (or (not x) (null? x)) "" (->string x)))]) (list (ensure-string nam) (ensure-string ver)) ) ] [else - (warning "invalid extension-name-and-version" x) - (extension-name-and-version) ] ) ) ) ) + (error "invalid extension-name-and-version" x)])))) (define (extension-name) (car (extension-name-and-version)) )Trap