diff options
author | Mark Hatle <mark.hatle@windriver.com> | 2015-09-10 17:02:10 -0500 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-09-18 09:04:25 +0100 |
commit | 4d254e02e2867dd9a6663508c8ca9f2733af71a8 (patch) | |
tree | 49e669300ac2f06b95cade548b7ab382c21d3edf /lib | |
parent | 8d3aa2d46ebab7a59e57234f0b3f6fc3225a13e8 (diff) | |
download | openembedded-core-contrib-4d254e02e2867dd9a6663508c8ca9f2733af71a8.tar.gz |
fetch2/__init__.py: uri_replace regex handling
We should only substitute one time. If we do it without a max count, we can
end up matching over and over.
Before this change:
https://downloads.yoctoproject.org/releases/bitbake/bitbake-1.0.tar.gz
with a mirror of
https://.*/[^/]* http://AAAA/A/A/A/
would end up either recursing indefinitely or result in:
http://AAAA/A/A/A/A/A/A/A/A/A/bitbake-1.0.tar.gz
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/bb/fetch2/__init__.py | 2 | ||||
-rw-r--r-- | lib/bb/tests/fetch.py | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py index 3d53b63b3e..569007fdb8 100644 --- a/lib/bb/fetch2/__init__.py +++ b/lib/bb/fetch2/__init__.py @@ -464,7 +464,7 @@ def uri_replace(ud, uri_find, uri_replace, replacements, d): for k in replacements: uri_replace_decoded[loc] = uri_replace_decoded[loc].replace(k, replacements[k]) #bb.note("%s %s %s" % (regexp, uri_replace_decoded[loc], uri_decoded[loc])) - result_decoded[loc] = re.sub(regexp, uri_replace_decoded[loc], uri_decoded[loc]) + result_decoded[loc] = re.sub(regexp, uri_replace_decoded[loc], uri_decoded[loc], 1) if loc == 2: # Handle path manipulations basename = None diff --git a/lib/bb/tests/fetch.py b/lib/bb/tests/fetch.py index 1e61f3a116..84862247e0 100644 --- a/lib/bb/tests/fetch.py +++ b/lib/bb/tests/fetch.py @@ -405,6 +405,13 @@ class MirrorUriTest(FetcherTest): 'http://otherdownloads.yoctoproject.org/downloads/bitbake-1.0.tar.gz', 'http://downloads2.yoctoproject.org/downloads/bitbake-1.0.tar.gz']) + recmirrorvar = "https://.*/[^/]* http://AAAA/A/A/A/ \n" + + def test_recursive(self): + fetcher = bb.fetch.FetchData("https://downloads.yoctoproject.org/releases/bitbake/bitbake-1.0.tar.gz", self.d) + mirrors = bb.fetch2.mirror_from_string(self.recmirrorvar) + uris, uds = bb.fetch2.build_mirroruris(fetcher, mirrors, self.d) + self.assertEqual(uris, ['http://AAAA/A/A/A/bitbake/bitbake-1.0.tar.gz']) class FetcherLocalTest(FetcherTest): def setUp(self): |