From c0cf41a15ccf7f9060c4dd891ff4b16814f7ecbc Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Sun, 19 Nov 2017 11:31:08 +0100 Subject: [PATCH] Avoid duplicate dependency installation The previous commit changed the resolver logic to try all resolvers, so that when building an environment fails, the next resolver can be tried. Since dependency resolution and installation are coupled it would be possible to install dependencies multiple times for different resolvers (e.g for Conda and Conda versionless). To avoid this we stop installation once a set of dependencies has been resolved. --- lib/galaxy/tools/deps/__init__.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/galaxy/tools/deps/__init__.py b/lib/galaxy/tools/deps/__init__.py index 471274cd792..3e3a79b33e9 100644 --- a/lib/galaxy/tools/deps/__init__.py +++ b/lib/galaxy/tools/deps/__init__.py @@ -159,6 +159,9 @@ class DependencyManager(object): # Shortcut - resolution complete for this resolver. resolver_requirements.append(requirement_to_dependency) + # We have a complete set of dependencies, don't install + # via lower-ranked resolvers + kwds['install'] = False continue # Check individual requirements @@ -178,6 +181,11 @@ class DependencyManager(object): requirement_to_dependency[requirement] = dependency if requirement_to_dependency: resolver_requirements.append(requirement_to_dependency) + if (len(requirement_to_dependency) == len(resolvable_requirements) and + all(True for d in requirement_to_dependency if not isinstance(d, NullDependency))): + # We resolved all individual requirements, no need to further install dependencies + # resolved by subsequent resolvers. + kwds['install'] = False if not resolver_requirements: # Have at least a single empty dict resolver_requirements.append(OrderedDict())