Handle circle dependencies for package // Resolve #919

This commit is contained in:
Ivan Kravets
2017-03-26 21:04:16 +03:00
parent 64eaa1516b
commit ac245ad0a4
2 changed files with 16 additions and 0 deletions

View File

@ -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

View File

@ -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)