~ chicken-core (chicken-5) 8833978ae542bfa83c4ae9a0410b9664348b9997
commit 8833978ae542bfa83c4ae9a0410b9664348b9997 Author: Mario Domenech Goulart <mario.goulart@gmail.com> AuthorDate: Sat Mar 2 14:48:16 2013 -0300 Commit: Peter Bex <peter.bex@xs4all.nl> CommitDate: Sun Mar 3 11:56:34 2013 +0100 setup-download: fix +url-regex+ and deconstruct-url to match urls with path=/ or no path when port number is provided Without this patch, we get: (deconstruct-url "http://localhost:8080") => (values "http://localhost:8080" 80 "/") (deconstruct-url "http://localhost:8080/") => (values "http://localhost:8080/" 80 "/") That behavior makes chicken-install request port 80, even if another port was requested (8080, in the examples). Also, it returns host as "http://localhost:8080" instead of "localhost". This patch makes deconstruct-url correctly handle / and no path when a port is provided: (deconstruct-url "http://localhost:8080") => (values "localhost" 8080 "/") (deconstruct-url "http://localhost:8080/") => (values "localhost" 8080 "/") Signed-off-by: Peter Bex <peter.bex@xs4all.nl> diff --git a/setup-download.scm b/setup-download.scm index 5267b22a..30934c4b 100644 --- a/setup-download.scm +++ b/setup-download.scm @@ -44,7 +44,7 @@ (define-constant +default-tcp-connect-timeout+ 30000) ; 30 seconds (define-constant +default-tcp-read/write-timeout+ 30000) ; 30 seconds - (define-constant +url-regex+ "(http://)?([^/:]+)(:([^:/]+))?(/.+)") + (define-constant +url-regex+ "(http://)?([^/:]+)(:([^:/]+))?(/.*)?") (tcp-connect-timeout +default-tcp-connect-timeout+) (tcp-read-timeout +default-tcp-read/write-timeout+) @@ -226,7 +226,8 @@ (or (string->number port) (error "not a valid port" port))) 80) - (if m (irregex-match-substring m 5) "/")) ) ) + (or (and m (irregex-match-substring m 5)) + "/")))) (define (locate-egg/http egg url #!optional version destination tests proxy-host proxy-port proxy-user-pass)Trap