Skip to content

Commit 912acd8

Browse files
committed
fix
1 parent 92ed3e8 commit 912acd8

4 files changed

Lines changed: 47 additions & 59 deletions

File tree

minecode_pipelines/pipelines/mine_meson.py

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
# ScanCode.io is a free software code scanning tool from nexB Inc. and others.
2121
# Visit https://github.com/aboutcode-org/scancode.io for support and download.
2222

23-
import json
24-
from pathlib import Path
23+
import requests
2524

2625
from minecode_pipelines.pipes import meson
2726
from minecode_pipelines.pipelines import MineCodeBasePipeline
@@ -31,38 +30,34 @@
3130
class MineMeson(MineCodeBasePipeline):
3231
"""Pipeline to mine Meson WrapDB packages and publish them to FederatedCode repo."""
3332

34-
MESON_WRAPDB_REPO = "https://github.com/mesonbuild/wrapdb"
33+
MESON_WRAPDB_RELEASES_URL = (
34+
"https://raw.githubusercontent.com/mesonbuild/wrapdb/master/releases.json"
35+
)
3536

3637
@classmethod
3738
def steps(cls):
3839
return (
3940
cls.check_federatedcode_eligibility,
4041
cls.create_federatedcode_working_dir,
41-
cls.clone_wrapdb_index,
42+
cls.fetch_wrapdb_releases,
4243
cls.fetch_federation_config,
4344
cls.mine_and_publish_packageurls,
4445
cls.delete_working_dir,
4546
)
4647

47-
def clone_wrapdb_index(self):
48-
"""Clone the Meson WrapDB repository."""
49-
self.wrapdb_repo = federatedcode.clone_repository(
50-
repo_url=self.MESON_WRAPDB_REPO,
51-
clone_path=self.working_path / "wrapdb",
52-
logger=self.log,
53-
)
48+
def fetch_wrapdb_releases(self):
49+
"""Fetch the Meson WrapDB releases.json index."""
50+
try:
51+
response = requests.get(self.MESON_WRAPDB_RELEASES_URL, timeout=30)
52+
response.raise_for_status()
53+
self.releases = response.json()
54+
except Exception as e:
55+
self.log(f"Failed to fetch releases.json: {e}")
56+
self.releases = {}
5457

5558
def packages_count(self):
56-
releases_path = Path(self.wrapdb_repo.working_dir) / "releases.json"
57-
if not releases_path.exists():
58-
return 0
59-
with open(releases_path, encoding="utf-8") as f:
60-
releases = json.load(f)
61-
return len(releases)
59+
return len(self.releases) if hasattr(self, "releases") and self.releases else 0
6260

6361
def mine_packageurls(self):
6462
"""Yield PackageURLs from Meson WrapDB releases.json."""
65-
return meson.mine_meson_packageurls(
66-
wrapdb_repo=self.wrapdb_repo,
67-
logger=self.log,
68-
)
63+
return meson.mine_meson_packageurls(releases=self.releases, logger=self.log)

minecode_pipelines/pipes/meson.py

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@
2020
# ScanCode.io is a free software code scanning tool from nexB Inc. and others.
2121
# Visit https://github.com/aboutcode-org/scancode.io for support and download.
2222

23-
import json
24-
from pathlib import Path
25-
2623
from packageurl import PackageURL
2724

2825

@@ -59,19 +56,11 @@ def get_meson_packages(package_name, package_data):
5956
return base_purl, versioned_purls
6057

6158

62-
def mine_meson_packageurls(wrapdb_repo, logger):
59+
def mine_meson_packageurls(releases, logger):
6360
"""
64-
Yield ``(base_purl, [versioned_purl_strings])`` tuples from a cloned
65-
Meson WrapDB repository by parsing its ``releases.json``.
61+
Yield ``(base_purl, [versioned_purl_strings])`` tuples from a
62+
Meson WrapDB ``releases.json`` mapping.
6663
"""
67-
releases_path = Path(wrapdb_repo.working_dir) / "releases.json"
68-
if not releases_path.exists():
69-
logger(f"releases.json not found at {releases_path}")
70-
return
71-
72-
with open(releases_path, encoding="utf-8") as f:
73-
releases = json.load(f)
74-
7564
for package_name, package_data in releases.items():
7665
if not package_data:
7766
continue

minecode_pipelines/tests/pipes/test_meson.py

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from minecode_pipelines.pipes.meson import get_meson_packages
1616

1717
DATA_DIR = Path(__file__).parent.parent / "test_data" / "meson"
18+
EXPECTED_PATH = DATA_DIR / "expected_purls.json"
1819

1920

2021
class MesonPipeTests(TestCase):
@@ -53,36 +54,22 @@ def test_get_meson_packages_no_versions_key(self):
5354
self.assertEqual(versioned_purls, [])
5455

5556
def test_get_meson_packages_from_releases_json(self):
56-
"""Test parsing packages from the test releases.json fixture."""
57+
"""Test parsing packages from the test releases.json fixture with data-driven expected output."""
5758
releases_path = DATA_DIR / "releases.json"
5859
with open(releases_path, encoding="utf-8") as f:
5960
releases = json.load(f)
6061

61-
all_results = []
62+
actual = {}
6263
for package_name, package_data in releases.items():
6364
if not package_data:
6465
continue
65-
all_results.append(
66-
get_meson_packages(
67-
package_name=package_name,
68-
package_data=package_data,
69-
)
66+
base_purl, versioned_purls = get_meson_packages(
67+
package_name=package_name,
68+
package_data=package_data,
7069
)
70+
actual[str(base_purl)] = sorted(versioned_purls)
7171

72-
self.assertEqual(len(all_results), 3) # ogg, zlib, catch2
73-
74-
# Check ogg
75-
ogg_base, ogg_purls = all_results[0]
76-
self.assertEqual(str(ogg_base), "pkg:meson/ogg")
77-
self.assertEqual(len(ogg_purls), 4)
78-
79-
# Check zlib
80-
zlib_base, zlib_purls = all_results[1]
81-
self.assertEqual(str(zlib_base), "pkg:meson/zlib")
82-
self.assertEqual(len(zlib_purls), 3)
83-
84-
# Check catch2
85-
catch2_base, catch2_purls = all_results[2]
86-
self.assertEqual(str(catch2_base), "pkg:meson/catch2")
87-
self.assertEqual(len(catch2_purls), 2)
88-
self.assertIn("pkg:meson/catch2@3.5.2-1", catch2_purls)
72+
with open(EXPECTED_PATH, encoding="utf-8") as ef:
73+
expected = json.load(ef)
74+
filtered_actual = {k: actual[k] for k in expected.keys()}
75+
self.assertEqual(filtered_actual, expected)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"pkg:meson/ogg": [
3+
"pkg:meson/ogg@1.3.5-1",
4+
"pkg:meson/ogg@1.3.5-2",
5+
"pkg:meson/ogg@1.3.5-3",
6+
"pkg:meson/ogg@1.3.6-1"
7+
],
8+
"pkg:meson/zlib": [
9+
"pkg:meson/zlib@1.2.13-1",
10+
"pkg:meson/zlib@1.2.13-2",
11+
"pkg:meson/zlib@1.3.1-1"
12+
],
13+
"pkg:meson/catch2": [
14+
"pkg:meson/catch2@3.4.0-1",
15+
"pkg:meson/catch2@3.5.2-1"
16+
]
17+
}

0 commit comments

Comments
 (0)