mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-30 10:07:14 +02:00
Create BasePkgManager for PlatformManager and Library Manager
This commit is contained in:
@ -27,25 +27,25 @@ from platformio.unpacker import FileUnpacker
|
|||||||
from platformio.vcsclient import VCSClientFactory
|
from platformio.vcsclient import VCSClientFactory
|
||||||
|
|
||||||
|
|
||||||
class PackageManager(object):
|
class BasePkgManager(object):
|
||||||
|
|
||||||
_INSTALLED_CACHE = {}
|
_INSTALLED_CACHE = {}
|
||||||
|
|
||||||
def __init__(self, package_dir=None, repositories=None):
|
def __init__(self, package_dir, repositories=None):
|
||||||
self._INSTALLED_CACHE = {}
|
self._INSTALLED_CACHE = {}
|
||||||
self.repositories = repositories
|
self.repositories = repositories
|
||||||
self.package_dir = package_dir or join(util.get_home_dir(), "packages")
|
self.package_dir = package_dir
|
||||||
if not isdir(self.package_dir):
|
if not isdir(self.package_dir):
|
||||||
os.makedirs(self.package_dir)
|
os.makedirs(self.package_dir)
|
||||||
assert isdir(self.package_dir)
|
assert isdir(self.package_dir)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def reset_cache():
|
def reset_cache():
|
||||||
PackageManager._INSTALLED_CACHE = {}
|
BasePkgManager._INSTALLED_CACHE = {}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def manifest_name(self):
|
def manifest_name(self):
|
||||||
return "package.json"
|
raise NotImplementedError()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def download(url, dest_dir, sha1=None):
|
def download(url, dest_dir, sha1=None):
|
||||||
@ -133,8 +133,8 @@ class PackageManager(object):
|
|||||||
return best
|
return best
|
||||||
|
|
||||||
def get_installed(self):
|
def get_installed(self):
|
||||||
if self.package_dir in PackageManager._INSTALLED_CACHE:
|
if self.package_dir in BasePkgManager._INSTALLED_CACHE:
|
||||||
return PackageManager._INSTALLED_CACHE[self.package_dir]
|
return BasePkgManager._INSTALLED_CACHE[self.package_dir]
|
||||||
items = []
|
items = []
|
||||||
for p in sorted(os.listdir(self.package_dir)):
|
for p in sorted(os.listdir(self.package_dir)):
|
||||||
manifest_path = join(self.package_dir, p, self.manifest_name)
|
manifest_path = join(self.package_dir, p, self.manifest_name)
|
||||||
@ -144,7 +144,7 @@ class PackageManager(object):
|
|||||||
manifest['_manifest_path'] = manifest_path
|
manifest['_manifest_path'] = manifest_path
|
||||||
assert set(["name", "version"]) <= set(manifest.keys())
|
assert set(["name", "version"]) <= set(manifest.keys())
|
||||||
items.append(manifest)
|
items.append(manifest)
|
||||||
PackageManager._INSTALLED_CACHE[self.package_dir] = items
|
BasePkgManager._INSTALLED_CACHE[self.package_dir] = items
|
||||||
return items
|
return items
|
||||||
|
|
||||||
def is_installed(self, name, requirements=None):
|
def is_installed(self, name, requirements=None):
|
||||||
@ -183,7 +183,8 @@ class PackageManager(object):
|
|||||||
self.reset_cache()
|
self.reset_cache()
|
||||||
if trigger_event:
|
if trigger_event:
|
||||||
telemetry.on_event(
|
telemetry.on_event(
|
||||||
category="PackageManager", action="Install", label=name)
|
category=self.__class__.__name__,
|
||||||
|
action="Install", label=name)
|
||||||
|
|
||||||
return join(pkg_dir, self.manifest_name)
|
return join(pkg_dir, self.manifest_name)
|
||||||
|
|
||||||
@ -300,7 +301,8 @@ class PackageManager(object):
|
|||||||
self.reset_cache()
|
self.reset_cache()
|
||||||
if trigger_event:
|
if trigger_event:
|
||||||
telemetry.on_event(
|
telemetry.on_event(
|
||||||
category="PackageManager", action="Uninstall", label=name)
|
category=self.__class__.__name__,
|
||||||
|
action="Uninstall", label=name)
|
||||||
|
|
||||||
def update(self, name, requirements=None):
|
def update(self, name, requirements=None):
|
||||||
click.echo("Updating %s %s @ %s:" % (
|
click.echo("Updating %s %s @ %s:" % (
|
||||||
@ -310,8 +312,8 @@ class PackageManager(object):
|
|||||||
|
|
||||||
latest_version = self.get_latest_repo_version(name, requirements)
|
latest_version = self.get_latest_repo_version(name, requirements)
|
||||||
if latest_version is None:
|
if latest_version is None:
|
||||||
click.secho("Ignored! '%s' is not listed in "
|
click.secho("Ignored! '%s' is not listed in repository" % name,
|
||||||
"Package Repository" % name, fg="yellow")
|
fg="yellow")
|
||||||
return
|
return
|
||||||
|
|
||||||
current = None
|
current = None
|
||||||
@ -341,7 +343,8 @@ class PackageManager(object):
|
|||||||
self.install(name, latest_version, trigger_event=False)
|
self.install(name, latest_version, trigger_event=False)
|
||||||
|
|
||||||
telemetry.on_event(
|
telemetry.on_event(
|
||||||
category="PackageManager", action="Update", label=name)
|
category=self.__class__.__name__,
|
||||||
|
action="Update", label=name)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
@ -384,3 +387,10 @@ class PackageRepoIterator(object):
|
|||||||
return manifest[self.package]
|
return manifest[self.package]
|
||||||
else:
|
else:
|
||||||
return self.next()
|
return self.next()
|
||||||
|
|
||||||
|
|
||||||
|
class PackageManager(BasePkgManager):
|
||||||
|
|
||||||
|
@property
|
||||||
|
def manifest_name(self):
|
||||||
|
return "package.json"
|
||||||
|
@ -24,13 +24,15 @@ import click
|
|||||||
import semantic_version
|
import semantic_version
|
||||||
|
|
||||||
from platformio import exception, util
|
from platformio import exception, util
|
||||||
from platformio.managers.package import PackageManager
|
from platformio.managers.package import BasePkgManager, PackageManager
|
||||||
|
|
||||||
|
PACKAGE_DIR = join(util.get_home_dir(), "packages")
|
||||||
|
|
||||||
|
|
||||||
class PlatformManager(PackageManager):
|
class PlatformManager(BasePkgManager):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
PackageManager.__init__(
|
BasePkgManager.__init__(
|
||||||
self,
|
self,
|
||||||
join(util.get_home_dir(), "platforms"),
|
join(util.get_home_dir(), "platforms"),
|
||||||
["http://dl.platformio.org/platforms/manifest.json"]
|
["http://dl.platformio.org/platforms/manifest.json"]
|
||||||
@ -43,7 +45,7 @@ class PlatformManager(PackageManager):
|
|||||||
def install(self, # pylint: disable=too-many-arguments,arguments-differ
|
def install(self, # pylint: disable=too-many-arguments,arguments-differ
|
||||||
name, requirements=None, with_packages=None,
|
name, requirements=None, with_packages=None,
|
||||||
without_packages=None, skip_default_packages=False):
|
without_packages=None, skip_default_packages=False):
|
||||||
manifest_path = PackageManager.install(self, name, requirements)
|
manifest_path = BasePkgManager.install(self, name, requirements)
|
||||||
p = PlatformFactory.newPlatform(manifest_path, requirements)
|
p = PlatformFactory.newPlatform(manifest_path, requirements)
|
||||||
p.install_packages(
|
p.install_packages(
|
||||||
with_packages, without_packages, skip_default_packages)
|
with_packages, without_packages, skip_default_packages)
|
||||||
@ -53,14 +55,14 @@ class PlatformManager(PackageManager):
|
|||||||
def uninstall(self, # pylint: disable=arguments-differ
|
def uninstall(self, # pylint: disable=arguments-differ
|
||||||
name, requirements=None):
|
name, requirements=None):
|
||||||
p = PlatformFactory.newPlatform(name, requirements)
|
p = PlatformFactory.newPlatform(name, requirements)
|
||||||
PackageManager.uninstall(self, name, requirements)
|
BasePkgManager.uninstall(self, name, requirements)
|
||||||
self.cleanup_packages(p.packages.keys())
|
self.cleanup_packages(p.packages.keys())
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def update(self, # pylint: disable=arguments-differ
|
def update(self, # pylint: disable=arguments-differ
|
||||||
name, requirements=None, only_packages=False):
|
name, requirements=None, only_packages=False):
|
||||||
if not only_packages:
|
if not only_packages:
|
||||||
PackageManager.update(self, name, requirements)
|
BasePkgManager.update(self, name, requirements)
|
||||||
p = PlatformFactory.newPlatform(name, requirements)
|
p = PlatformFactory.newPlatform(name, requirements)
|
||||||
p.update_packages()
|
p.update_packages()
|
||||||
self.cleanup_packages(p.packages.keys())
|
self.cleanup_packages(p.packages.keys())
|
||||||
@ -82,7 +84,7 @@ class PlatformManager(PackageManager):
|
|||||||
deppkgs[pkgname] = set()
|
deppkgs[pkgname] = set()
|
||||||
deppkgs[pkgname].add(pkgmanifest['version'])
|
deppkgs[pkgname].add(pkgmanifest['version'])
|
||||||
|
|
||||||
pm = PackageManager()
|
pm = PackageManager(PACKAGE_DIR)
|
||||||
for manifest in pm.get_installed():
|
for manifest in pm.get_installed():
|
||||||
if manifest['name'] not in names:
|
if manifest['name'] not in names:
|
||||||
continue
|
continue
|
||||||
@ -322,7 +324,7 @@ class PlatformBase(PlatformPackagesMixin, PlatformRunMixin):
|
|||||||
self._manifest = util.load_json(manifest_path)
|
self._manifest = util.load_json(manifest_path)
|
||||||
|
|
||||||
self.pm = PackageManager(
|
self.pm = PackageManager(
|
||||||
repositories=self._manifest.get("packageRepositories"))
|
PACKAGE_DIR, self._manifest.get("packageRepositories"))
|
||||||
|
|
||||||
self._found_error = False
|
self._found_error = False
|
||||||
self._last_echo_line = None
|
self._last_echo_line = None
|
||||||
|
Reference in New Issue
Block a user