From: Sebastian Wagner Date: Tue, 18 Jun 2019 07:09:06 +0000 (+0200) Subject: Merge pull request #28264 from rhcs-dashboard/mypy-config-to-file X-Git-Tag: v15.1.0~2442 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ee12c0c88763f1c1d8d577e652d65fab29345dc0;p=ceph.git Merge pull request #28264 from rhcs-dashboard/mypy-config-to-file src/script: extract mypy config to mypy.ini Reviewed-by: Ernesto Puerta Reviewed-by: Sebastian Wagner --- ee12c0c88763f1c1d8d577e652d65fab29345dc0 diff --cc src/script/run_mypy.sh index f56a5ff0426f,b72bccebe023..ee2e97911457 --- a/src/script/run_mypy.sh +++ b/src/script/run_mypy.sh @@@ -23,90 -14,18 +14,90 @@@ MYPY_INI="$PWD"/mypy.in export MYPYPATH="$PWD/pybind/rados:$PWD/pybind/rbd:$PWD/pybind/cephfs" -echo "pybind:" > mypy_report.txt +echo -n > mypy_report.txt pushd pybind - mypy --config-file=<(echo "$MYPY_INI") *.py | awk '{print "pybind/" $0}' >> ../mypy_report.txt + mypy --config-file="$MYPY_INI" *.py | awk '{print "pybind/" $0}' >> ../mypy_report.txt popd -echo "MGR Modules:" >> mypy_report.txt pushd pybind/mgr - mypy --config-file=<(echo "$MYPY_INI") $(find * -name '*.py' | grep -v -e venv -e tox -e env -e gyp -e node_modules) | awk '{print "pybind/mgr/" $0}' >> ../../mypy_report.txt + mypy --config-file="$MYPY_INI" $(find * -name '*.py' | grep -v -e venv -e tox -e env -e gyp -e node_modules) | awk '{print "pybind/mgr/" $0}' >> ../../mypy_report.txt popd -echo "ceph-volume:" >> mypy_report.txt pushd ceph-volume/ceph_volume - mypy --config-file=<(echo "$MYPY_INI") $(find * -name '*.py' | grep -v -e venv -e tox -e env -e gyp -e node_modules -e tests) | awk '{print "ceph-volume/ceph_volume/" $0}' >> ../../mypy_report.txt + mypy --config-file="$MYPY_INI" $(find * -name '*.py' | grep -v -e venv -e tox -e env -e gyp -e node_modules -e tests) | awk '{print "ceph-volume/ceph_volume/" $0}' >> ../../mypy_report.txt popd +SORT_MYPY=$(cat <<-EOF +#!/bin/python3 +from collections import namedtuple + +class Line(namedtuple('Line', 'prefix no rest')): + @classmethod + def parse(cls, l): + if not l: + return cls('', 0, '') + p, *rest = l.split(':', 2) + if len(rest) == 1: + return cls(p, 0, rest[0]) + elif len(rest) == 2: + try: + return cls(p, int(rest[0]), rest[1]) + except ValueError: + return cls(p, 0, rest[0] + ':' + rest[1]) + assert False, rest + +class Group(object): + def __init__(self, line): + self.line = line + self.lines = [] + + def matches(self, other): + return Line.parse(self.line).prefix == Line.parse(other).prefix + + def __bool__(self): + return bool(self.lines) or ': note: In' not in self.line + + def __str__(self): + return '\n'.join([self.line] + self.lines) + + def key(self): + l1 = Line.parse(self.line) + if l1.no: + return l1.prefix, int(l1.no) + if not self.lines: + return l1.prefix, None + return l1.prefix, Line.parse(self.lines[0]).no + +def parse(text): + groups = [] + + def group(): + try: + return groups[-1] + except IndexError: + groups.append(Group('')) + return groups[-1] + + for l in text: + l = l.strip() + if ': note: In' in l or not group().matches(l): + groups.append(Group(l)) + elif not l: + pass + else: + group().lines.append(l) + + return (g for g in groups if g) + +def render(groups): + groups = sorted(groups, key=Group.key) + return '\n'.join(map(str, groups)) + +with open('mypy_report.txt') as f: + new = render(parse(f)) +with open('mypy_report.txt', 'w') as f: + f.write(new) +EOF +) + +python <(echo "$SORT_MYPY")