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