~ chicken-core (chicken-5) 5e4976b2022c7add5d1a4a3492bf0974d1aad960


commit 5e4976b2022c7add5d1a4a3492bf0974d1aad960
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Thu Sep 30 08:32:07 2010 -0400
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Thu Sep 30 08:32:07 2010 -0400

    make -r work for local transport (suggested by Mario)

diff --git a/setup-download.scm b/setup-download.scm
index 9cd057c6..3ee1aa0b 100644
--- a/setup-download.scm
+++ b/setup-download.scm
@@ -53,6 +53,7 @@
   (define *chicken-install-user-agent* (conc "chicken-install " (chicken-version)))
   (define *trunk* #f)
   (define *mode* 'default)
+  (define *windows-shell* (foreign-value "C_WINDOWS_SHELL" bool))
 
   (define (d fstr . args)
     (let ([port (if *quiet* (current-error-port) (current-output-port))])
@@ -90,18 +91,32 @@
 	    (else "unknown\n"))))
 
   (define (locate-egg/local egg dir #!optional version destination)
-    (let* ([eggdir (make-pathname dir egg)]
-	   [tagdir (make-pathname eggdir "tags")]
-           [tagver (and (not *trunk*)
+    (let* ((eggdir (make-pathname dir egg))
+	   (tagdir (make-pathname eggdir "tags"))
+           (tagver (and (not *trunk*)
 			(file-exists? tagdir) (directory? tagdir)
-                        (existing-version egg version (directory tagdir)) ) ] )
-      (if tagver
-          (values (make-pathname tagdir tagver) tagver)
-          (let ([trunkdir (make-pathname eggdir "trunk")])
-            (when-no-such-version-warning egg version)
-            (if (and (file-exists? trunkdir) (directory? trunkdir))
-                (values trunkdir "trunk")
-                (values eggdir "") ) ) ) ) )
+                        (existing-version egg version (directory tagdir)) ) )
+	   (dest (and destination (make-pathname destination egg))))
+      (let-values (((src ver)
+		     (if tagver
+			 (values (make-pathname tagdir tagver) tagver)
+			 (let ((trunkdir (make-pathname eggdir "trunk")))
+			   (when-no-such-version-warning egg version)
+			   (if (and (file-exists? trunkdir) (directory? trunkdir))
+			       (values trunkdir "trunk")
+			       (values eggdir "") ) ) ) ) )
+	(cond (dest
+	       (create-directory dest)
+	       (let ((qdest (qs (normalize-pathname dest)))
+		     (qsrc (qs (normalize-pathname src)))
+		     (cmd (if *windows-shell*
+			      (sprintf "xcopy ~a ~a" src dest)
+			      (sprintf "cp -r ~a/* ~a" src dest))))
+		 (d "  ~a~%" cmd)
+		 (if (zero? (system cmd))
+		     (values #f "")
+		     (values dest ver))))
+	      (else (values src ver))))))
 
   (define (gather-egg-information dir)
     (let ((ls (directory dir)))
@@ -342,7 +357,6 @@
 		(*mode* mode))
       (case transport
 	((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) )
Trap