def _load_for_package(self, package, ros_package_proxy): """ Load into local structures the information for this specific package Called in constructor. """ try: rosdep_dependent_packages = ros_package_proxy.depends([package])[package] except KeyError as ex: print("Depends Failed on package", ex) print(" The errors was in ", ros_package_proxy.depends([package])) rosdep_dependent_packages = [] rosdep_dependent_packages.append(package) paths = set() rospack = rospkg.RosPack() rosstack = rospkg.RosStack() for p in rosdep_dependent_packages: stack = None try: stack = rospack.stack_of(p) except rospkg.ResourceNotFound as ex: print("Failed to find stack for package [%s]" % p, file=sys.stderr) if stack: try: paths.add(os.path.join(rosstack.get_path(stack), "rosdep.yaml")) if "ROSDEP_DEBUG" in os.environ: print("loading rosdeps from", os.path.join(rosstack.get_path(stack), "rosdep.yaml")) except AttributeError as ex: print("Stack [%s] could not be found" % (stack)) for s in self.yaml_cache.get_rosstack_depends(stack): try: paths.add(os.path.join(rosstack.get_path(s), "rosdep.yaml")) except AttributeError as ex: print("Stack [%s] dependency of [%s] could not be found" % (s, stack)) else: try: paths.add(os.path.join(rospack.get_path(p), "rosdep.yaml")) if "ROSDEP_DEBUG" in os.environ: print( "Package fallback, no parent stack found for package %s: loading rosdeps from" % p, os.path.join(rospack.get_path(p), "rosdep.yaml"), ) except rospkg.ResourceNotFound as ex: print("Failed to load rosdep.yaml for package [%s]:%s" % (p, ex), file=sys.stderr) for path in paths: yaml_in = self.parse_yaml(path) self._insert_map(yaml_in, path) if "ROSDEP_DEBUG" in os.environ: print("rosdep loading from file: %s got" % path, yaml_in) # Override with ros_home/rosdep.yaml if present ros_home = rospkg.get_ros_home() path = os.path.join(ros_home, "rosdep.yaml") self._insert_map(self.parse_yaml(path), path, override=True)
def where_defined(self, rosdeps): output = "" locations = {} for r in rosdeps: locations[r] = set() rospack = rospkg.RosPack() path = os.path.join(rospkg.get_ros_home(), "rosdep.yaml") rosdep_dict = self.yc.get_specific_rosdeps(path) for r in rosdeps: if r in rosdep_dict: locations[r].add("Override:" + path) for p in rospack.list(): path = os.path.join(rospack.get_path(p), "rosdep.yaml") rosdep_dict = self.yc.get_specific_rosdeps(path) for r in rosdeps: if r in rosdep_dict: addendum = "" if rospack.stack_of(p): addendum = "<<Unused due to package '%s' being in a stack.]]" % p locations[r].add(">>" + path + addendum) rosstack = rospkg.RosStack() for s in rosstack.list(): path = os.path.join(rosstack.get_path(s), "rosdep.yaml") rosdep_dict = self.yc.get_specific_rosdeps(path) for r in rosdeps: if r in rosdep_dict: locations[r].add(path) for rd in locations: output += "%s defined in %s" % (rd, locations[rd]) return output