示例#1
0
def test_package_raise_missing_values():
    with pytest.raises(ValueError):
        Package(Path('/home'), None, 'pkg', 'url')
    with pytest.raises(ValueError):
        Package(Path('/home'), 'repo', None, 'url')
    with pytest.raises(ValueError):
        Package(Path('/home'), 'repo', 'pkg', None)
示例#2
0
def test_package_has_url_changed(git_url, package_url, expected_result):
    is_dir_local = True if git_url is None else False
    OutProces = namedtuple('OutProcess', ['stdout'])

    def _run_bash(command, **kwargs):
        if 'config' in command:
            return OutProces(git_url)
        elif 'rev-parse' in command:
            return OutProces('false') if is_dir_local else OutProces('true')

    pkg = Package(Path('/home'), 'repo', 'pkg1', package_url, 'pkg1 descr')
    with mock.patch(_MODULE_UNDER_TEST + ".run_bash") as run_mock:
        run_mock.side_effect = _run_bash
        assert pkg.has_url_changed() == expected_result
示例#3
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'
示例#4
0
    def build_package(self, repo_name: str, package_name: str,
                      packages_info: Dict[str, Dict[str, Dict[str, Any]]],
                      packages: Dict[str, Dict[str, Package]]):
        if repo_name in packages and package_name in packages[repo_name]:
            return packages[repo_name][package_name]

        package_info = dict(packages_info[repo_name][package_name])
        os_list = tuple(
            [OS.from_code(os) for os in package_info.get('os', tuple())])

        package_info['os'] = os_list
        depends = package_info.get('depends', tuple())
        if 'depends' in package_info:
            del package_info['depends']
        if repo_name not in packages:
            packages[repo_name] = {}
        packages[repo_name][package_name] = Package(
            self.pearl_home,
            **package_info,
        )
        for package_dep_full_name in depends:
            package_dep_repo_name, package_dep_name = package_dep_full_name.split(
                '/')
            self.build_package(package_dep_repo_name, package_dep_name,
                               packages_info, packages)
            package_dep = packages[package_dep_repo_name][package_dep_name]
            packages[repo_name][package_name].add_depend(package_dep)
示例#5
0
def test_package_default_values():
    pkg = Package(Path('/home'), 'repo', 'pkg', 'https://pkg.com')
    assert pkg.description == "None"
    assert pkg.homepage == "None"
    assert pkg.author == "None"
    assert pkg.license == "None"
    assert pkg.os == ()
    assert pkg.depends == ()
    assert pkg.keywords == ()
示例#6
0
def test_package():
    pkg = Package(Path('/home'), 'repo', 'pkg1', 'https://pkg1', 'pkg1 descr')
    assert pkg.name == 'pkg1'
    assert pkg.repo_name == 'repo'
    assert pkg.full_name == 'repo/pkg1'
    assert pkg.url == 'https://pkg1'
    assert pkg.description == 'pkg1 descr'
    assert pkg.dir == Path('/home/packages/repo/pkg1')
    assert pkg.vardir == Path('/home/var/repo/pkg1')
    assert not pkg.is_local()

    pkg = Package(Path('/home'), 'repo', 'pkg1', '/pkg1', 'pkg1 descr')
    assert pkg.is_local()
示例#7
0
 def infer_package(self, package_name: str) -> Package:
     """Builds a package by looking at the file structure."""
     if '/' in package_name:
         repo_name, short_package_name = package_name.split('/')
         package = Package(self.home, repo_name, short_package_name, "None")
         if package.is_installed():
             return package
     else:
         packages_path = self.home / 'packages'
         for repo_path in packages_path.iterdir():
             repo_name = repo_path.name
             package = Package(self.home, repo_name, package_name, "None")
             if package.is_installed():
                 return package
     raise PackageNotInstalledError(
         f'{package_name} package has not been installed.')