From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1851) id 5C4C53858D39; Tue, 11 Jan 2022 13:13:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5C4C53858D39 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Martin Liska To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-6436] Check sorting of MAINTAINERS. X-Act-Checkin: gcc X-Git-Author: Martin Liska X-Git-Refname: refs/heads/master X-Git-Oldrev: a923fa6d3b0424cb0eb50de49877515e802c4cb0 X-Git-Newrev: 11b26b8d2e0521f1d44dfb460b51ea8164af7dce Message-Id: <20220111131315.5C4C53858D39@sourceware.org> Date: Tue, 11 Jan 2022 13:13:15 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Jan 2022 13:13:15 -0000 https://gcc.gnu.org/g:11b26b8d2e0521f1d44dfb460b51ea8164af7dce commit r12-6436-g11b26b8d2e0521f1d44dfb460b51ea8164af7dce Author: Martin Liska Date: Mon Jan 10 16:49:31 2022 +0100 Check sorting of MAINTAINERS. contrib/ChangeLog: * check-MAINTAINERS.py: New file. Diff: --- contrib/check-MAINTAINERS.py | 113 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/contrib/check-MAINTAINERS.py b/contrib/check-MAINTAINERS.py new file mode 100755 index 00000000000..ca7bb291282 --- /dev/null +++ b/contrib/check-MAINTAINERS.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. + +# Check that names in the file are sorted +# alphabetically by surname. + +import locale +import sys +from difflib import ndiff +from itertools import dropwhile, takewhile + +import unidecode + +locale.setlocale(locale.LC_ALL, 'en_US.utf8') + +exit_code = 0 + +if len(sys.argv) != 2: + print('Usage: ./check-MAINTAINERS.py path-to/MAINTAINERS') + sys.exit(1) + + +def sort_by_surname(line): + name = line.split('\t')[0] + parts = name.split() + surname = parts[-1] + + # Special-case some names + if name == 'Stefan Schulze Frielinghaus': + surname = parts[1] + elif name == 'Kris Van Hees': + surname = parts[1] + elif surname == "d'Humieres": + surname = 'Humieres' + + # Remove accents + return (unidecode.unidecode(surname), line) + + +def has_tab(line): + return '\t' in line + + +def is_empty(line): + return line + + +def check_group(name, lines): + global exit_code + + for line in lines: + if line.startswith(' '): + print(f'Line should not start with space: "{line}"') + exit_code = 2 + + lines = [line + '\n' for line in lines] + sorted_lines = sorted(lines, key=sort_by_surname) + if lines != sorted_lines: + exit_code = 1 + diff = ndiff(lines, sorted_lines) + print(f'Wrong order for {name}:\n') + print(''.join(diff)) + else: + print(f'{name} are fine!') + + +lines = open('MAINTAINERS').read().splitlines() + +needle = 'Global Reviewers' +lines = list(dropwhile(lambda x: x.strip() != needle, lines)) +lines = lines[2:] + +chunk = list(takewhile(is_empty, lines)) +check_group(needle, chunk) + +needle = 'Write After Approval' +lines = list(dropwhile(lambda x: needle not in x, lines)) +lines = lines[2:] + +chunk = list(takewhile(is_empty, lines)) +check_group(needle, chunk) + +needle = 'Bug database only accounts' +lines = list(dropwhile(lambda x: needle not in x, lines)) +lines = lines[2:] + +chunk = list(takewhile(is_empty, lines)) +check_group(needle, chunk) + +needle = 'Contributing under the DCO' +lines = list(dropwhile(lambda x: needle not in x, lines))[1:] +lines = list(dropwhile(lambda x: not has_tab(x), lines)) +check_group(needle, lines) + +sys.exit(exit_code)