Esempio n. 1
0
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'
Esempio n. 2
0
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)
Esempio n. 3
0
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