From 4ab3e05761eb6e2bfa178d98076f16e053429d08 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20Elsd=C3=B6rfer?= <michael@elsdoerfer.com>
Date: Mon, 16 Dec 2013 00:00:21 +0100
Subject: [PATCH 09/14] Fix cssrewrite filter dealing with hostnames.
(cherry picked from commit 7d76ec6f729e86d2ad71e1b8e0b70a72a66e8621)
diff --git a/src/webassets/filter/cssrewrite/__init__.py b/src/webassets/filter/cssrewrite/__init__.py
index e7b6416..471a4d3 100644
--- a/src/webassets/filter/cssrewrite/__init__.py
+++ b/src/webassets/filter/cssrewrite/__init__.py
@@ -92,9 +92,14 @@ class CSSRewrite(CSSUrlRewriter):
# If path is an absolute one, keep it
parsed = urlparse.urlparse(url)
if not parsed.scheme and not parsed.path.startswith('/'):
+ abs_source_url = urlparse.urljoin(self.source_url, url)
+
+ # relpath() will not detect this case
+ if urlparse.urlparse(abs_source_url).scheme:
+ return abs_source_url
+
# rewritten url: relative path from new location (output)
# to location of referenced file (source + current url)
- url = urlpath.relpath(self.output_url,
- urlparse.urljoin(self.source_url, url))
+ url = urlpath.relpath(self.output_url, abs_source_url)
return url
diff --git a/tests/test_filters.py b/tests/test_filters.py
index dd09d0c..4575616 100644
--- a/tests/test_filters.py
+++ b/tests/test_filters.py
@@ -705,6 +705,19 @@ class TestCssRewrite(TempEnvironmentHelper):
self.mkbundle('in.css', filters=cssrewrite, output='out.css').build()
assert self.get('out.css') == '''h1 { background: url(/new/sub/icon.png) }'''
+ def test_hostnames(self):
+ """[Regression] Properly deal with full urls.
+ """
+ self.env.append_path(self.path('g'), 'http://input.com/')
+ self.env.url = 'http://output.com/'
+
+ self.create_directories('g')
+ self.create_files({'g/in.css': '''h1 { background: url(sub/icon.png) }'''})
+
+ self.mkbundle('in.css', filters='cssrewrite', output='out.css').build()
+ self.p('out.css')
+ assert self.get('out.css') == '''h1 { background: url(http://input.com/sub/icon.png) }'''
+
def test_replace_with_cache(self):
"""[Regression] Test replace mode while cache is active.
--
1.9.3