def dependents(my_component_name, download_dir, releases_dir, components_dir): dependents_list = [] components = c_lib.load_all_components(components_dir, releases_dir) for component in components: if len(component.releases) > 0: series_list = [] for release in component.releases: if release.series not in series_list: series_list.append(release.series) component_parameters = [{ "name": component.name, "repo_url": component.repo_url, "series": release.series, "sha": None }] c_lib.download_components(component_parameters, download_dir) dep_component_dir = os.path.join(download_dir, component.name) metadata = get_metadata(dep_component_dir) if metadata: for dependency in metadata['dependencies']: if dependency['name'] == my_component_name: dependents_list.append(component) return dependents_list
def compare(releases_dir, components_dir, **kwargs): from_ = c_lib.load_all_components( components_dir, releases_dir, kwargs["from"] ) to = c_lib.load_all_components( components_dir, releases_dir, kwargs["to"] ) to_compare = defaultdict(lambda: [{}, {}]) for c in from_: to_compare[c.name][0] = c for c in to: to_compare[c.name][1] = c comparison = {} for name, (f, t) in to_compare.items(): if f and not t: deleted = f.to_dict() added = {} elif t and not f: deleted = {} added = t.to_dict() else: deleted = f.difference(t) added = t.difference(f) if added or deleted: comparison[name] = {"added": added, "deleted": deleted} comparison_yaml = yaml.dump(comparison, default_flow_style=False) if kwargs["verify"] == "release": try: s_lib.comparison_added_version_schema.validate(comparison) except SchemaError as e: raise c_lib.ComponentError( "The changes from `{f}` to `{t}` do not represent the " "addition of a new release.\nValidation error:" "\n{e}\nChanges found:\n{c}".format( f=kwargs["from"], t=kwargs["to"], e=e, c=comparison_yaml, ) ) else: name, data = comparison.popitem() version = data["added"]["releases"][0]["versions"][0]["version"] component = [c for c in to if c.name == name][0] output = component.get_release(version) elif kwargs["verify"] == "registration": try: s_lib.comparison_added_component_schema.validate(comparison) except SchemaError as e: raise c_lib.ComponentError( "The changes from `{f}` to `{t}` do not represent the " "registration of a new component.\nValidation error:" "\n{e}\nChanges found:\n{c}".format( f=kwargs["from"], t=kwargs["to"], e=e, c=comparison_yaml, ) ) else: name, _ = comparison.popitem() component = [c for c in to if c.name == name][0] output = component else: output = comparison return output