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,
|
silent=False,
|
||||||
trigger_event=True,
|
trigger_event=True,
|
||||||
interactive=False):
|
interactive=False):
|
||||||
|
pkg_dir = None
|
||||||
try:
|
try:
|
||||||
_name, _requirements, _url = self.parse_pkg_input(name,
|
_name, _requirements, _url = self.parse_pkg_input(name,
|
||||||
requirements)
|
requirements)
|
||||||
@ -254,6 +255,9 @@ class LibraryManager(BasePkgManager):
|
|||||||
click.secho(str(e), fg="yellow")
|
click.secho(str(e), fg="yellow")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if not pkg_dir:
|
||||||
|
return
|
||||||
|
|
||||||
manifest = self.load_manifest(pkg_dir)
|
manifest = self.load_manifest(pkg_dir)
|
||||||
if "dependencies" not in manifest:
|
if "dependencies" not in manifest:
|
||||||
return pkg_dir
|
return pkg_dir
|
||||||
|
@ -470,6 +470,9 @@ class PkgInstallerMixin(object):
|
|||||||
|
|
||||||
class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
|
class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
|
||||||
|
|
||||||
|
# Handle circle dependencies
|
||||||
|
INSTALL_HISTORY = None
|
||||||
|
|
||||||
def __init__(self, package_dir, repositories=None):
|
def __init__(self, package_dir, repositories=None):
|
||||||
self.repositories = repositories
|
self.repositories = repositories
|
||||||
self.package_dir = package_dir
|
self.package_dir = package_dir
|
||||||
@ -592,6 +595,15 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
|
|||||||
requirements=None,
|
requirements=None,
|
||||||
silent=False,
|
silent=False,
|
||||||
trigger_event=True):
|
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)
|
name, requirements, url = self.parse_pkg_input(name, requirements)
|
||||||
package_dir = self.get_package_dir(name, requirements, url)
|
package_dir = self.get_package_dir(name, requirements, url)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user