mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 15:27:13 +03:00
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.
This commit is contained in:
parent
568a1350a5
commit
a626e66806
@ -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 @@ class hgwebdir(object):
|
||||
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
|
||||
|
@ -51,6 +51,13 @@ echo % should succeed
|
||||
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 @@ echo % collections: should succeed
|
||||
"$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 @@ echo % paths errors 3
|
||||
cat error-paths-3.log
|
||||
echo % collections errors
|
||||
cat error-collections.log
|
||||
echo % collections errors 2
|
||||
cat error-collections-2.log
|
||||
|
@ -25,6 +25,12 @@ b
|
||||
|
||||
|
||||
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 @@ d
|
||||
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 @@ b
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user