Blob Blame History Raw
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