forked from platformio/platformio-core
Handle circle dependencies for package // Resolve #919
This commit is contained in:
@ -237,6 +237,7 @@ class LibraryManager(BasePkgManager):
|
||||
silent=False,
|
||||
trigger_event=True,
|
||||
interactive=False):
|
||||
pkg_dir = None
|
||||
try:
|
||||
_name, _requirements, _url = self.parse_pkg_input(name,
|
||||
requirements)
|
||||
@ -254,6 +255,9 @@ class LibraryManager(BasePkgManager):
|
||||
click.secho(str(e), fg="yellow")
|
||||
return
|
||||
|
||||
if not pkg_dir:
|
||||
return
|
||||
|
||||
manifest = self.load_manifest(pkg_dir)
|
||||
if "dependencies" not in manifest:
|
||||
return pkg_dir
|
||||
|
@ -470,6 +470,9 @@ class PkgInstallerMixin(object):
|
||||
|
||||
class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
|
||||
|
||||
# Handle circle dependencies
|
||||
INSTALL_HISTORY = None
|
||||
|
||||
def __init__(self, package_dir, repositories=None):
|
||||
self.repositories = repositories
|
||||
self.package_dir = package_dir
|
||||
@ -592,6 +595,15 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
|
||||
requirements=None,
|
||||
silent=False,
|
||||
trigger_event=True):
|
||||
|
||||
# avoid circle dependencies
|
||||
if not BasePkgManager.INSTALL_HISTORY:
|
||||
BasePkgManager.INSTALL_HISTORY = []
|
||||
history_key = "%s-%s" % (name, requirements) if requirements else name
|
||||
if history_key in BasePkgManager.INSTALL_HISTORY:
|
||||
return
|
||||
BasePkgManager.INSTALL_HISTORY.append(history_key)
|
||||
|
||||
name, requirements, url = self.parse_pkg_input(name, requirements)
|
||||
package_dir = self.get_package_dir(name, requirements, url)
|
||||
|
||||
|
Reference in New Issue
Block a user