예제 #1
0
def test_get_package():
    tests = [
        [("unknown", ), None],
        [("1", ), None],
        [("id=1", "shasum"),
         dict(id=1, name="name_1", version="shasum")],
        [("id=1", "*"),
         dict(id=1, name="name_1", version="2.1.0")],
        [("id=1", "^1"),
         dict(id=1, name="name_1", version="1.2")],
        [("id=1", "^1"),
         dict(id=1, name="name_1", version="1.2")],
        [("name_1", "<2"),
         dict(id=1, name="name_1", version="1.2")],
        [("name_1", ">2"), None],
        [("name_1", "2-0-0"), None],
        [("name_2", ), dict(name="name_2", version="4.0.0")],
        [("url_has_higher_priority", None, "git+https://github.com"),
         dict(name="name_2",
              version="2.0.0",
              __src_url="git+https://github.com")],
        [("name_2", None, "git+https://github.com"),
         dict(name="name_2",
              version="2.0.0",
              __src_url="git+https://github.com")],
    ]

    pm = PackageManager(join(get_project_core_dir(), "packages"))
    for test in tests:
        manifest = pm.get_package(*test[0])
        if test[1] is None:
            assert manifest is None, test
            continue
        for key, value in test[1].items():
            assert manifest[key] == value, test
def test_install_packages(isolated_pio_home, tmpdir):
    packages = [
        dict(id=1, name="name_1", version="shasum"),
        dict(id=1, name="name_1", version="2.0.0"),
        dict(id=1, name="name_1", version="2.1.0"),
        dict(id=1, name="name_1", version="1.2.0"),
        dict(id=1, name="name_1", version="1.0.0"),
        dict(name="name_2", version="1.0.0"),
        dict(name="name_2", version="2.0.0",
             __src_url="git+https://github.com"),
        dict(name="name_2", version="3.0.0",
             __src_url="git+https://github2.com"),
        dict(name="name_2", version="4.0.0",
             __src_url="git+https://github2.com")
    ]

    pm = PackageManager(join(util.get_home_dir(), "packages"))
    for package in packages:
        tmp_dir = tmpdir.mkdir("tmp-package")
        tmp_dir.join("package.json").write(json.dumps(package))
        pm._install_from_url(package['name'], "file://%s" % str(tmp_dir))
        tmp_dir.remove(rec=1)

    assert len(pm.get_installed()) == len(packages) - 1

    pkg_dirnames = [
        'name_1_ID1', '[email protected]', '[email protected]',
        '[email protected]', 'name_1_ID1@shasum', 'name_2',
        'name_2@src-177cbce1f0705580d17790fda1cc2ef5',
        'name_2@src-f863b537ab00f4c7b5011fc44b120e1f'
    ]
    assert set([p.basename for p in isolated_pio_home.join(
        "packages").listdir()]) == set(pkg_dirnames)
예제 #3
0
    def cleanup_packages(self, names):
        self.cache_reset()
        deppkgs = {}
        for manifest in PlatformManager().get_installed():
            p = PlatformFactory.newPlatform(manifest["__pkg_dir"])
            for pkgname, pkgmanifest in p.get_installed_packages().items():
                if pkgname not in deppkgs:
                    deppkgs[pkgname] = set()
                deppkgs[pkgname].add(pkgmanifest["version"])

        pm = PackageManager(self.config.get_optional_dir("packages"))
        for manifest in pm.get_installed():
            if manifest["name"] not in names:
                continue
            if (
                manifest["name"] not in deppkgs
                or manifest["version"] not in deppkgs[manifest["name"]]
            ):
                try:
                    pm.uninstall(manifest["__pkg_dir"], after_update=True)
                except exception.UnknownPackage:
                    pass

        self.cache_reset()
        return True
예제 #4
0
    def __init__(self, manifest_path):
        self._BOARDS_CACHE = {}
        self.manifest_path = manifest_path
        self._manifest = util.load_json(manifest_path)

        self.pm = PackageManager(join(util.get_home_dir(), "packages"),
                                 self._manifest.get("packageRepositories"))

        self.silent = False
        self.verbose = False
예제 #5
0
    def __init__(self, manifest_path):
        self.manifest_path = manifest_path
        self.silent = False
        self.verbose = False

        self._BOARDS_CACHE = {}
        self._manifest = fs.load_json(manifest_path)
        self._custom_packages = None

        self.pm = PackageManager(get_project_packages_dir(),
                                 self.package_repositories)
예제 #6
0
    def __init__(self, manifest_path):
        self.manifest_path = manifest_path
        self.silent = False
        self.verbose = False

        self._BOARDS_CACHE = {}
        self._manifest = fs.load_json(manifest_path)
        self._custom_packages = None

        self.config = ProjectConfig.get_instance()
        self.pm = PackageManager(self.config.get_optional_dir("packages"),
                                 self.package_repositories)
예제 #7
0
    def __init__(self, manifest_path):
        self._BOARDS_CACHE = {}
        self.manifest_path = manifest_path
        self._manifest = util.load_json(manifest_path)

        self.pm = PackageManager(join(util.get_home_dir(), "packages"),
                                 self._manifest.get("packageRepositories"))

        self.silent = False
        self.verbose = False

        if self.engines and "platformio" in self.engines:
            if self.PIO_VERSION not in semantic_version.Spec(
                    self.engines['platformio']):
                raise exception.IncompatiblePlatform(self.name,
                                                     str(self.PIO_VERSION))
예제 #8
0
    def cleanup_packages(self, names):
        self.cache_reset()
        deppkgs = {}
        for manifest in PlatformManager().get_installed():
            p = PlatformFactory.newPlatform(manifest['__pkg_dir'])
            for pkgname, pkgmanifest in p.get_installed_packages().items():
                if pkgname not in deppkgs:
                    deppkgs[pkgname] = set()
                deppkgs[pkgname].add(pkgmanifest['version'])

        pm = PackageManager(join(util.get_home_dir(), "packages"))
        for manifest in pm.get_installed():
            if manifest['name'] not in names:
                continue
            if (manifest['name'] not in deppkgs
                    or manifest['version'] not in deppkgs[manifest['name']]):
                pm.uninstall(manifest['__pkg_dir'], trigger_event=False)

        self.cache_reset()
        return True
예제 #9
0
def parse_pkg_uri(spec):
    if PackageManager.__name__ == 'PackageSpec':
        return PackageManager(spec).name
    else:
        name, _, _ = PackageManager.parse_pkg_uri(spec)
        return name