Skip to content

Commit 3db9cc7

Browse files
Merge pull request #1205 from linsword13/sw-env
Simplify env's package rendering
2 parents d568c99 + 2e95bf5 commit 3db9cc7

File tree

1 file changed

+33
-31
lines changed

1 file changed

+33
-31
lines changed

lib/ramble/ramble/software_environments.py

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -601,39 +601,41 @@ def render_environment(
601601

602602
new_env = RenderedEnvironment(name, package_manager)
603603

604+
# Stores a mapping from rendered package name to template.
605+
# This helps with more efficient env package matching and
606+
# allows only matched packages to be fully rendered.
607+
name_to_template = {}
608+
for pkg_template in all_package_templates.values():
609+
rendered_name = expander.expand_var(pkg_template.name, merge_used_stage=False)
610+
if rendered_name:
611+
name_to_template[rendered_name] = pkg_template
612+
604613
for env_pkg_template in self._package_names:
605614
rendered_env_pkg_name = expander.expand_var(env_pkg_template)
606-
607-
if rendered_env_pkg_name:
608-
found = False
609-
for template_pkg in all_package_templates.values():
610-
expander.flush_used_variable_stage()
611-
rendered_pkg = template_pkg.render_package(expander, package_manager)
612-
613-
if rendered_env_pkg_name == rendered_pkg.name:
614-
found = True
615-
if rendered_pkg.spec is not None:
616-
expander.merge_used_variable_stage()
617-
618-
if rendered_pkg.name in all_packages[pm_name]:
619-
if rendered_pkg != all_packages[pm_name][rendered_pkg.name]:
620-
raise RambleSoftwareEnvironmentError(
621-
f"Environment {name} defined multiple "
622-
"times in inconsistent ways.\n"
623-
f"Package with differences is {rendered_pkg.name}"
624-
)
625-
rendered_pkg = all_packages[pm_name][rendered_pkg.name]
626-
else:
627-
all_packages[pm_name][rendered_pkg.name] = rendered_pkg
628-
629-
template_pkg.add_rendered_package(rendered_pkg, all_packages, pm_name)
630-
new_env.add_package(rendered_pkg)
631-
632-
if not found:
633-
raise RambleSoftwareEnvironmentError(
634-
f"Environment template {self.name} references "
635-
f"undefined package {env_pkg_template} rendered to {rendered_env_pkg_name}"
636-
)
615+
if not rendered_env_pkg_name:
616+
continue
617+
matching_template = name_to_template.get(rendered_env_pkg_name)
618+
if matching_template is None:
619+
raise RambleSoftwareEnvironmentError(
620+
f"Environment template {self.name} references "
621+
f"undefined package {env_pkg_template} rendered to {rendered_env_pkg_name}"
622+
)
623+
expander.flush_used_variable_stage()
624+
rendered_pkg = matching_template.render_package(expander, package_manager)
625+
if rendered_pkg.spec is not None:
626+
expander.merge_used_variable_stage()
627+
if rendered_pkg.name in all_packages[pm_name]:
628+
if rendered_pkg != all_packages[pm_name][rendered_pkg.name]:
629+
raise RambleSoftwareEnvironmentError(
630+
f"Environment {name} defined multiple "
631+
"times in inconsistent ways.\n"
632+
f"Package with differences is {rendered_pkg.name}"
633+
)
634+
rendered_pkg = all_packages[pm_name][rendered_pkg.name]
635+
else:
636+
all_packages[pm_name][rendered_pkg.name] = rendered_pkg
637+
matching_template.add_rendered_package(rendered_pkg, all_packages, pm_name)
638+
new_env.add_package(rendered_pkg)
637639

638640
return new_env
639641

0 commit comments

Comments
 (0)