Mercurial > hg-stable
changeset 10674:6d87c20cd7a8 stable
hgweb: fix broken URLs of RSS/Atom feeds (issue1772)
This fixes doubled URL, e.g. http://example.orghttp://example.org/...,
which appears on RSS/Atom feeds served by hgwebdir.
It splits baseurl to update SERVER_NAME, SERVER_PORT and SCRIPT_NAME,
according to RFC 3875.
Updated the test output since SCRIPT_NAME becomes not to contain
http://host:port part.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Thu, 11 Mar 2010 00:28:27 +0900 |
parents | 9848b39a1472 |
children | 3c05ecffe20d |
files | mercurial/hgweb/hgwebdir_mod.py tests/test-hgwebdir tests/test-hgwebdir.out |
diffstat | 3 files changed, 68 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/hgweb/hgwebdir_mod.py Thu Mar 11 00:25:46 2010 +0900 +++ b/mercurial/hgweb/hgwebdir_mod.py Thu Mar 11 00:28:27 2010 +0900 @@ -6,7 +6,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. -import os, re, time +import os, re, time, urlparse from mercurial.i18n import _ from mercurial import ui, hg, util, templater from mercurial import error, encoding @@ -339,5 +339,17 @@ return tmpl def updatereqenv(self, env): + def splitnetloc(netloc): + if ':' in netloc: + return netloc.split(':', 1) + else: + return (netloc, None) + if self._baseurl is not None: - env['SCRIPT_NAME'] = self._baseurl + urlcomp = urlparse.urlparse(self._baseurl) + host, port = splitnetloc(urlcomp[1]) + path = urlcomp[2] + env['SERVER_NAME'] = host + if port: + env['SERVER_PORT'] = port + env['SCRIPT_NAME'] = path
--- a/tests/test-hgwebdir Thu Mar 11 00:25:46 2010 +0900 +++ b/tests/test-hgwebdir Thu Mar 11 00:28:27 2010 +0900 @@ -51,6 +51,13 @@ echo % should give a 404 - repo is not published "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/c/file/tip/c?style=raw' +echo % atom-log without basedir +"$TESTDIR/get-with-headers.py" localhost:$HGPORT '/a/atom-log' \ + | grep '<link' | sed 's|//[.a-zA-Z0-9\-_]*:[0-9][0-9]*/|//example.com:8080/|' + +echo % rss-log without basedir +"$TESTDIR/get-with-headers.py" localhost:$HGPORT '/a/rss-log' \ + | grep '<guid' | sed 's|//[.a-zA-Z0-9\-_]*:[0-9][0-9]*/|//example.com:8080/|' cat > paths.conf <<EOF [paths] @@ -119,6 +126,28 @@ "$TESTDIR/get-with-headers.py" localhost:$HGPORT2 '/b/file/tip/b?style=raw' "$TESTDIR/get-with-headers.py" localhost:$HGPORT2 '/c/file/tip/c?style=raw' +echo % atom-log with basedir / +"$TESTDIR/get-with-headers.py" localhost:$HGPORT2 '/a/atom-log' \ + | grep '<link' | sed 's|//[.a-zA-Z0-9\-_]*:[0-9][0-9]*/|//example.com:8080/|' + +echo % rss-log with basedir / +"$TESTDIR/get-with-headers.py" localhost:$HGPORT2 '/a/rss-log' \ + | grep '<guid' | sed 's|//[.a-zA-Z0-9\-_]*:[0-9][0-9]*/|//example.com:8080/|' + +"$TESTDIR/killdaemons.py" + +hg serve --config web.baseurl=http://hg.example.com:8080/foo/ -p $HGPORT2 -d \ + --pid-file=hg.pid --webdir-conf collections.conf \ + -A access-collections-2.log -E error-collections-2.log +cat hg.pid >> $DAEMON_PIDS + +echo % atom-log with basedir /foo/ +"$TESTDIR/get-with-headers.py" localhost:$HGPORT2 '/a/atom-log' \ + | grep '<link' | sed 's|//[.a-zA-Z0-9\-_]*:[0-9][0-9]*/|//example.com:8080/|' + +echo % rss-log with basedir /foo/ +"$TESTDIR/get-with-headers.py" localhost:$HGPORT2 '/a/rss-log' \ + | grep '<guid' | sed 's|//[.a-zA-Z0-9\-_]*:[0-9][0-9]*/|//example.com:8080/|' echo % paths errors 1 cat error-paths-1.log @@ -128,3 +157,5 @@ cat error-paths-3.log echo % collections errors cat error-collections.log +echo % collections errors 2 +cat error-collections-2.log
--- a/tests/test-hgwebdir.out Thu Mar 11 00:25:46 2010 +0900 +++ b/tests/test-hgwebdir.out Thu Mar 11 00:28:27 2010 +0900 @@ -25,6 +25,12 @@ error: repository c not found +% atom-log without basedir + <link rel="self" href="http://example.com:8080/a/atom-log"/> + <link rel="alternate" href="http://example.com:8080/a/"/> + <link href="http://example.com:8080/a/rev/8580ff50825a"/> +% rss-log without basedir + <guid isPermaLink="true">http://example.com:8080/a/rev/8580ff50825a</guid> % should succeed, slashy names 200 Script output follows @@ -323,10 +329,10 @@ 200 Script output follows -http://hg.example.com:8080/a/ -http://hg.example.com:8080/a/.hg/patches/ -http://hg.example.com:8080/b/ -http://hg.example.com:8080/c/ +/a/ +/a/.hg/patches/ +/b/ +/c/ 200 Script output follows @@ -337,7 +343,20 @@ 200 Script output follows c +% atom-log with basedir / + <link rel="self" href="http://example.com:8080/a/atom-log"/> + <link rel="alternate" href="http://example.com:8080/a/"/> + <link href="http://example.com:8080/a/rev/8580ff50825a"/> +% rss-log with basedir / + <guid isPermaLink="true">http://example.com:8080/a/rev/8580ff50825a</guid> +% atom-log with basedir /foo/ + <link rel="self" href="http://example.com:8080/foo/a/atom-log"/> + <link rel="alternate" href="http://example.com:8080/foo/a/"/> + <link href="http://example.com:8080/foo/a/rev/8580ff50825a"/> +% rss-log with basedir /foo/ + <guid isPermaLink="true">http://example.com:8080/foo/a/rev/8580ff50825a</guid> % paths errors 1 % paths errors 2 % paths errors 3 % collections errors +% collections errors 2