Skip to content

Commit 78be541

Browse files
authored
fix: use cache to get additional package xml (#112)
* use cache for additional packages xml Signed-off-by: wep21 <daisuke.nishimatsu1021@gmail.com> * format Signed-off-by: wep21 <daisuke.nishimatsu1021@gmail.com> --------- Signed-off-by: wep21 <daisuke.nishimatsu1021@gmail.com>
1 parent 85b4da6 commit 78be541

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

vinca/distro.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ def __init__(
3838
self._python_version = index.distributions[distro_name]["python_version"]
3939
self.build_packages = set()
4040

41+
# simple caches to avoid repeatedly fetching/processing the same data
42+
self._additional_xml_cache = {}
43+
self._depends_cache = {}
44+
4145
os.environ["ROS_VERSION"] = "1" if self.check_ros1() else "2"
4246

4347
@property
@@ -50,6 +54,10 @@ def add_packages(self, packages):
5054
def get_depends(self, pkg, ignore_pkgs=None):
5155
dependencies = set()
5256

57+
cache_key = (pkg, tuple(sorted(ignore_pkgs)) if ignore_pkgs else None)
58+
if cache_key in self._depends_cache:
59+
return set(self._depends_cache[cache_key])
60+
5361
if not self.check_package(pkg):
5462
print(f"{pkg} not in available packages anymore")
5563
return dependencies
@@ -89,6 +97,7 @@ def get_depends(self, pkg, ignore_pkgs=None):
8997
if ignore_pkgs and dep in ignore_pkgs:
9098
continue
9199
dependencies |= self.get_depends(dep, ignore_pkgs=ignore_pkgs)
100+
self._depends_cache[cache_key] = set(dependencies)
92101
return dependencies
93102

94103
# If the package is from upstream rosdistro, use the walker to get dependencies
@@ -106,6 +115,7 @@ def get_depends(self, pkg, ignore_pkgs=None):
106115
ros_packages_only=True,
107116
ignore_pkgs=ignore_pkgs,
108117
)
118+
self._depends_cache[cache_key] = set(dependencies)
109119
return dependencies
110120

111121
def get_released_repo(self, pkg_name):
@@ -195,8 +205,13 @@ def get_package_xml_for_additional_package(self, pkg_info):
195205
if additional_folder != "":
196206
additional_folder = additional_folder + "/"
197207
raw_url = f"https://raw.githubusercontent.com/{owner_repo}/{ref}/{additional_folder}{xml_name}"
208+
if raw_url in self._additional_xml_cache:
209+
return self._additional_xml_cache[raw_url]
210+
198211
try:
199212
with urllib.request.urlopen(raw_url) as resp:
200-
return resp.read().decode("utf-8")
213+
xml_content = resp.read().decode("utf-8")
214+
self._additional_xml_cache[raw_url] = xml_content
215+
return xml_content
201216
except Exception as e:
202217
raise RuntimeError(f"Failed to fetch package.xml from {raw_url}: {e}")

0 commit comments

Comments
 (0)