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" |
