in azure-cli-diff-tool/azure_cli_diff_tool/meta_change_detect.py [0:0]
def check_cmd_parameter_diff(self, cmd_name, base_parameters, cmp_parameters):
"""check cmd parameter diff"""
for base_para_obj in base_parameters:
base_para_obj["checked"] = True
cmp_para_obj = self.__search_para_with_name_and_options(base_para_obj, cmp_parameters)
if cmp_para_obj is None:
# cmd lost parameter obj, is break
diff_obj = ParaRemove(cmd_name, base_para_obj["name"], True, DiffLevel.BREAK)
# add flag to avoid duplicate compare
self.diff_objs.append(diff_obj)
continue
cmp_para_obj["checked"] = True
for prop in self.CHECKED_PARA_PROPERTY:
if prop not in base_para_obj and prop not in cmp_para_obj:
continue
if prop in base_para_obj and prop not in cmp_para_obj:
# prop dropped in new para obj
prop_value = base_para_obj[prop]
if prop in PARA_PROPERTY_REMOVE_WARN_LIST:
diff_obj = ParaPropRemove(cmd_name, base_para_obj["name"], prop, prop_value,
False, DiffLevel.WARN)
elif prop in PARA_PROPERTY_REMOVE_BREAK_LIST:
diff_obj = ParaPropRemove(cmd_name, base_para_obj["name"], prop, prop_value,
True, DiffLevel.BREAK)
else:
diff_obj = ParaPropRemove(cmd_name, base_para_obj["name"], prop, prop_value,
False, DiffLevel.INFO)
self.diff_objs.append(diff_obj)
continue
if prop not in base_para_obj and prop in cmp_para_obj:
# prop added in new para obj
prop_value = cmp_para_obj[prop]
if prop in PARA_PROPERTY_ADD_WARN_LIST:
diff_obj = ParaPropAdd(cmd_name, base_para_obj["name"], prop, prop_value,
False, DiffLevel.WARN)
elif prop in PARA_PROPERTY_ADD_BREAK_LIST:
diff_obj = ParaPropAdd(cmd_name, base_para_obj["name"], prop, prop_value,
True, DiffLevel.BREAK)
else:
diff_obj = ParaPropAdd(cmd_name, base_para_obj["name"], prop, prop_value,
False, DiffLevel.INFO)
self.diff_objs.append(diff_obj)
continue
# prop exists in both new and old para obj, value needs to be checked
base_val = base_para_obj[prop]
cmp_val = cmp_para_obj[prop]
self.__process_parameter_value_update(cmd_name, prop, base_para_obj, base_val, cmp_val)
continue
# check added parameter obj, if obj is required, then is break
for cmp_para_obj in cmp_parameters:
if "checked" in cmp_para_obj and cmp_para_obj["checked"]:
continue
para_name = cmp_para_obj["name"]
required = cmp_para_obj.get("required", None)
if required:
diff_obj = ParaAdd(cmd_name, para_name, True, DiffLevel.BREAK)
else:
diff_obj = ParaAdd(cmd_name, para_name, False, DiffLevel.INFO)
self.diff_objs.append(diff_obj)