Viewing file: check-MAINTAINERS.py (2.87 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/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(sys.argv[1]).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)
|