~ chicken-core (chicken-5) e891c3e9238c3cf144266314f600e1d26bbd562d


commit e891c3e9238c3cf144266314f600e1d26bbd562d
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Fri Jun 25 12:30:00 2010 +0200
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Fri Jun 25 12:30:00 2010 +0200

    added 'mode' query-option to henrietta and setup-download

diff --git a/scripts/henrietta.scm b/scripts/henrietta.scm
index 7747056b..af227e22 100644
--- a/scripts/henrietta.scm
+++ b/scripts/henrietta.scm
@@ -49,6 +49,7 @@
   (define *username* #f)
   (define *password* #f)
   (define *tests* #f)
+  (define *mode* 'default)
 
   (define (headers)
     (print "Connection: close\r\nContent-type: text/plain\r\n\r\n"))
@@ -77,6 +78,7 @@
 		  quiet: #t 
 		  destination: #f
 		  tests: *tests*
+		  mode: *mode*
 		  username: *username* 
 		  password: *password*))))
       (unless dir 
@@ -92,7 +94,8 @@
 			(print "\n#|-------------------- " version " |# \"" pf "/\" 0")
 			(walk ff pf))
 		       (else
-			(print "\n#|-------------------- " version " |# \"" pf "\" " (file-size ff))
+			(print "\n#|-------------------- " version " |# \"" pf "\" " 
+			       (file-size ff))
 			(display (read-all ff)))))))
 	   files)))
       (print "\n#!eof") ) )
@@ -145,6 +148,9 @@
 		  ((string=? ms "list")
 		   (headers)
 		   (listing))
+		  ((string=? ms "mode")
+		   (set! *mode* (string->symbol (apply substring qs (caddr m))))
+		   (loop rest))
 		  (else
 		   (warning "unrecognized query option" ms)
 		   (loop rest))))))))
diff --git a/setup-download.scm b/setup-download.scm
index 51727dd1..02a687ad 100644
--- a/setup-download.scm
+++ b/setup-download.scm
@@ -49,6 +49,7 @@
   (define *quiet* #f)
   (define *chicken-install-user-agent* (conc "chicken-install " (chicken-version)))
   (define *trunk* #f)
+  (define *mode* 'default)
 
   (define (d fstr . args)
     (let ([port (if *quiet* (current-error-port) (current-output-port))])
@@ -105,7 +106,9 @@
 			   (cons (list 'version version)
 				 (handle-exceptions ex
 				     (begin
-				       (warning "extension has syntactically invalid .meta file" egg)
+				       (warning 
+					"extension has syntactically invalid .meta file" 
+					egg)
 				       (return #f))
 				   (with-input-from-file meta read))))))))))
        ls)))
@@ -126,7 +129,7 @@
          (map (lambda (s) (string-append (string-chomp s "/") "\n"))
               (with-input-from-pipe cmd read-lines))) ) ) )
 
-  (define (locate-egg/svn egg repo #!optional version destination username  password)
+  (define (locate-egg/svn egg repo #!optional version destination username password)
     (let* ([uarg (if username (string-append "--username='" username "'") "")]
 	   [parg (if password (string-append "--password='" password "'") "")]
 	   [cmd (make-svn-ls-cmd uarg parg (make-pathname repo egg) recursive?: #t)])
@@ -145,13 +148,27 @@
                             (if (member "trunk/" files)
                                 (values "trunk" "trunk")
                                 (values "" "") ) ) ) ] )
-          (let* ([tmpdir (make-pathname (or destination (get-temporary-directory)) egg)]
-                 [cmd (make-svn-export-cmd uarg parg (conc repo #\/ egg #\/ filedir) tmpdir)])
+          (let* ((tmpdir (make-pathname (or destination (get-temporary-directory)) egg))
+                 (cmd (make-svn-export-cmd 
+		       uarg parg
+		       (conc 
+			repo #\/ egg #\/
+			(if (eq? *mode* 'meta)
+			    (metafile filedir egg)
+			    filedir))
+		       (if (eq? *mode* 'meta)
+			   (begin
+			     (create-directory tmpdir)
+			     (metafile tmpdir egg))
+			   tmpdir))))
 	    (d "  ~a~%" cmd)
 	    (if (zero? (system cmd))
                 (values tmpdir ver)
 	        (values #f "") ) ) ) ) ) )
 
+  (define (metafile dir egg)
+    (conc dir #\/ egg ".meta"))
+
   (define (deconstruct-url url)
     (let ([m (string-match "(http://)?([^/:]+)(:([^:/]+))?(/.+)" url)])
       (values
@@ -170,6 +187,7 @@
 		     locn
 		     "?name=" egg
 		     (if version (string-append "&version=" version) "")
+		     "&mode=" (->string *mode*)
 		     (if tests "&tests=yes" ""))]
 	      [eggdir (make-pathname tmpdir egg) ] )
 	  (unless (file-exists? eggdir) (create-directory eggdir))
@@ -291,19 +309,20 @@
 
   (define (retrieve-extension name transport location
                               #!key version quiet destination username password tests
-			      proxy-host proxy-port trunk)
+			      proxy-host proxy-port trunk (mode 'default))
     (fluid-let ((*quiet* quiet)
-		(*trunk* trunk))
+		(*trunk* trunk)
+		(*mode* mode))
       (case transport
-	[(local)
+	((local)
 	 (when destination (warning "destination for transport `local' ignored"))
-	 (locate-egg/local name location version destination) ]
-	[(svn)
-	 (locate-egg/svn name location version destination username password) ]
-	[(http)
-	 (locate-egg/http name location version destination tests proxy-host proxy-port) ]
-	[else
-	 (error "cannot retrieve extension unsupported transport" transport) ] ) ) )
+	 (locate-egg/local name location version destination) )
+	((svn)
+	 (locate-egg/svn name location version destination username password) )
+	((http)
+	 (locate-egg/http name location version destination tests proxy-host proxy-port) )
+	(else
+	 (error "cannot retrieve extension unsupported transport" transport) ) ) ) )
 
   (define (list-extensions transport location #!key quiet username password)
     (fluid-let ((*quiet* quiet))
Trap