def test_required_by(tmp_path): home_dir = create_pearl_home(tmp_path) packages_info = { "repo-test": { "pkg-test": { "repo_name": "repo-test", "name": "pkg-test", "url": "/blah", "depends": ["repo-test/pkg-test2"] }, "pkg-test2": { "repo_name": "repo-test", "name": "pkg-test2", "url": "/blah", "depends": [] } } } builder = PackageBuilder(home_dir) packages = builder.build_packages(packages_info) pearl_env = PearlEnvironment(home_dir, env_initialized=False) pearl_env._packages = packages requires = pearl_env.required_by( Package(home_dir, "repo-test", "pkg-test2", "/blah")) assert requires[0].full_name == 'repo-test/pkg-test'
def remove_packages(pearl_env: PearlEnvironment, args: Namespace): package_list = list(closure_dependency_tree(args.packages)) package_list.reverse() for package in package_list: if package not in args.packages: continue requires = [ r for r in pearl_env.required_by(package) if r.is_installed() ] remaining_requires = set(requires).difference(args.packages) if remaining_requires: raise PackageRequiredByOtherError( 'Package {} cannot be removed because is required by other packages: {}' .format(package, [str(r) for r in remaining_requires])) remove_package(pearl_env, package, args)
def info_package(pearl_env: PearlEnvironment, package: Package, args: Namespace): """ Provide info about a package. """ requires = pearl_env.required_by(package) messenger.print( dedent(""" {cyan}Name{normal}: {full_name} {cyan}Description{normal}: {description} {cyan}Homepage{normal}: {homepage} {cyan}URL{normal}: {url} {cyan}Author{normal}: {author} {cyan}License{normal}: {license} {cyan}Operating Systems{normal}: {os} {cyan}Keywords{normal}: {keywords} {cyan}Installed{normal}: {installed} {cyan}Pkg Directory{normal}: {pkg_dir} {cyan}Var Directory{normal}: {var_dir} {cyan}Depends on{normal}: {depends} {cyan}Required by{normal}: {requires} """.format( cyan=Color.CYAN, normal=Color.NORMAL, full_name=package.full_name, description=package.description, homepage=package.homepage, url=package.url, author=package.author, license=package.license, os=tuple(o.name.lower() for o in package.os), keywords=package.keywords, installed=package.is_installed(), pkg_dir=package.dir, var_dir=package.vardir, depends=tuple(d.full_name for d in package.depends), requires=tuple(r.full_name for r in requires), ))) return package, requires