Skip to content

Commit c295441

Browse files
committed
Fixes #1392 - Much simpler algorithm for hierarchization of QP
1 parent e51db23 commit c295441

File tree

1 file changed

+24
-17
lines changed

1 file changed

+24
-17
lines changed

sonar/qualityprofiles.py

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,26 @@ def audit(endpoint: pf.Platform, audit_settings: types.ConfigSettings = None) ->
550550
return problems
551551

552552

553+
def hierarchize_language(qp_list: dict[str, str], endpoint: pf.Platform) -> types.ObjectJsonRepr:
554+
"""Organizes a flat list of quality porfile in inheritance hierarchy"""
555+
log.debug("Organizing QP list %s in hierarchy", str(qp_list.keys()))
556+
hierarchy = qp_list.copy()
557+
to_remove = []
558+
for qp_name, qp_json_data in hierarchy.items():
559+
if "parentName" in qp_json_data:
560+
if qp_json_data["parentName"] not in hierarchy:
561+
log.critical("Can't find parent %s in quality profiles", qp_json_data["parentName"])
562+
continue
563+
parent_qp = hierarchy[qp_json_data.pop("parentName")]
564+
if _CHILDREN_KEY not in parent_qp:
565+
parent_qp[_CHILDREN_KEY] = {}
566+
parent_qp[_CHILDREN_KEY][qp_name] = qp_json_data
567+
to_remove.append(qp_name)
568+
for qp_name in to_remove:
569+
hierarchy.pop(qp_name)
570+
return hierarchy
571+
572+
553573
def hierarchize(qp_list: dict[str, str], endpoint: pf.Platform) -> types.ObjectJsonRepr:
554574
"""Organize a flat list of QP in hierarchical (inheritance) fashion
555575
@@ -559,23 +579,10 @@ def hierarchize(qp_list: dict[str, str], endpoint: pf.Platform) -> types.ObjectJ
559579
:rtype: {<language>: {<qp_name>: {"children": <qp_list>; <qp_data>}}}
560580
"""
561581
log.info("Organizing quality profiles in hierarchy")
562-
for lang, qpl in qp_list.copy().items():
563-
for qp_name, qp_json_data in qpl.copy().items():
564-
log.debug("Treating %s:%s", lang, qp_name)
565-
if "parentName" not in qp_json_data:
566-
continue
567-
parent_qp_name = qp_json_data["parentName"]
568-
qp_json_data.pop("rules", None)
569-
log.debug("QP name '%s:%s' has parent '%s'", lang, qp_name, qp_json_data["parentName"])
570-
if _CHILDREN_KEY not in qp_list[lang][qp_json_data["parentName"]]:
571-
qp_list[lang][qp_json_data["parentName"]][_CHILDREN_KEY] = {}
572-
573-
this_qp = get_object(endpoint=endpoint, name=qp_name, language=lang)
574-
(_, qp_json_data) = this_qp.diff(get_object(endpoint=endpoint, name=parent_qp_name, language=lang), qp_json_data)
575-
qp_list[lang][parent_qp_name][_CHILDREN_KEY][qp_name] = qp_json_data
576-
qp_list[lang].pop(qp_name)
577-
qp_json_data.pop("parentName")
578-
return qp_list
582+
hierarchy = {}
583+
for lang, lang_qp_list in qp_list.items():
584+
hierarchy[lang] = hierarchize_language(lang_qp_list, endpoint)
585+
return hierarchy
579586

580587

581588
def export(

0 commit comments

Comments
 (0)