diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-06-28 11:34:20 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-06-28 16:32:57 +0100 |
commit | 18e3b500b959b0e6e6d44bff28f3f897c6c95ca5 (patch) | |
tree | effb8c66bfa1df039b95aa186015886c41524e06 /bitbake/lib | |
parent | c525c131a65b6e8d2e47f4fe6e6e25e0a5dbc2eb (diff) | |
download | poky-18e3b500b959b0e6e6d44bff28f3f897c6c95ca5.tar.gz |
bitbake: fetch2: Revert the regexp removal for the type field and instead anchor regexp
People are using regexps in the url type field so we need to preserve
this bitbake behaviour. To address the issues with https:// urls mapping
badly to file:// urls we anchor the regexp if its not already anchored.
There should be no expressions in the wild which would break with this
change.
(Bitbake rev: ce0579dc256251e523c6330641f98b9f5a0e5761)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/fetch2/__init__.py | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index a38cb8ffbe..52e12a0a9b 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/lib/bb/fetch2/__init__.py | |||
@@ -193,6 +193,11 @@ def uri_replace(ud, uri_find, uri_replace, replacements, d): | |||
193 | result_decoded = ['', '', '', '', '', {}] | 193 | result_decoded = ['', '', '', '', '', {}] |
194 | for loc, i in enumerate(uri_find_decoded): | 194 | for loc, i in enumerate(uri_find_decoded): |
195 | result_decoded[loc] = uri_decoded[loc] | 195 | result_decoded[loc] = uri_decoded[loc] |
196 | regexp = i | ||
197 | if loc == 0 and regexp and not regexp.endswith("$"): | ||
198 | # Leaving the type unanchored can mean "https" matching "file" can become "files" | ||
199 | # which is clearly undesirable. | ||
200 | regexp += "$" | ||
196 | if loc == 5: | 201 | if loc == 5: |
197 | # Handle URL parameters | 202 | # Handle URL parameters |
198 | if i: | 203 | if i: |
@@ -203,20 +208,14 @@ def uri_replace(ud, uri_find, uri_replace, replacements, d): | |||
203 | # Overwrite any specified replacement parameters | 208 | # Overwrite any specified replacement parameters |
204 | for k in uri_replace_decoded[loc]: | 209 | for k in uri_replace_decoded[loc]: |
205 | result_decoded[loc][k] = uri_replace_decoded[loc][k] | 210 | result_decoded[loc][k] = uri_replace_decoded[loc][k] |
206 | elif loc == 0: | 211 | elif (re.match(regexp, uri_decoded[loc])): |
207 | # Principle of least surprise. We could end up with https matching against http and | ||
208 | # generating "files://" urls if we use the regexp engine below. | ||
209 | if i != uri_decoded[loc]: | ||
210 | return None | ||
211 | result_decoded[loc] = uri_replace_decoded[loc] | ||
212 | elif (re.match(i, uri_decoded[loc])): | ||
213 | if not uri_replace_decoded[loc]: | 212 | if not uri_replace_decoded[loc]: |
214 | result_decoded[loc] = "" | 213 | result_decoded[loc] = "" |
215 | else: | 214 | else: |
216 | for k in replacements: | 215 | for k in replacements: |
217 | uri_replace_decoded[loc] = uri_replace_decoded[loc].replace(k, replacements[k]) | 216 | uri_replace_decoded[loc] = uri_replace_decoded[loc].replace(k, replacements[k]) |
218 | #bb.note("%s %s %s" % (i, uri_replace_decoded[loc], uri_decoded[loc])) | 217 | #bb.note("%s %s %s" % (regexp, uri_replace_decoded[loc], uri_decoded[loc])) |
219 | result_decoded[loc] = re.sub(i, uri_replace_decoded[loc], uri_decoded[loc]) | 218 | result_decoded[loc] = re.sub(regexp, uri_replace_decoded[loc], uri_decoded[loc]) |
220 | if loc == 2: | 219 | if loc == 2: |
221 | # Handle path manipulations | 220 | # Handle path manipulations |
222 | basename = None | 221 | basename = None |