public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/marxin/heads/add-check-MAINTAINERS.py)] Check sorting of MAINTAINERS.
@ 2022-01-10 16:14 Martin Liska
0 siblings, 0 replies; only message in thread
From: Martin Liska @ 2022-01-10 16:14 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:52f6ff831a3753bf489f21bef682c6e33ff7b16b
commit 52f6ff831a3753bf489f21bef682c6e33ff7b16b
Author: Martin Liska <mliska@suse.cz>
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 | 100 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 100 insertions(+)
diff --git a/contrib/check-MAINTAINERS.py b/contrib/check-MAINTAINERS.py
new file mode 100755
index 00000000000..70aa375846b
--- /dev/null
+++ b/contrib/check-MAINTAINERS.py
@@ -0,0 +1,100 @@
+#!/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
+
+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):
+ parts = line.split('\t')
+ surname = parts[0].split()[-1]
+ return (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)
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-01-10 16:14 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-10 16:14 [gcc(refs/users/marxin/heads/add-check-MAINTAINERS.py)] Check sorting of MAINTAINERS Martin Liska
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).