示例#1
0
文件: core.py 项目: lubosz/rosstacks
    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)
示例#2
0
文件: core.py 项目: lubosz/rosstacks
    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