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