performance: dont' read spec.yaml
files twice in view regeneration
`ViewDescriptor.regenerate()` calls `get_all_specs()`, which reads `spec.yaml` files, which is slow. It's fine to do this once, but `view.remove_specs()` *also* calls it immediately afterwards. - [x] Pass the result of `get_all_specs()` as an optional parameter to `view.remove_specs()` to avoid reading `spec.yaml` files twice.
This commit is contained in:
parent
e3939b0c72
commit
e22d3250dd
@ -534,9 +534,12 @@ def regenerate(self, all_specs, roots):
|
|||||||
tty.msg("Updating view at {0}".format(self.root))
|
tty.msg("Updating view at {0}".format(self.root))
|
||||||
|
|
||||||
rm_specs = specs_in_view - installed_specs_for_view
|
rm_specs = specs_in_view - installed_specs_for_view
|
||||||
view.remove_specs(*rm_specs, with_dependents=False)
|
|
||||||
|
|
||||||
add_specs = installed_specs_for_view - specs_in_view
|
add_specs = installed_specs_for_view - specs_in_view
|
||||||
|
|
||||||
|
# pass all_specs in, as it's expensive to read all the
|
||||||
|
# spec.yaml files twice.
|
||||||
|
view.remove_specs(*rm_specs, with_dependents=False,
|
||||||
|
all_specs=specs_in_view)
|
||||||
view.add_specs(*add_specs, with_dependencies=False)
|
view.add_specs(*add_specs, with_dependencies=False)
|
||||||
|
|
||||||
|
|
||||||
|
@ -371,6 +371,9 @@ def remove_specs(self, *specs, **kwargs):
|
|||||||
with_dependents = kwargs.get("with_dependents", True)
|
with_dependents = kwargs.get("with_dependents", True)
|
||||||
with_dependencies = kwargs.get("with_dependencies", False)
|
with_dependencies = kwargs.get("with_dependencies", False)
|
||||||
|
|
||||||
|
# caller can pass this in, as get_all_specs() is expensive
|
||||||
|
all_specs = kwargs.get("all_specs", None) or set(self.get_all_specs())
|
||||||
|
|
||||||
specs = set(specs)
|
specs = set(specs)
|
||||||
|
|
||||||
if with_dependencies:
|
if with_dependencies:
|
||||||
@ -379,8 +382,6 @@ def remove_specs(self, *specs, **kwargs):
|
|||||||
if kwargs.get("exclude", None):
|
if kwargs.get("exclude", None):
|
||||||
specs = set(filter_exclude(specs, kwargs["exclude"]))
|
specs = set(filter_exclude(specs, kwargs["exclude"]))
|
||||||
|
|
||||||
all_specs = set(self.get_all_specs())
|
|
||||||
|
|
||||||
to_deactivate = specs
|
to_deactivate = specs
|
||||||
to_keep = all_specs - to_deactivate
|
to_keep = all_specs - to_deactivate
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user