Exemple #1
0
def test_get_installed(isolated_pio_core, tmpdir_factory):
    storage_dir = tmpdir_factory.mktemp("storage")
    pm = ToolPackageManager(str(storage_dir))

    # VCS package
    (storage_dir.join("pkg-vcs").mkdir().join(".git").mkdir().join(
        ".piopm").write("""
{
  "name": "pkg-via-vcs",
  "spec": {
    "id": null,
    "name": "pkg-via-vcs",
    "owner": null,
    "requirements": null,
    "url": "git+https://github.com/username/repo.git"
  },
  "type": "tool",
  "version": "0.0.0+sha.1ea4d5e"
}
"""))

    # package without metadata file
    (storage_dir.join("[email protected]").mkdir().join("package.json").write(
        '{"name": "foo", "version": "3.4.5"}'))

    # package with metadata file
    foo_dir = storage_dir.join("foo").mkdir()
    foo_dir.join("package.json").write('{"name": "foo", "version": "3.6.0"}')
    foo_dir.join(".piopm").write("""
{
  "name": "foo",
  "spec": {
    "name": "foo",
    "owner": null,
    "requirements": "^3"
  },
  "type": "tool",
  "version": "3.6.0"
}
""")

    # test "system"
    storage_dir.join("pkg-incompatible-system").mkdir(
    ).join("package.json").write(
        '{"name": "check-system", "version": "4.0.0", "system": ["unknown"]}')
    storage_dir.join("pkg-compatible-system").mkdir().join(
        "package.json").write(
            '{"name": "check-system", "version": "3.0.0", "system": "%s"}' %
            util.get_systype())

    # invalid package
    storage_dir.join("invalid-package").mkdir().join("library.json").write(
        '{"name": "SomeLib", "version": "4.0.0"}')

    installed = pm.get_installed()
    assert len(installed) == 4
    assert set(["pkg-via-vcs", "foo",
                "check-system"]) == set(p.metadata.name for p in installed)
    assert str(pm.get_package("foo").metadata.version) == "3.6.0"
    assert str(pm.get_package("check-system").metadata.version) == "3.0.0"
Exemple #2
0
def remove_unnecessary_platform_packages(dry_run=False):
    candidates = []
    required = set()
    core_packages = get_installed_core_packages()
    for platform in PlatformPackageManager().get_installed():
        p = PlatformFactory.new(platform)
        for pkg in p.get_installed_packages(with_optional=True):
            required.add(pkg)

    pm = ToolPackageManager()
    for pkg in pm.get_installed():
        skip_conds = [
            pkg.metadata.spec.url,
            os.path.isfile(os.path.join(pkg.path, ".piokeep")),
            pkg in required,
            pkg in core_packages,
        ]
        if not any(skip_conds):
            candidates.append(pkg)

    if dry_run:
        return candidates

    for pkg in candidates:
        pm.uninstall(pkg)

    return candidates
Exemple #3
0
def remove_unnecessary_core_packages(dry_run=False):
    candidates = []
    pm = ToolPackageManager()
    best_pkg_versions = {}

    for name, requirements in __core_packages__.items():
        spec = PackageSpec(owner="platformio", name=name, requirements=requirements)
        pkg = pm.get_package(spec)
        if not pkg:
            continue
        best_pkg_versions[pkg.metadata.name] = pkg.metadata.version

    for pkg in pm.get_installed():
        skip_conds = [
            os.path.isfile(os.path.join(pkg.path, ".piokeep")),
            pkg.metadata.spec.owner != "platformio",
            pkg.metadata.name not in best_pkg_versions,
            pkg.metadata.name in best_pkg_versions
            and pkg.metadata.version == best_pkg_versions[pkg.metadata.name],
        ]
        if not any(skip_conds):
            candidates.append(pkg)

    if dry_run:
        return candidates

    for pkg in candidates:
        pm.uninstall(pkg)

    return candidates
    def cleanup_packages(self, names):
        self.memcache_reset()
        deppkgs = {}
        for platform in PlatformPackageManager().get_installed():
            p = PlatformFactory.new(platform)
            for pkg in p.get_installed_packages():
                if pkg.metadata.name not in deppkgs:
                    deppkgs[pkg.metadata.name] = set()
                deppkgs[pkg.metadata.name].add(pkg.metadata.version)

        pm = ToolPackageManager()
        for pkg in pm.get_installed():
            if pkg.metadata.name not in names:
                continue
            if (
                pkg.metadata.name not in deppkgs
                or pkg.metadata.version not in deppkgs[pkg.metadata.name]
            ):
                try:
                    pm.uninstall(pkg.metadata.spec)
                except UnknownPackageError:
                    pass

        self.memcache_reset()
        return True
 def _update_pkg_metadata(_):
     pm = ToolPackageManager()
     for pkg in pm.get_installed():
         if not pkg.metadata or pkg.metadata.spec.external or pkg.metadata.spec.id:
             continue
         result = pm.search_registry_packages(PackageSpec(name=pkg.metadata.name))
         if len(result) != 1:
             continue
         result = result[0]
         pkg.metadata.spec = PackageSpec(
             id=result["id"],
             owner=result["owner"]["username"],
             name=result["name"],
         )
         pkg.dump_meta()
     return True
Exemple #6
0
def _remove_unnecessary_packages():
    pm = ToolPackageManager()
    best_pkg_versions = {}
    for name, requirements in __core_packages__.items():
        spec = PackageSpec(owner="platformio",
                           name=name,
                           requirements=requirements)
        pkg = pm.get_package(spec)
        if not pkg:
            continue
        best_pkg_versions[pkg.metadata.name] = pkg.metadata.version
    for pkg in pm.get_installed():
        if pkg.metadata.name not in best_pkg_versions:
            continue
        if pkg.metadata.version != best_pkg_versions[pkg.metadata.name]:
            pm.uninstall(pkg)