Skip to content

Commit

Permalink
add deprecate diff support (#438)
Browse files Browse the repository at this point in the history
* add deprecate diff and test data
  • Loading branch information
AllyW authored Mar 25, 2024
1 parent 4705b15 commit 202fd8a
Show file tree
Hide file tree
Showing 12 changed files with 643 additions and 93 deletions.
4 changes: 4 additions & 0 deletions HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
Release History
===============
0.1.65
++++++
* `azdev command-change meta-diff`: Add diff support for deprecate_info in subgroup, cmd, parameters and options.

0.1.64
++++++
* `azdev extension cal-next-version`: Fix module name when querying extension modules from index.
Expand Down
2 changes: 1 addition & 1 deletion azdev/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
# license information.
# -----------------------------------------------------------------------------

__VERSION__ = '0.1.64'
__VERSION__ = '0.1.65'
4 changes: 4 additions & 0 deletions azure-cli-diff-tool/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
Release History
===============
0.0.6
++++++
* Add diff support for deprecate_info in subgroup, cmd, parameters and options

0.0.5
++++++
* Add `DiffLevel` to meta comparison
Expand Down
10 changes: 6 additions & 4 deletions azure-cli-diff-tool/azure_cli_diff_tool/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
from .meta_change_detect import MetaChangeDetect
from .utils import get_blob_config, load_blob_config_file, get_target_version_modules, get_target_version_module, \
extract_module_name_from_meta_file, export_meta_changes_to_csv, export_meta_changes_to_json, \
export_meta_changes_to_dict
export_meta_changes_to_dict, expand_deprecate_obj

__VERSION__ = '0.0.5'
__VERSION__ = '0.0.6'

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -61,7 +61,8 @@ def meta_diff(base_meta_file, diff_meta_file, only_break=False, output_type="tex
if command_tree_after.get("compat_version", None) \
and check_meta_tool_compatibility(command_tree_after["compat_version"]):
raise Exception("Please update your azure cli diff tool")

expand_deprecate_obj(command_tree_before)
expand_deprecate_obj(command_tree_after)
diff = DeepDiff(command_tree_before, command_tree_after)
if not diff:
print(f"No meta diffs from {diff_meta_file} to {base_meta_file}")
Expand Down Expand Up @@ -116,7 +117,8 @@ def version_diff(base_version, diff_version, only_break=False, version_diff_file
if command_tree_after.get("compat_version", None) \
and check_meta_tool_compatibility(command_tree_after["compat_version"]):
raise Exception("Please update your azure cli diff tool")

expand_deprecate_obj(command_tree_before)
expand_deprecate_obj(command_tree_after)
diff = DeepDiff(command_tree_before, command_tree_after)
if not diff:
print(f"No meta diffs from version: {diff_version}/{base_meta_file} for module: {module_name}")
Expand Down
30 changes: 24 additions & 6 deletions azure-cli-diff-tool/azure_cli_diff_tool/_const.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,25 +19,37 @@

CMD_REMOVE_SUFFIX_WARN_LIST = ["wait"]

SUBGROUP_PROPERTY_REMOVE_BREAK_LIST = []
SUBGROUP_PROPERTY_REMOVE_WARN_LIST = ["deprecate_info_redirect"]

SUBGROUP_PROPERTY_ADD_BREAK_LIST = []
SUBGROUP_PROPERTY_ADD_WARN_LIST = ["deprecate_info_hide", "deprecate_info_expiration"]

SUBGROUP_PROPERTY_UPDATE_BREAK_LIST = []
SUBGROUP_PROPERTY_UPDATE_WARN_LIST = ["deprecate_info_expiration"]

SUBGROUP_PROPERTY_IGNORED_LIST = []

CMD_PROPERTY_REMOVE_BREAK_LIST = []
CMD_PROPERTY_REMOVE_WARN_LIST = []
CMD_PROPERTY_REMOVE_WARN_LIST = ["deprecate_info_redirect"]

CMD_PROPERTY_ADD_BREAK_LIST = ["confirmation"]
CMD_PROPERTY_ADD_WARN_LIST = []
CMD_PROPERTY_ADD_WARN_LIST = ["deprecate_info_hide", "deprecate_info_expiration"]

CMD_PROPERTY_UPDATE_BREAK_LIST = []
CMD_PROPERTY_UPDATE_WARN_LIST = []
CMD_PROPERTY_UPDATE_WARN_LIST = ["deprecate_info_expiration", "deprecate_info_redirect"]

CMD_PROPERTY_IGNORED_LIST = ["is_aaz", "supports_no_wait"]

PARA_PROPERTY_REMOVE_BREAK_LIST = ["options"]
PARA_PROPERTY_REMOVE_WARN_LIST = ["id_part", "nargs"]
PARA_PROPERTY_REMOVE_WARN_LIST = ["id_part", "nargs", "deprecate_info_redirect"]

PARA_PROPERTY_ADD_BREAK_LIST = ["required"]
PARA_PROPERTY_ADD_WARN_LIST = ["choices"]
PARA_PROPERTY_ADD_WARN_LIST = ["choices", "deprecate_info_expiration", "deprecate_info_hide", "options_deprecate_info"]

PARA_PROPERTY_UPDATE_BREAK_LIST = ["default", "aaz_default"]
PARA_PROPERTY_UPDATE_WARN_LIST = ["type", "aaz_type", "choices", "nargs"]
PARA_PROPERTY_UPDATE_WARN_LIST = ["type", "aaz_type", "choices", "nargs",
"deprecate_info_expiration", "deprecate_info_redirect", "options_deprecate_info"]

PARA_NAME_IGNORED_LIST = ["force_string"]
PARA_PROPERTY_IGNORED_LIST = []
Expand All @@ -61,6 +73,9 @@
"1010": "cmd `{0}` update parameter `{1}`: updated property `{2}` from `{3}` to `{4}`",
"1011": "sub group `{0}` added",
"1012": "sub group `{0}` removed",
"1013": "sub group `{0}` added property `{1}`",
"1014": "sub group `{0}` removed property `{1}`",
"1015": "sub group `{0}` updated property `{1}` from `{2}` to `{3}`",
}

CHANGE_SUGGEST_MESSAGE_MAPPING = {
Expand All @@ -77,5 +92,8 @@
"1010": "please change property `{0}` from `{1}` to `{2}` for parameter `{3}` of cmd `{4}`",
"1011": "please confirm sub group `{0}` added",
"1012": "please confirm sub group `{0}` removed",
"1013": "please remove property `{0}` for sub group `{1}`",
"1014": "please add back property `{0}` for sub group `{1}`",
"1015": "please change property `{0}` from `{1}` to `{2}` for sub group `{3}`",
}

81 changes: 80 additions & 1 deletion azure-cli-diff-tool/azure_cli_diff_tool/meta_change.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@

from .utils import get_change_rule_template, get_change_suggest_template, DiffLevel
from ._const import BREAKING_CHANE_RULE_LINK_URL_PREFIX, BREAKING_CHANE_RULE_LINK_URL_SUFFIX, \
CMD_PROPERTY_IGNORED_LIST, PARA_NAME_IGNORED_LIST, PARA_PROPERTY_IGNORED_LIST, PARA_VALUE_IGNORED_LIST
SUBGROUP_PROPERTY_IGNORED_LIST, CMD_PROPERTY_IGNORED_LIST, PARA_NAME_IGNORED_LIST, \
PARA_PROPERTY_IGNORED_LIST, PARA_VALUE_IGNORED_LIST


class MetaChange:
Expand Down Expand Up @@ -58,6 +59,84 @@ def __init__(self, subgroup_name, is_break=True, diff_level=DiffLevel.BREAK):
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message)


class SubgroupPropAdd(MetaChange):
def __init__(self, subgroup_name, subgroup_property, is_break=False, diff_level=DiffLevel.INFO):
if not subgroup_name or not subgroup_property:
raise Exception("sub group name needed")
self.rule_id = "1013"
self.is_ignore = False
self.subgroup_name = subgroup_name
self.subgroup_property = subgroup_property
self.is_break = is_break
self.diff_level = diff_level
self.rule_message = get_change_rule_template(self.rule_id).format(self.subgroup_name, self.subgroup_property)
self.suggest_message = get_change_suggest_template(self.rule_id).format(self.subgroup_property, self.subgroup_name) \
if self.is_break else ""
if subgroup_property in SUBGROUP_PROPERTY_IGNORED_LIST:
self.is_ignore = True
self.filter_key = [self.rule_id, self.subgroup_name, self.subgroup_property]
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message, self.is_ignore,
self.filter_key)


