~ chicken-core (chicken-5) 457b513b102b3469214615f6f1d476233739b2da


commit 457b513b102b3469214615f6f1d476233739b2da
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Thu Jun 30 12:25:41 2016 +0200
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Sun Nov 13 11:32:20 2016 +0100

    changed setup.defaults, some bugfixes, list-versions mode

diff --git a/egg-download.scm b/egg-download.scm
index 2a1f5bb3..77e6b2f6 100644
--- a/egg-download.scm
+++ b/egg-download.scm
@@ -248,7 +248,7 @@
                        (if version (string-append "&version=" version) "")
                        "&mode=default"
                        (if tests "&tests=yes" "")))
-	   (eggdir (make-pathname destination egg)))
+	   (eggdir destination))
         (let ((fversion	(http-fetch host port locn eggdir proxy-host
                                     proxy-port proxy-user-pass)))
 	  ;; If we get here then version of egg exists
diff --git a/new-install.scm b/new-install.scm
index 094f2bd6..c143c79e 100644
--- a/new-install.scm
+++ b/new-install.scm
@@ -16,7 +16,7 @@
 (import (chicken time))
 (import (chicken pretty-print))
 
-(define +defaults-version+ 1)
+(define +defaults-version+ 2)
 (define +module-db+ "modules.db")
 (define +defaults-file+ "setup.defaults")
 (define +short-options+ '(#\r #\h))
@@ -30,7 +30,8 @@
 (include "egg-compile.scm")
 (include "egg-download.scm")
 
-(define quiet #f)
+(define user-defaults #f)
+(define quiet #f)  ;XXX
 (define default-servers '())
 (define default-locations '())
 (define mappings '())
@@ -41,6 +42,7 @@
 (define proxy-port #f)
 (define proxy-user-pass #f)
 (define retrieve-only #f)
+(define list-versions-only #f)
 (define canonical-eggs '())
 (define run-tests #f)
   
@@ -67,6 +69,7 @@
 ;; usage information
   
 (define (usage code)
+  (print "usage: chicken-install [OPTION | EXTENSION[:VERSION]] ...")
   ;;XXX  
   (exit code))
   
@@ -82,9 +85,10 @@
    	            (substring s (- len-s len-suffix))))))
 
 (define (d fstr . args)
-  (let ((port (if quiet (current-error-port) (current-output-port))))
-    (apply fprintf port fstr args)
-    (flush-output port) ) )
+  (unless quiet
+    (let ((port (current-error-port)))
+      (apply fprintf port fstr args)
+      (flush-output port) ) ))
 
 (define (version>=? v1 v2)
   (define (version->list v)
@@ -109,7 +113,8 @@
 ;; load defaults file ("setup.defaults")
 
 (define (load-defaults)
-  (let ((deff (make-pathname host-sharedir +defaults-file+)))
+  (let ((deff (or user-defaults
+                  (make-pathname host-sharedir +defaults-file+))))
       (define (broken x)
 	(error "invalid entry in defaults file" deff x))
       (cond ((not (file-exists? deff)) '())
@@ -132,7 +137,7 @@
 			 ))
 		  ((server)
 		   (set! default-servers
-		     (append default-servers (list (cdr x)))))
+		     (append default-servers (cdr x))))
 		  ((map)
 		   (set! mappings
 		     (append
@@ -232,8 +237,11 @@
     (define (fetch)
       (when (file-exists? cached)
         (delete-directory cached #t))
+      (create-directory cached)
       (fetch-egg-sources name version cached)
       (with-output-to-file status (cut write current-status)))
+    (unless (file-exists? cache-directory)
+      (create-directory cache-directory))
     (cond ((not (probe-dir cached)) (fetch))
           ((and (file-exists? status)
                 (not (equal? current-status 
@@ -249,12 +257,20 @@
                (values cached (get-egg-property info 'version))))
             (else (values cached version))))))
     
+(define (resolve-location name)
+  (cond ((assoc name aliases) => 
+         (lambda (a)
+           (let ((new (cdr a)))
+             (d "resolving alias `~a' to: ~a~%" name new)
+             (resolve-location new))))
+        (else name)))
+
 (define (fetch-egg-sources name version dest)
   (let loop ((locs default-locations))
     (cond ((null? locs)
            (let loop ((srvs default-servers))
              (receive (dir ver)
-               (try-download name (car srvs) 
+               (try-download name (resolve-location (car srvs))
                              version: version 
                              destination: dest
                              tests: run-tests 
@@ -317,15 +333,52 @@
                     (cons (list name dir ver) canonical-eggs)))))))
      eggs)
   (unless retrieve-only
+    ;;XXX recursive retrieval of dependencies...
     (error "to be implemented"))) ; XXX
 
   
+;; list available egg versions
+  
+(define (list-egg-versions eggs)
+  (let ((srvs (map resolve-location default-servers)))
+    (let loop1 ((eggs eggs))
+      (unless (null? eggs)
+        (let* ((egg (car eggs))
+               (name (if (pair? egg) (car egg) egg)))
+          (let loop2 ((srvs srvs))
+            (and (pair? srvs)
+                 (let ((versions (try-list-versions name (car srvs))))
+                   (or (and versions 
+                            (begin
+                              (printf "~a:" name)
+                              (for-each (cut printf " ~a" <>) versions)))
+                       (loop2 (cdr srvs))))))
+          (loop1 (cdr eggs)))))))
+
+  
+;; perform installation of retrieved eggs
+  
+(define (install-canonical-eggs)
+  ...
+  )
+
 ;; command line parsing and selection of operations
   
 (define (perform-actions eggs)
-  (let ((eggs (apply-mappings eggs)))
-    ;;XXX...
-    (retrieve-eggs eggs)))
+  (load-defaults)
+  (cond ((null? eggs)
+         (set! canonical-eggs 
+           (map (lambda (fname)
+                  (list (pathname-file fname) (current-directory) #f))
+             (glob "*.egg")))
+         (install-canonical-eggs))
+        (else
+          (let ((eggs (apply-mappings eggs)))
+            (cond (list-versions-only (list-egg-versions eggs))
+                  ;;XXX other actions...
+                  (else 
+                    (retrieve-eggs eggs)
+                    (install-canonical-eggs)))))))
 
 (define (main args)
   (setup-proxy (get-environment-variable "http_proxy"))
@@ -338,7 +391,17 @@
             (cond ((member arg '("-h" "-help" "--help"))
                    (usage 0))
                   ((equal? arg "-test")
-                   (set! run-tests #t))
+                   (set! run-tests #t)
+                   (loop (cdr args)))
+                  ((member arg '("-r" "-retrieve"))
+                   (set! retrieve-only #t)
+                   (loop (cdr args)))
+                  ((equal? arg "-list-versions")
+                   (set! list-versions-only #t)
+                   (loop (cdr args)))
+                  ((equal? arg "-defaults")
+                   (set! user-defaults (cadr args))
+                   (loop (cddr args)))
 
                   ;;XXX 
                   
@@ -358,9 +421,10 @@
                        (alist-cons
                          (irregex-match-substring m 1)
                          (irregex-match-substring m 2)
-                         eggs))))
+                         eggs))
+                     (loop (cdr args))))
                   (else 
-                    (set! eggs (cons arg args))
+                    (set! eggs (cons arg eggs))
                     (loop (cdr args)))))))))
 
 (main (command-line-arguments))
diff --git a/setup.defaults b/setup.defaults
index c25d546a..d91927b3 100644
--- a/setup.defaults
+++ b/setup.defaults
@@ -9,15 +9,12 @@
 
 ;; list of servers in the order in which they will be processed
 ;
-; (server (location URL))
+; (server URL)
 ;
 ; URL may be an alias (see below) or a real URL
 
-(server
- (location "kitten-technologies"))
-
-(server
- (location "call-cc"))
+(server "kitten-technologies")
+(server "call-cc")
 
 
 ;; extensions-mappings
Trap