Support ignore_changes in code-smell tests.

This commit is contained in:
Matt Clay 2019-02-05 14:56:04 -08:00
parent b8a7e35b22
commit 06d83bae05
3 changed files with 32 additions and 15 deletions

View file

@ -255,6 +255,7 @@ class SanityCodeSmellTest(SanityTest):
files = self.config.get('files')
always = self.config.get('always')
text = self.config.get('text')
ignore_changes = self.config.get('ignore_changes')
if output == 'path-line-column-message':
pattern = '^(?P<path>[^:]*):(?P<line>[0-9]+):(?P<column>[0-9]+): (?P<message>.*)$'
@ -263,7 +264,11 @@ class SanityCodeSmellTest(SanityTest):
else:
pattern = ApplicationError('Unsupported output type: %s' % output)
paths = sorted(i.path for i in targets.include)
if ignore_changes:
paths = sorted(i.path for i in targets.targets)
always = False
else:
paths = sorted(i.path for i in targets.include)
if always:
paths = []

View file

@ -1,4 +1,11 @@
{
"always": true,
"ignore_changes": true,
"prefixes": [
"lib/ansible/modules/",
"lib/ansible/plugins/action/"
],
"extensions": [
".py"
],
"output": "path-message"
}

View file

@ -2,6 +2,7 @@
"""Test to verify action plugins have an associated module to provide documentation."""
import os
import sys
def main():
@ -40,31 +41,35 @@ def main():
'vyos',
])
paths = sys.argv[1:] or sys.stdin.read().splitlines()
module_names = set()
for root, dirs, files in os.walk('lib/ansible/modules'):
for filename in files:
name, ext = os.path.splitext(filename)
for path in paths:
if not path.startswith('lib/ansible/modules/'):
continue
if ext == '.py' and name != '__init__':
if name.startswith('_'):
name = name[1:]
name = os.path.splitext(os.path.basename(path))[0]
module_names.add(name)
if name != '__init__':
if name.startswith('_'):
name = name[1:]
module_names.add(name)
action_plugin_dir = 'lib/ansible/plugins/action'
unused_skip = set(skip)
for filename in os.listdir(action_plugin_dir):
name, ext = os.path.splitext(filename)
for path in paths:
if not path.startswith('lib/ansible/plugins/action/'):
continue
if ext == '.py' and name not in module_names:
name = os.path.splitext(os.path.basename(path))[0]
if name not in module_names:
if name in skip:
unused_skip.remove(name)
continue
path = os.path.join(action_plugin_dir, filename)
print('%s: action plugin has no matching module to provide documentation' % path)
for filename in sorted(unused_skip):