class SubgroupPropRemove(MetaChange):
def __init__(self, subgroup_name, subgroup_property, is_break=False, diff_level=DiffLevel.BREAK):
if not subgroup_name or not subgroup_property:
raise Exception("sub group name needed")
self.rule_id = "1014"
self.is_ignore = False
self.subgroup_name = subgroup_name
self.subgroup_property = subgroup_property
self.is_break = is_break
self.diff_level = diff_level
self.rule_message = get_change_rule_template(self.rule_id).format(self.subgroup_name, self.subgroup_property)
if self.is_break:
self.suggest_message = get_change_suggest_template(self.rule_id).format(self.subgroup_property,
self.subgroup_name)
else:
self.suggest_message = ""
if subgroup_property in CMD_PROPERTY_IGNORED_LIST:
self.is_ignore = True
self.filter_key = [self.rule_id, self.subgroup_name, self.subgroup_property]
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message,
self.is_ignore, self.filter_key)


class SubgroupPropUpdate(MetaChange):

def __init__(self, subgroup_name, subgroup_property, is_break=False, diff_level=DiffLevel.INFO,
old_value=None, new_value=None):
if not subgroup_name or not subgroup_property:
raise Exception("sub group name and sub group prop needed")
self.rule_id = "1015"
self.is_ignore = False
self.subgroup_name = subgroup_name
self.is_break = is_break
self.diff_level = diff_level
self.subgroup_prop_updated = subgroup_property
self.old_value = ""
self.new_value = ""

if old_value is not None:
self.old_value = old_value
if new_value is not None:
self.new_value = new_value
self.rule_message = get_change_rule_template(self.rule_id).format(self.subgroup_name,
self.subgroup_prop_updated,
self.old_value, self.new_value)
if self.is_break:
self.suggest_message = get_change_suggest_template(self.rule_id).format(self.subgroup_prop_updated,
self.new_value, self.old_value,
self.subgroup_name)
else:
self.suggest_message = ""
if subgroup_property in SUBGROUP_PROPERTY_IGNORED_LIST:
self.is_ignore = True
self.filter_key = [self.rule_id, self.subgroup_name, self.subgroup_prop_updated]
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message,
self.is_ignore, self.filter_key)


class CmdAdd(MetaChange):
def __init__(self, cmd_name, is_break=False, diff_level=DiffLevel.INFO):
if not cmd_name:
Expand Down
Loading

0 comments on commit 202fd8a

Please sign in to comment.