The script is capable of checking if MAINTAINER names are sorted alphabetically. I used English locales and the scripts emits:
Are you fine with the suggested changes? Cheers, Martin $ contrib/check-MAINTAINERS.py MAINTAINERS Global Reviewers are fine! Wrong order for Write After Approval: Mark G. Adams <mark.g.ad...@sympatico.ca> Pedro Alves <pal...@redhat.com> Raksit Ashok <rak...@google.com> Matt Austern <aust...@google.com> David Ayers <ay...@fsfe.org> Prakhar Bahuguna <prakhar.bahug...@arm.com> Giovanni Bajo <giovannib...@gcc.gnu.org> Simon Baldwin <sim...@google.com> Scott Bambrough <sco...@netwinder.org> Wolfgang Bangerth <bange...@dealii.org> Gergö Barany <ge...@codesourcery.com> Charles Baylis <charles.bay...@linaro.org> Tejas Belagod <tejas.bela...@arm.com> Matthew Beliveau <mbeli...@redhat.com> Serge Belyshev <belys...@depni.sinp.msu.ru> Jon Beniston <j...@beniston.com> Andrew Bennett <andrew.benn...@imgtec.com> Andrew Benson <abenso...@gmail.com> Daniel Berlin <dber...@dberlin.org> Pat Bernardi <berna...@adacore.com> Jan Beulich <jbeul...@novell.com> Indu Bhagat <indu.bha...@oracle.com> David Billinghurst <david.billinghu...@riotinto.com> Tomas Bily <tb...@suse.cz> Laurynas Biveinis <laurynas.bivei...@gmail.com> Eric Blake <er...@gcc.gnu.org> Phil Blundell <p...@futuretv.com> Hans Boehm <hbo...@gcc.gnu.org> Lynn Boger <labo...@linux.vnet.ibm.com> Ian Bolton <ian.bol...@arm.com> Andrea Bona <andrea.b...@st.com> Neil Booth <n...@daikokuya.co.uk> Antoni Boucher <boua...@zoho.com> Robert Bowdidge <bowdi...@apple.com> Joel Brobecker <brobec...@gnat.com> Dave Brolley <brol...@redhat.com> Christian Bruel <christian.br...@st.com> Kevin Buettner <kev...@redhat.com> Andrew Burgess <aburg...@redhat.com> Adam Butcher <a...@jessamine.co.uk> Andrew Cagney <cag...@gnu.org> Daniel Carrera <dcarr...@gmail.com> Stephane Carrez <stcar...@nerim.fr> Gabriel Charette <gch...@google.com> Chandra Chavva <ccha...@redhat.com> Dehao Chen <de...@google.com> - Fabien Chêne <fab...@gcc.gnu.org> Clément Chigot <clement.chi...@atos.net> Harshit Chopra <hars...@google.com> Tamar Christina <tamar.christ...@arm.com> Eric Christopher <echri...@gmail.com> + Fabien Chêne <fab...@gcc.gnu.org> Paul Clarke <p...@us.ibm.com> William Cohen <wco...@redhat.com> Michael Collison <michael.colli...@arm.com> Josh Conner <joshcon...@google.com> R. Kelley Cook <kc...@gcc.gnu.org> Alex Coplan <alex.cop...@arm.com> Andrea Corallo <andrea.cora...@arm.com> Christian Cornelssen <cc...@cs.tu-berlin.de> Ludovic Courtès <l...@gnu.org> Lawrence Crowl <cr...@google.com> Ian Dall <i...@beware.dropbear.id.au> David Daney <david.da...@caviumnetworks.com> Robin Dapp <rd...@linux.ibm.com> Simon Dardis <simon.dar...@gmail.com> Sudakshina Das <sudi....@arm.com> Bud Davis <jmda...@link.com> Chris Demetriou <c...@google.com> Sameera Deshpande <sameera.deshpa...@linaro.org> Wilco Dijkstra <wdijk...@arm.com> Benoit Dupont de Dinechin <benoit.dupont-de-dinec...@st.com> Jason Eckhardt <j...@rice.edu> Bernd Edlinger <bernd.edlin...@hotmail.de> Phil Edwards <p...@gcc.gnu.org> Mark Eggleston <mark.eggles...@codethink.co.uk> Steve Ellcey <sell...@caviumnetworks.com> Mohan Embar <gnust...@thisiscool.com> Revital Eres <e...@il.ibm.com> Marc Espie <es...@cvs.openbsd.org> Ansgar Esztermann <ans...@thphy.uni-duesseldorf.de> Doug Evans <d...@google.com> Chris Fairles <cfair...@gcc.gnu.org> Alessandro Fanfarillo <fanfarillo....@gmail.com> Changpeng Fang <changpeng.f...@amd.com> David Faust <david.fa...@oracle.com> Li Feng <nemoking...@gmail.com> Thomas Fitzsimmons <fitz...@redhat.com> Alexander Fomin <afomin.mail...@gmail.com> Brian Ford <f...@vss.fsi.com> John Freeman <jfreema...@gmail.com> + Stefan Schulze Frielinghaus <stefa...@linux.ibm.com> Nathan Froyd <froy...@gcc.gnu.org> Chao-ying Fu <f...@mips.com> Gary Funck <g...@intrepid.com> Pompapathi V Gadad <pompapathi.v.ga...@nsc.com> Eric Gallager <eg...@gwmail.gwu.edu> Gopalasubramanian Ganesh <ganesh.gopalasubraman...@amd.com> Kaveh Ghazi <gh...@gcc.gnu.org> Doug Gilmore <doug.gilm...@imgtec.com> Matthew Gingell <ging...@gnat.com> Jan-Benedict Glaw <jbg...@lug-owl.de> Marc Glisse <marc.gli...@inria.fr> Prachi Godbole <prachi.godb...@imgtec.com> Torbjorn Granlund <t...@swox.com> James Greenhalgh <james.greenha...@arm.com> Doug Gregor <doug.gre...@gmail.com> Matthew Gretton-Dann <matthew.gretton-d...@arm.com> Yury Gribov <tetra2...@gmail.com> Jon Grimm <jgri...@us.ibm.com> Laurent Guerby <laur...@guerby.net> Haochen Gui <guih...@gcc.gnu.org> Jiufu Guo <guoji...@linux.ibm.com> Xuepeng Guo <terry.xp...@gmail.com> Wei Guozhi <car...@google.com> + Naveen H.S <nave...@marvell.com> Mostafa Hagog <ha...@gcc.gnu.org> Andrew Haley <a...@redhat.com> Frederik Harwath <frede...@codesourcery.com> Stuart Hastings <stu...@apple.com> Michael Haubenwallner <michael.haubenwall...@ssi-schaefer.com> Pat Haugen <pthau...@us.ibm.com> Michael Hayes <m.ha...@elec.canterbury.ac.nz> Alan Hayward <alan.hayw...@arm.com> Li Jia He <heli...@gcc.gnu.org> + Kris Van Hees <kris.van.h...@oracle.com> Mark Heffernan <meh...@google.com> George Helffrich <geo...@gcc.gnu.org> Daniel Hellstrom <dan...@gaisler.com> Fergus Henderson <f...@cs.mu.oz.au> Stuart Henderson <shend...@gcc.gnu.org> Marius Hillenbrand <mhil...@linux.ibm.com> Matthew Hiller <hil...@redhat.com> Kazu Hirata <k...@codesourcery.com> Manfred Hollstein <m...@suse.com> Cong Hou <co...@google.com> Falk Hueffner <f...@debian.org> Andrew John Hughes <gnu_and...@member.fsf.org> - Dominique d'Humieres <domi...@lps.ens.fr> Andy Hutchinson <hutchinsona...@aim.com> Joel Hutton <joel.hut...@arm.com> Lewis Hyatt <lhy...@gmail.com> - Naveen H.S <nave...@marvell.com> Roland Illig <roland.il...@gmx.de> Meador Inge <mead...@codesourcery.com> Bernardo Innocenti <ber...@develer.com> Mihail Ionescu <mihail.ione...@arm.com> Vladislav Ivanishin <v...@ispras.ru> Alexander Ivchenko <aivch...@gmail.com> Balaji V. Iyer <bvi...@gmail.com> - Pekka Jääskeläinen <pekka.jaaskelai...@parmance.com> Daniel Jacobowitz <d...@false.org> Andreas Jaeger <a...@suse.de> Harsha Jagasia <harsha.jaga...@amd.com> Fariborz Jahanian <fjahan...@apple.com> Qian Jianhua <qia...@cn.fujitsu.com> Janis Johnson <janis.marie.john...@gmail.com> Teresa Johnson <tejohn...@google.com> Kean Johnston <j...@sco.com> Phillip Jordan <phillip.m.jor...@gmail.com> Tim Josling <t...@melbpc.org.au> + Pekka Jääskeläinen <pekka.jaaskelai...@parmance.com> Victor Kaplansky <vict...@il.ibm.com> Geoffrey Keating <geo...@geoffk.org> Brendan Kehoe <bren...@zen.org> Andi Kleen <a...@firstfloor.org> Matthias Klose <d...@debian.org> Jeff Knaggs <jkna...@redhat.com> Michael Koch <konque...@gmx.de> Nicolas Koenig <koeni...@student.ethz.ch> Boris Kolpackov <bo...@codesynthesis.com> Dave Korn <dave.korn.cyg...@gmail.com> Julia Koval <julia.ko...@intel.com> Matt Kraai <kr...@ftbfs.org> Jan Kratochvil <jan.kratoch...@redhat.com> Matthias Kretz <m.kr...@gsi.de> Louis Krupp <louis.kr...@zoho.com> Prathamesh Kulkarni <prathamesh.kulka...@linaro.org> Venkataramanan Kumar <venkataramanan.ku...@amd.com> Doug Kwan <dougk...@google.com> + Aaron W. LaFramboise <aaronava...@aaronwl.com> Scott Robert Ladd <scott.l...@coyotegulch.com> Razya Ladelsky <ra...@gcc.gnu.org> Thierry Lafage <thierry.laf...@inria.fr> Rask Ingemann Lambertsen <ccc94...@vip.cybercity.dk> Jerome Lambourg <lambo...@adacore.com> - Aaron W. LaFramboise <aaronava...@aaronwl.com> Asher Langton <langt...@llnl.gov> Chris Lattner <sa...@nondot.org> Terry Laurenzo <tlaure...@gmail.com> Alan Lawrence <alan.lawre...@arm.com> Jozef Lawrynowicz <joze...@mittosystems.com> Georg-Johann Lay <a...@gjlay.de> Vlad Lazar <vlad.la...@arm.com> Marc Lehmann <p...@goof.com> James Lemke <j...@lemke.org> Ilya Leoshkevich <i...@linux.ibm.com> Kriang Lerdsuwanakij <lerds...@users.sourceforge.net> Renlin Li <renlin...@arm.com> Xinliang David Li <davi...@google.com> Kewen Lin <li...@gcc.gnu.org> Chen Liqin <liqin....@gmail.com> Jiangning Liu <jiangning....@arm.com> Sa Liu <sa...@de.ibm.com> Ralph Loader <r...@ihug.co.nz> Sheldon Lobo <sheldon.l...@oracle.com Gabor Loki <l...@inf.u-szeged.hu> - Manuel López-Ibáñez <m...@gcc.gnu.org> Carl Love <c...@us.ibm.com> - Martin v. Löwis <loe...@informatik.hu-berlin.de> H.J. Lu <hjl.to...@gmail.com> Xiong Hu Luo <luo...@linux.vnet.ibm.com> Bin Bin Lv <s...@linux.ibm.com> Christophe Lyon <christophe.l...@st.com> + Manuel López-Ibáñez <m...@gcc.gnu.org> + Martin v. Löwis <loe...@informatik.hu-berlin.de> Jun Ma <ju...@linux.alibaba.com> Luis Machado <luis...@br.ibm.com> Ziga Mahkovec <ziga.mahko...@klika.si> Matthew Malcomson <matthew.malcom...@arm.com> Mikhail Maltsev <malts...@gmail.com> Stamatis Markianos-Wright <stam.markianos-wri...@arm.com> Patrick Marlier <patrick.marl...@gmail.com> Simon Martin <simar...@users.sourceforge.net> Alejandro Martinez <alejandro.martinezvice...@arm.com> Ranjit Mathew <rmat...@hotmail.com> Paulo Matos <pmatos@linki.tools> Michael Matz <m...@suse.de> Greg McGary <g...@gnu.org> Roland McGrath <rol...@hack.frob.com> Bryce McKinlay <mckin...@redhat.com> Adam Megacz <a...@xwt.org> Bingfeng Mei <b...@broadcom.com> Jim Meyering <j...@meyering.net> Martin Michlmayr <t...@cyrius.com> Lee Millward <lee.millw...@gmail.com> Dragan Mladjenovic <dragan.mladjeno...@syrmia.com> Alan Modra <amo...@gmail.com> Catherine Moore <c...@codesourcery.com> James A. Morrison <phyt...@gcc.gnu.org> Brooks Moses <bmo...@google.com> Dirk Mueller <dmuel...@suse.de> Phil Muldoon <pmuld...@redhat.com> Gaius Mulley <gaiusm...@gmail.com> Steven Munroe <munroes...@gmail.com> Szabolcs Nagy <szabolcs.n...@arm.com> Quentin Neill <quentin.neill....@gmail.com> Adam Nemet <adambne...@gmail.com> Thomas Neumann <tneum...@users.sourceforge.net> Dan Nicolaescu <d...@ics.uci.edu> Kelvin Nilsen <kelvin.nil...@gmail.com> James Norris Diego Novillo <dnovi...@google.com> Dorit Nuzman <do...@il.ibm.com> David O'Brien <obr...@freebsd.org> Carlos O'Donell <car...@redhat.com> Peter O'Gorman <po...@thewrittenword.com> Braden Obrzut <ad...@maniacsvault.net> Andrea Ornstein <andrea.ornst...@st.com> Maxim Ostapenko <m.ostape...@samsung.com> Patrick Palka <ppa...@gcc.gnu.org> Srinath Parvathaneni <srinath.parvathan...@arm.com> Devang Patel <dpa...@apple.com> Andris Pavenis <andris.pave...@iki.fi> Fernando Pereira <prone...@gmail.com> Sebastian Perta <sebastian.pe...@renesas.com> Sebastian Peryt <sebastian.pe...@intel.com> Johannes Pfau <johannesp...@gmail.com> Kaushik Phatak <kaushik.pha...@kpitcummins.com> Nicolas Pitre <n...@cam.org> Michael Ploujnikov <michael.ploujni...@oracle.com> Paul Pluzhnikov <ppluzhni...@google.com> Antoniu Pop <antoniu....@gmail.com> Marc Poulhiès <poulh...@adacore.com> Siddhesh Poyarekar <siddh...@gotplt.org> Vidya Praveen <vidyaprav...@arm.com> Thomas Preud'homme <thomas.preudho...@celest.fr> Vladimir Prus <vladi...@codesourcery.com> Hafiz Abid Qadeer <ab...@codesourcery.com> Yao Qi <y...@codesourcery.com> Jerry Quinn <jlqu...@optonline.net> Navid Rahimi <navidrah...@microsoft.com> Easwaran Raman <era...@google.com> Joe Ramsay <joe.ram...@arm.com> Rolf Rasmussen <rol...@gcc.gnu.org> Fritz Reese <fritzore...@gmail.com> Volker Reichelt <v.reich...@netcologne.de> Bernhard Reutner-Fischer <rep.dot....@gmail.com> Tom Rix <t...@redhat.com> Thomas Rodgers <trodg...@redhat.com> Craig Rodrigues <rodr...@gcc.gnu.org> Erven Rohou <erven.ro...@inria.fr> Ira Rosen <i...@il.ibm.com> Yvan Roux <yvan.r...@linaro.org> Eugene Rozenfeld <ero...@microsoft.com> Silvius Rus <r...@google.com> Matthew Sachs <msa...@apple.com> Ankur Saini <arse...@sourceware.org> Hariharan Sandanagobalane <hariharan....@gmail.com> Duncan Sands <baldr...@gcc.gnu.org> Sujoy Saraswati <sujoy.sarasw...@hpe.com> Trevor Saunders <tbsaunde+...@tbsaunde.org> Aaron Sawdey <acsaw...@linux.ibm.com> Roger Sayle <ro...@eyesopen.com> Will Schmidt <will_schm...@vnet.ibm.com> - Stefan Schulze Frielinghaus <stefa...@linux.ibm.com> Tilo Schwarz <t...@tilo-schwarz.de> Martin Sebor <mse...@gcc.gnu.org> Svein Seldal <sv...@dev.seldal.com> Senthil Kumar Selvaraj <saaa...@gcc.gnu.org> Thiemo Seufer <t...@networkno.de> Bill Seurer <seu...@linux.vnet.ibm.com> Tim Shen <tims...@google.com> David Sherwood <david.sherw...@arm.com> Sharad Singhai <sing...@google.com> Johannes Singler <sing...@kit.edu> Franz Sirl <franz.sirl-ker...@lauterbach.com> Jan Sjodin <jan.sjo...@amd.com> Trevor Smigiel <trevor_smig...@playstation.sony.com> Edward Smith-Rowland <3dw...@verizon.net> Anatoly Sokolov <ae...@dol.ru> Michael Sokolov <msoko...@ivan.harhan.org> Jayant Sonar <rsonar.jay...@gmail.com> Richard Stallman <r...@gnu.org> Basile Starynkevitch <bas...@starynkevitch.net> Jakub Staszak <k...@et.pl> Graham Stott <graham.st...@btinternet.com> Jeff Sturm <jst...@gcc.gnu.org> YunQiang Su <yunqiang...@cipunited.com> Robert Suchanek <rsuch...@gmail.com> Andrew Sutton <andrew.n.sut...@gmail.com> Gabriele Svelto <gabriele.sve...@st.com> Toma Tabacu <toma.tab...@gmail.com> Omar Tahir <omar.ta...@arm.com> Sriraman Tallam <tmsri...@google.com> Samuel Tardieu <s...@rfc1149.net> Sam Tebbs <samuel.te...@gmail.com> Dinar Temirbulatov <dtemirbula...@gmail.com> Kresten Krab Thorup <k...@gcc.gnu.org> Kai Tietz <ktiet...@googlemail.com> Ilya Tocar <toca...@gmail.com> Petter Tomner <tom...@kth.se> Philipp Tomsich <philipp.toms...@vrull.eu> Daniel Towner <d...@picochip.com> Konrad Trifunovic <konrad.trifuno...@inria.fr> Markus Trippelsdorf <mar...@trippelsdorf.de> Sergei Trofimovich <sly...@gcc.gnu.org> Igor Tsimbalist <igor.v.tsimbal...@intel.com> Martin Uecker <uec...@gcc.gnu.org> David Ung <dav...@mips.com> Neil Vachharajani <nvach...@gmail.com> - Kris Van Hees <kris.van.h...@oracle.com> Joost VandeVondele <joost.vandevond...@mat.ethz.ch> Andre Vehreschild <ve...@gmx.de> Alex Velenko <alex.vele...@arm.com> Ilya Verbin <iver...@gmail.com> Andre Vieira <andre.simoesdiasvie...@arm.com> Rasmus Villemoes <r...@rasmusvillemoes.dk> Kugan Vivekanandarajah <kug...@linaro.org> Marcel Vollweiler <mar...@codesourcery.com> Ville Voutilainen <ville.voutilai...@gmail.com> Nenad Vukicevic <ne...@intrepid.com> Feng Wang <fengw...@nudt.edu.cn> Hongyu Wang <hongyu.w...@intel.com> Jiong Wang <jiong.w...@arm.com> Stephen M. Webb <stephen.w...@bregmasoft.com> John Wehle <j...@feith.com> Florian Weimer <fwei...@redhat.com> Zack Weinberg <za...@panix.com> Mark Wielaard <m...@gcc.gnu.org> Edmar Wienskoski <ed...@freescale.com> Ollie Wild <a...@google.com> Kevin Williams <kevin.willi...@inria.fr> Przemyslaw Wirkus <przemyslaw.wir...@arm.com> Carlo Wood <ca...@alinoe.com> Jackson Woodruff <jackson.woodr...@arm.com> Jonathan Wright <jonathan.wri...@arm.com> Ruoyao Xi <xry...@mengyan1223.wang> Mingjie Xing <mingjie.x...@gmail.com> Chenghua Xu <paul.hua...@gmail.com> Canqun Yang <can...@nudt.edu.cn> Fei Yang <felix.y...@huawei.com> Jeffrey Yasskin <jyass...@google.com> Joey Ye <joey...@arm.com> Kwok Cheung Yeung <k...@codesourcery.com> Greta Yorsh <greta.yo...@arm.com> David Yuste <david.yu...@gmail.com> Adhemerval Zanella <azane...@linux.vnet.ibm.com> Dennis Zhang <dennis.zh...@arm.com> Yufeng Zhang <yufeng.zh...@arm.com> Qing Zhao <qing.z...@oracle.com> Shujing Zhao <pearly.z...@oracle.com> Jon Ziegler <j...@apple.com> Roman Zippel <zip...@linux-m68k.org> Josef Zlomek <josef.zlo...@email.cz> + Dominique d'Humieres <domi...@lps.ens.fr> Bug database only accounts are fine! Contributing under the DCO are fine! contrib/ChangeLog: * check-MAINTAINERS.py: New file. --- contrib/check-MAINTAINERS.py | 100 +++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100755 contrib/check-MAINTAINERS.py 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) -- 2.34.1