azdev 0.1.67__tar.gz → 0.1.70__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {azdev-0.1.67 → azdev-0.1.70}/HISTORY.rst +12 -0
- {azdev-0.1.67/azdev.egg-info → azdev-0.1.70}/PKG-INFO +13 -1
- {azdev-0.1.67 → azdev-0.1.70}/azdev/__init__.py +1 -1
- {azdev-0.1.67 → azdev-0.1.70}/azdev/commands.py +1 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/help.py +7 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/cmdcov/cmdcov.py +0 -57
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/command_change/__init__.py +58 -1
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/command_change/util.py +15 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/params.py +4 -0
- {azdev-0.1.67 → azdev-0.1.70/azdev.egg-info}/PKG-INFO +13 -1
- {azdev-0.1.67 → azdev-0.1.70}/LICENSE +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/MANIFEST.in +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/README.md +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/README.rst +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/__main__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/completer.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/config/__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/config/cli.flake8 +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/config/cli_pylintrc +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/config/ext.flake8 +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/config/ext_pylintrc +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/HISTORY.rst +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/README.rst +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/_client_factory.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/_help.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/_params.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/_validators.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/azext_metadata.json +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/blank__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/commands.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/custom.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/module__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/pkg_declare__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/setup.cfg +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/setup.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/mod_templates/test_service_scenario.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/cmdcov/__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/cmdcov/_macros.j2 +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/cmdcov/component.css +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/cmdcov/component.js +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/cmdcov/favicon.ico +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/cmdcov/index.j2 +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/cmdcov/index2.j2 +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/cmdcov/module.j2 +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/code_gen.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/command_change/custom.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/constant.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/extensions/__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/extensions/util.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/extensions/version_upgrade.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/help/__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/help/refdoc/__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/help/refdoc/conf.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/legal.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/linter/__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/linter/linter.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/linter/pylint_checkers/__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/linter/pylint_checkers/show_command.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/linter/rule_decorators.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/linter/rules/__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/linter/rules/ci_exclusions.yml +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/linter/rules/command_coverage_rules.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/linter/rules/command_group_rules.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/linter/rules/command_rules.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/linter/rules/help_rules.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/linter/rules/linter_exclusions.yml +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/linter/rules/parameter_rules.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/linter/util.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/performance.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/pypi.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/python_sdk.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/regex.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/resource.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/setup.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/statistics/__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/statistics/util.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/style.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/testtool/__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/testtool/incremental_strategy.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/testtool/profile_context.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/operations/testtool/pytest_runner.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/transformers.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/utilities/__init__.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/utilities/command.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/utilities/config.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/utilities/const.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/utilities/display.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/utilities/git_util.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/utilities/path.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/utilities/pypi.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/utilities/testing.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev/utilities/tools.py +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev.egg-info/SOURCES.txt +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev.egg-info/dependency_links.txt +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev.egg-info/entry_points.txt +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev.egg-info/requires.txt +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/azdev.egg-info/top_level.txt +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/pyproject.toml +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/setup.cfg +0 -0
- {azdev-0.1.67 → azdev-0.1.70}/setup.py +0 -0
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
Release History
|
|
4
4
|
===============
|
|
5
|
+
0.1.70
|
|
6
|
+
++++++
|
|
7
|
+
* Fix cmdcov issue(#455): remove tested_command.txt reference.
|
|
8
|
+
|
|
9
|
+
0.1.69
|
|
10
|
+
++++++
|
|
11
|
+
* `azdev command-change tree-export`: Add command help message.
|
|
12
|
+
|
|
13
|
+
0.1.68
|
|
14
|
+
++++++
|
|
15
|
+
* `azdev command-change tree-export`: Add new command to support export command tree of CLI modules.
|
|
16
|
+
|
|
5
17
|
0.1.67
|
|
6
18
|
++++++
|
|
7
19
|
* `azdev extension cal-next-version`: Justify preview/exp tag operation based on last version's tag and next version's stable/preview tag.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: azdev
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.70
|
|
4
4
|
Summary: Microsoft Azure CLI Developer Tools
|
|
5
5
|
Home-page: https://github.com/Azure/azure-cli-dev-tools
|
|
6
6
|
Author: Microsoft Corporation
|
|
@@ -145,6 +145,18 @@ License
|
|
|
145
145
|
|
|
146
146
|
Release History
|
|
147
147
|
===============
|
|
148
|
+
0.1.70
|
|
149
|
+
++++++
|
|
150
|
+
* Fix cmdcov issue(#455): remove tested_command.txt reference.
|
|
151
|
+
|
|
152
|
+
0.1.69
|
|
153
|
+
++++++
|
|
154
|
+
* `azdev command-change tree-export`: Add command help message.
|
|
155
|
+
|
|
156
|
+
0.1.68
|
|
157
|
+
++++++
|
|
158
|
+
* `azdev command-change tree-export`: Add new command to support export command tree of CLI modules.
|
|
159
|
+
|
|
148
160
|
0.1.67
|
|
149
161
|
++++++
|
|
150
162
|
* `azdev extension cal-next-version`: Justify preview/exp tag operation based on last version's tag and next version's stable/preview tag.
|
|
@@ -40,6 +40,7 @@ def load_command_table(self, _):
|
|
|
40
40
|
with CommandGroup(self, 'command-change', operation_group('command_change')) as g:
|
|
41
41
|
g.command('meta-export', 'export_command_meta')
|
|
42
42
|
g.command('meta-diff', 'cmp_command_meta')
|
|
43
|
+
g.command('tree-export', 'export_command_tree')
|
|
43
44
|
|
|
44
45
|
with CommandGroup(self, 'cli', operation_group('pypi')) as g:
|
|
45
46
|
g.command('check-versions', 'verify_versions')
|
|
@@ -197,6 +197,13 @@ helps['command-change meta-diff'] = """
|
|
|
197
197
|
text: azdev statistics meta-diff --base-meta-file fileA --diff-meta-file fileB --only-break
|
|
198
198
|
"""
|
|
199
199
|
|
|
200
|
+
helps['command-change tree-export'] = """
|
|
201
|
+
short-summary: Export Command Tree for CLI modules or extensions.
|
|
202
|
+
examples:
|
|
203
|
+
- name: Export command tree for CLI modules
|
|
204
|
+
text: azdev command-change tree-export CLI --output-file command_tree.json
|
|
205
|
+
"""
|
|
206
|
+
|
|
200
207
|
helps['perf'] = """
|
|
201
208
|
short-summary: Commands to test CLI performance.
|
|
202
209
|
"""
|
|
@@ -58,7 +58,6 @@ class CmdcovManager:
|
|
|
58
58
|
self.enable_cli_own = enable_cli_own
|
|
59
59
|
self.all_commands = {m: [] for m in self.selected_mod_names}
|
|
60
60
|
self.all_tested_commands = {m: [] for m in self.selected_mod_names}
|
|
61
|
-
self.all_live_commands = []
|
|
62
61
|
self.all_untested_commands = {}
|
|
63
62
|
self.command_test_coverage = {'Total': [0, 0, 0]}
|
|
64
63
|
self.date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
|
|
@@ -73,8 +72,6 @@ class CmdcovManager:
|
|
|
73
72
|
self._get_all_tested_commands_from_regex()
|
|
74
73
|
self._get_all_tested_commands_from_record()
|
|
75
74
|
self._run_command_test_coverage()
|
|
76
|
-
self._get_all_tested_commands_from_live()
|
|
77
|
-
self._run_command_test_coverage_enhance()
|
|
78
75
|
html_file = self._render_html()
|
|
79
76
|
if self.enable_cli_own:
|
|
80
77
|
command_test_coverage = {k: v for k, v in self.command_test_coverage.items() if k in CLI_OWN_MODULES}
|
|
@@ -191,10 +188,6 @@ class CmdcovManager:
|
|
|
191
188
|
cmd = command + ' ' + argument
|
|
192
189
|
self.all_tested_commands[self.selected_mod_names[idx]].append(cmd)
|
|
193
190
|
|
|
194
|
-
def _get_all_tested_commands_from_live(self):
|
|
195
|
-
with open(os.path.join(self.cmdcov_path, 'tested_command.txt'), 'r') as f:
|
|
196
|
-
self.all_live_commands = f.readlines()
|
|
197
|
-
|
|
198
191
|
def _run_command_test_coverage(self):
|
|
199
192
|
"""
|
|
200
193
|
all_commands: All commands that need to be test
|
|
@@ -247,56 +240,6 @@ class CmdcovManager:
|
|
|
247
240
|
logger.warning(self.command_test_coverage)
|
|
248
241
|
return self.command_test_coverage
|
|
249
242
|
|
|
250
|
-
def _run_command_test_coverage_enhance(self):
|
|
251
|
-
"""
|
|
252
|
-
all_untest_commands: {[module]:[],}
|
|
253
|
-
all_tested_commands_from_file: []
|
|
254
|
-
command_test_coverage: {[module: [test, untested, pct]
|
|
255
|
-
module: vm
|
|
256
|
-
percentage: xx.xxx%
|
|
257
|
-
"""
|
|
258
|
-
import ast
|
|
259
|
-
total_tested = 0
|
|
260
|
-
total_untested = 0
|
|
261
|
-
# pylint: disable=too-many-nested-blocks
|
|
262
|
-
for module, untested_commands in self.all_untested_commands.items():
|
|
263
|
-
for cmd_idx, command in enumerate(untested_commands):
|
|
264
|
-
exist_flag = False
|
|
265
|
-
prefix = command.rsplit('[', maxsplit=1)[0]
|
|
266
|
-
opt_list = ast.literal_eval('[' + command.rsplit('[', maxsplit=1)[1]) if self.level == 'argument' \
|
|
267
|
-
else []
|
|
268
|
-
for cmd in self.all_live_commands:
|
|
269
|
-
if prefix in cmd:
|
|
270
|
-
if self.level == 'argument':
|
|
271
|
-
for opt in opt_list:
|
|
272
|
-
if opt in cmd:
|
|
273
|
-
self.command_test_coverage[module][0] += 1
|
|
274
|
-
untested_commands.pop(cmd_idx)
|
|
275
|
-
exist_flag = True
|
|
276
|
-
if exist_flag:
|
|
277
|
-
break
|
|
278
|
-
else:
|
|
279
|
-
self.command_test_coverage[module][0] += 1
|
|
280
|
-
untested_commands.pop(cmd_idx)
|
|
281
|
-
exist_flag = True
|
|
282
|
-
if exist_flag:
|
|
283
|
-
break
|
|
284
|
-
if exist_flag:
|
|
285
|
-
break
|
|
286
|
-
try:
|
|
287
|
-
self.command_test_coverage[module][1] = len(untested_commands)
|
|
288
|
-
self.command_test_coverage[module][2] = f'''{self.command_test_coverage[module][0] /
|
|
289
|
-
(self.command_test_coverage[module][0] +
|
|
290
|
-
self.command_test_coverage[module][1]):.3%}'''
|
|
291
|
-
except ZeroDivisionError:
|
|
292
|
-
self.command_test_coverage[module] = [0, 0, 'N/A']
|
|
293
|
-
total_tested += self.command_test_coverage[module][0] if self.command_test_coverage[module] else 0
|
|
294
|
-
total_untested += self.command_test_coverage[module][1] if self.command_test_coverage[module] else 0
|
|
295
|
-
self.command_test_coverage['Total'][0] = total_tested
|
|
296
|
-
self.command_test_coverage['Total'][1] = total_untested
|
|
297
|
-
self.command_test_coverage['Total'][2] = f'{total_tested / (total_tested + total_untested):.3%}'
|
|
298
|
-
logger.warning(self.command_test_coverage)
|
|
299
|
-
|
|
300
243
|
def _render_html(self):
|
|
301
244
|
"""
|
|
302
245
|
:return: Return a HTML string
|
|
@@ -12,7 +12,7 @@ from knack.log import get_logger
|
|
|
12
12
|
import azure_cli_diff_tool
|
|
13
13
|
from azdev.utilities import display, require_azure_cli, heading, get_path_table, filter_by_git_diff
|
|
14
14
|
from .custom import DiffExportFormat, get_commands_meta, STORED_DEPRECATION_KEY
|
|
15
|
-
from .util import export_commands_meta
|
|
15
|
+
from .util import export_commands_meta, dump_command_tree, add_to_command_tree
|
|
16
16
|
from ..statistics import _create_invoker_and_load_cmds, _get_command_source, \
|
|
17
17
|
_command_codegen_info # pylint: disable=protected-access
|
|
18
18
|
from ..statistics.util import filter_modules
|
|
@@ -129,3 +129,60 @@ def export_command_meta(modules=None, git_source=None, git_target=None, git_repo
|
|
|
129
129
|
|
|
130
130
|
def cmp_command_meta(base_meta_file, diff_meta_file, only_break=False, output_type="text", output_file=None):
|
|
131
131
|
return azure_cli_diff_tool.meta_diff(base_meta_file, diff_meta_file, only_break, output_type, output_file)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def export_command_tree(modules, output_file=None):
|
|
135
|
+
require_azure_cli()
|
|
136
|
+
|
|
137
|
+
# allow user to run only on CLI or extensions
|
|
138
|
+
cli_only = modules == ['CLI']
|
|
139
|
+
ext_only = modules == ['EXT']
|
|
140
|
+
if cli_only or ext_only:
|
|
141
|
+
modules = None
|
|
142
|
+
|
|
143
|
+
selected_modules = get_path_table(include_only=modules)
|
|
144
|
+
|
|
145
|
+
if cli_only:
|
|
146
|
+
selected_modules['ext'] = {}
|
|
147
|
+
if ext_only:
|
|
148
|
+
selected_modules['core'] = {}
|
|
149
|
+
selected_modules['mod'] = {}
|
|
150
|
+
|
|
151
|
+
if not any(selected_modules.values()):
|
|
152
|
+
logger.warning('No commands selected to check.')
|
|
153
|
+
|
|
154
|
+
selected_mod_names = list(selected_modules['mod'].keys())
|
|
155
|
+
selected_mod_names += list(selected_modules['ext'].keys())
|
|
156
|
+
selected_mod_names += list(selected_modules['core'].keys())
|
|
157
|
+
|
|
158
|
+
if selected_mod_names:
|
|
159
|
+
display('Modules selected: {}\n'.format(', '.join(selected_mod_names)))
|
|
160
|
+
|
|
161
|
+
heading('Export Command Tree')
|
|
162
|
+
start = time.time()
|
|
163
|
+
display('Initializing with loading command table...')
|
|
164
|
+
from azure.cli.core import get_default_cli # pylint: disable=import-error
|
|
165
|
+
az_cli = get_default_cli()
|
|
166
|
+
|
|
167
|
+
# load commands, args, and help
|
|
168
|
+
_create_invoker_and_load_cmds(az_cli)
|
|
169
|
+
|
|
170
|
+
stop = time.time()
|
|
171
|
+
logger.info('Commands loaded in %i sec', stop - start)
|
|
172
|
+
display('Commands loaded in {} sec'.format(stop - start))
|
|
173
|
+
command_loader = az_cli.invocation.commands_loader
|
|
174
|
+
|
|
175
|
+
# trim command table to selected_modules
|
|
176
|
+
command_loader = filter_modules(command_loader, modules=selected_mod_names)
|
|
177
|
+
|
|
178
|
+
if not command_loader.command_table:
|
|
179
|
+
logger.warning('No commands selected to check.')
|
|
180
|
+
|
|
181
|
+
command_tree = {}
|
|
182
|
+
|
|
183
|
+
for command_name, command in command_loader.command_table.items():
|
|
184
|
+
module_source = _get_command_source(command_name, command)['module']
|
|
185
|
+
# The command tree is a tree structure like our azExtCmdTree: https://aka.ms/azExtCmdTree
|
|
186
|
+
add_to_command_tree(command_tree, command_name, module_source)
|
|
187
|
+
|
|
188
|
+
dump_command_tree(command_tree, output_file)
|
|
@@ -73,3 +73,18 @@ def export_commands_meta(commands_meta, meta_output_path=None):
|
|
|
73
73
|
os.makedirs(file_folder)
|
|
74
74
|
with open(file_name, "w") as f_out:
|
|
75
75
|
f_out.write(jsbeautifier.beautify(json.dumps(module_info), options))
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def add_to_command_tree(tree, key, value):
|
|
79
|
+
parts = key.split()
|
|
80
|
+
subtree = tree
|
|
81
|
+
for part in parts[:-1]:
|
|
82
|
+
if not subtree.get(part):
|
|
83
|
+
subtree[part] = {}
|
|
84
|
+
subtree = subtree[part]
|
|
85
|
+
subtree[parts[-1]] = value
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def dump_command_tree(command_tree, output_file):
|
|
89
|
+
with open(output_file, 'w', encoding='utf-8') as f:
|
|
90
|
+
json.dump(command_tree, f, indent=4)
|
|
@@ -129,6 +129,10 @@ def load_arguments(self, _):
|
|
|
129
129
|
help='format to print diff and suggest message')
|
|
130
130
|
c.argument('output_file', help='command meta diff json file path to store')
|
|
131
131
|
|
|
132
|
+
with ArgumentsContext(self, 'command-change tree-export') as c:
|
|
133
|
+
c.positional('modules', modules_type)
|
|
134
|
+
c.argument('output_file', help='command tree json file path to store')
|
|
135
|
+
|
|
132
136
|
# region cmdcov
|
|
133
137
|
with ArgumentsContext(self, 'cmdcov') as c:
|
|
134
138
|
c.positional('modules', modules_type)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: azdev
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.70
|
|
4
4
|
Summary: Microsoft Azure CLI Developer Tools
|
|
5
5
|
Home-page: https://github.com/Azure/azure-cli-dev-tools
|
|
6
6
|
Author: Microsoft Corporation
|
|
@@ -145,6 +145,18 @@ License
|
|
|
145
145
|
|
|
146
146
|
Release History
|
|
147
147
|
===============
|
|
148
|
+
0.1.70
|
|
149
|
+
++++++
|
|
150
|
+
* Fix cmdcov issue(#455): remove tested_command.txt reference.
|
|
151
|
+
|
|
152
|
+
0.1.69
|
|
153
|
+
++++++
|
|
154
|
+
* `azdev command-change tree-export`: Add command help message.
|
|
155
|
+
|
|
156
|
+
0.1.68
|
|
157
|
+
++++++
|
|
158
|
+
* `azdev command-change tree-export`: Add new command to support export command tree of CLI modules.
|
|
159
|
+
|
|
148
160
|
0.1.67
|
|
149
161
|
++++++
|
|
150
162
|
* `azdev extension cal-next-version`: Justify preview/exp tag operation based on last version's tag and next version's stable/preview tag.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|