def resolve_dependencies(root_name):
    """Given the name of a dependency, return all dependencies and packages
    that require that dependency, directly or indirectly.
    """
    manager = PackageManager()

    all_packages = manager.list_packages()
    all_dependencies = manager.list_dependencies()

    recursive_dependencies = set()
    dependent_packages = set()

    dependency_relationships = {
        name: manager.get_dependencies(name)
        for name in all_packages + all_dependencies
    }

    def rec(name):
        if name in recursive_dependencies:
            return

        recursive_dependencies.add(name)

        for dep_name in all_dependencies:
            if name in dependency_relationships[dep_name]:
                rec(dep_name)

        for pkg_name in all_packages:
            if name in dependency_relationships[pkg_name]:
                dependent_packages.add(pkg_name)

    rec(root_name)
    return (recursive_dependencies, dependent_packages)
    def resolve_parents(root_name):
        """Given the name of a dependency, return all dependencies and packages
        that require that dependency, directly or indirectly.
        """
        manager = PackageManager()
        everything = manager.list_packages() + manager.list_dependencies()

        recursive_dependencies = set()

        dependency_relationships = {
            name: manager.get_dependencies(name)
            for name in everything
        }

        def rec(name):
            if name in recursive_dependencies:
                return

            recursive_dependencies.add(name)

            for pkg_name in everything:
                if name in dependency_relationships[pkg_name]:
                    rec(pkg_name)

        rec(root_name)

        recursive_dependencies.remove(root_name)

        return recursive_dependencies
Beispiel #3
0
def resolve_dependencies(root_name):
    """Given the name of a dependency, return all dependencies and packages
    that require that dependency, directly or indirectly.
    """
    manager = PackageManager()

    all_packages = manager.list_packages()
    all_dependencies = manager.list_dependencies()

    recursive_dependencies = set()
    dependent_packages = set()

    dependency_relationships = {
        name: manager.get_dependencies(name)
        for name in all_packages + all_dependencies
    }

    def rec(name):
        if name in recursive_dependencies:
            return

        recursive_dependencies.add(name)

        for dep_name in all_dependencies:
            if name in dependency_relationships[dep_name]:
                rec(dep_name)

        for pkg_name in all_packages:
            if name in dependency_relationships[pkg_name]:
                dependent_packages.add(pkg_name)

    rec(root_name)
    return (recursive_dependencies, dependent_packages)
Beispiel #4
0
def reload_dependency(dependency_name, dummy=True, verbose=True):
    """
    Reload a Package Control dependency.

    Package Control dependencies aren't regular packages, so we don't want to
    call `sublime_plugin.unload_module` or `sublime_plugin.reload_plugin`.
    Instead, we manually unload all of the modules in the dependency and then
    `reload_package` any packages that use that dependency. (We have to manually
    unload the dependency's modules because calling `reload_package` on a
    dependent module will not unload the dependency.)
    """
    for name in get_package_modules(dependency_name):
        del sys.modules[name]

    manager = PackageManager()
    for package in manager.list_packages():
        if dependency_name in manager.get_dependencies(package):
            reload_package(package, dummy=False, verbose=verbose)

    if dummy:
        load_dummy(verbose)
def reload_dependency(dependency_name, dummy=True, verbose=True):
    """
    Package Control dependencies aren't regular packages, so we don't want to
    call `sublime_plugin.unload_module` or `sublime_plugin.reload_plugin`.
    Instead, we manually unload all of the modules in the dependency and then
    `reload_package` any packages that use that dependency. (We have to manually
    unload the dependency's modules because calling `reload_package` on a
    dependent module will not unload the dependency.)
    """
    dependency_base = os.path.join(sublime.packages_path(),
                                   dependency_name) + os.sep

    for module in list(sys.modules.values()):
        if getattr(module, '__file__', '').startswith(dependency_base):
            del sys.modules[module.__name__]

    manager = PackageManager()
    for package in manager.list_packages():
        if dependency_name in manager.get_dependencies(package):
            reload_package(package, dummy=False, verbose=verbose)

    if dummy:
        load_dummy(verbose)