diff options
-rw-r--r-- | bitbake/lib/bb/fetch2/crate.py | 9 | ||||
-rw-r--r-- | bitbake/lib/bb/tests/fetch.py | 24 |
2 files changed, 30 insertions, 3 deletions
diff --git a/bitbake/lib/bb/fetch2/crate.py b/bitbake/lib/bb/fetch2/crate.py index f091200dd9..2889e39c73 100644 --- a/bitbake/lib/bb/fetch2/crate.py +++ b/bitbake/lib/bb/fetch2/crate.py | |||
@@ -56,8 +56,10 @@ class Crate(Wget): | |||
56 | if len(parts) < 5: | 56 | if len(parts) < 5: |
57 | raise bb.fetch2.ParameterError("Invalid URL: Must be crate://HOST/NAME/VERSION", ud.url) | 57 | raise bb.fetch2.ParameterError("Invalid URL: Must be crate://HOST/NAME/VERSION", ud.url) |
58 | 58 | ||
59 | # last field is version | 59 | # version is expected to be the last token |
60 | version = parts[len(parts) - 1] | 60 | # but ignore possible url parameters which will be used |
61 | # by the top fetcher class | ||
62 | version, _, _ = parts[len(parts) -1].partition(";") | ||
61 | # second to last field is name | 63 | # second to last field is name |
62 | name = parts[len(parts) - 2] | 64 | name = parts[len(parts) - 2] |
63 | # host (this is to allow custom crate registries to be specified | 65 | # host (this is to allow custom crate registries to be specified |
@@ -69,7 +71,8 @@ class Crate(Wget): | |||
69 | 71 | ||
70 | ud.url = "https://%s/%s/%s/download" % (host, name, version) | 72 | ud.url = "https://%s/%s/%s/download" % (host, name, version) |
71 | ud.parm['downloadfilename'] = "%s-%s.crate" % (name, version) | 73 | ud.parm['downloadfilename'] = "%s-%s.crate" % (name, version) |
72 | ud.parm['name'] = name | 74 | if 'name' not in ud.parm: |
75 | ud.parm['name'] = name | ||
73 | 76 | ||
74 | logger.debug2("Fetching %s to %s" % (ud.url, ud.parm['downloadfilename'])) | 77 | logger.debug2("Fetching %s to %s" % (ud.url, ud.parm['downloadfilename'])) |
75 | 78 | ||
diff --git a/bitbake/lib/bb/tests/fetch.py b/bitbake/lib/bb/tests/fetch.py index 73eefc5938..1533d52b1e 100644 --- a/bitbake/lib/bb/tests/fetch.py +++ b/bitbake/lib/bb/tests/fetch.py | |||
@@ -2385,6 +2385,30 @@ class CrateTest(FetcherTest): | |||
2385 | self.assertTrue(os.path.exists(self.tempdir + "/cargo_home/bitbake/glob-0.2.11/src/lib.rs")) | 2385 | self.assertTrue(os.path.exists(self.tempdir + "/cargo_home/bitbake/glob-0.2.11/src/lib.rs")) |
2386 | 2386 | ||
2387 | @skipIfNoNetwork() | 2387 | @skipIfNoNetwork() |
2388 | def test_crate_url_params(self): | ||
2389 | |||
2390 | uri = "crate://crates.io/aho-corasick/0.7.20;name=aho-corasick-renamed" | ||
2391 | self.d.setVar('SRC_URI', uri) | ||
2392 | |||
2393 | uris = self.d.getVar('SRC_URI').split() | ||
2394 | d = self.d | ||
2395 | |||
2396 | fetcher = bb.fetch2.Fetch(uris, self.d) | ||
2397 | ud = fetcher.ud[fetcher.urls[0]] | ||
2398 | |||
2399 | self.assertIn("name", ud.parm) | ||
2400 | self.assertEqual(ud.parm["name"], "aho-corasick-renamed") | ||
2401 | self.assertIn("downloadfilename", ud.parm) | ||
2402 | self.assertEqual(ud.parm["downloadfilename"], "aho-corasick-0.7.20.crate") | ||
2403 | |||
2404 | fetcher.download() | ||
2405 | fetcher.unpack(self.tempdir) | ||
2406 | self.assertEqual(sorted(os.listdir(self.tempdir)), ['cargo_home', 'download' , 'unpacked']) | ||
2407 | self.assertEqual(sorted(os.listdir(self.tempdir + "/download")), ['aho-corasick-0.7.20.crate', 'aho-corasick-0.7.20.crate.done']) | ||
2408 | self.assertTrue(os.path.exists(self.tempdir + "/cargo_home/bitbake/aho-corasick-0.7.20/.cargo-checksum.json")) | ||
2409 | self.assertTrue(os.path.exists(self.tempdir + "/cargo_home/bitbake/aho-corasick-0.7.20/src/lib.rs")) | ||
2410 | |||
2411 | @skipIfNoNetwork() | ||
2388 | def test_crate_url_multi(self): | 2412 | def test_crate_url_multi(self): |
2389 | 2413 | ||
2390 | uri = "crate://crates.io/glob/0.2.11 crate://crates.io/time/0.1.35" | 2414 | uri = "crate://crates.io/glob/0.2.11 crate://crates.io/time/0.1.35" |