From patchwork Mon Jan 10 16:14:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Martin_Li=C5=A1ka?= X-Patchwork-Id: 49805 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4971F3858014 for ; Mon, 10 Jan 2022 16:15:23 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by sourceware.org (Postfix) with ESMTPS id 8C6AF385800E for ; Mon, 10 Jan 2022 16:14:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8C6AF385800E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.cz Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id AC04D21138 for ; Mon, 10 Jan 2022 16:14:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1641831240; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=jNc17l1SmbB8wLFgoCyhhbbVCChhKoiKWbLeaa98TkU=; b=JcHcqfdShcN5/blt5qaZWyibCMbM4dXidwwS9Sm/526nuBqzFrHL3qsHt/qrUq9yZd37Lm hXK90ReYBAGS9JAF3c9LB31Bs+8h87XiIydYobQpvpCXsGCP37RwoZNu2fHEOz93GHt+ez 2Yhoy/TxupyK/1wbKfN29Ccws15+PcQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1641831240; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=jNc17l1SmbB8wLFgoCyhhbbVCChhKoiKWbLeaa98TkU=; b=3kL4JCx1E7qxWHHgqf/IwlRUs7VG891Q9U6+ZDg7sRbASfX/JWeNfIe9g3mALmVIchMImT Sn2x33bySAZs47Bg== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 9A9C613D88 for ; Mon, 10 Jan 2022 16:14:00 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id EQ5KJEhb3GFyGQAAMHmgww (envelope-from ) for ; Mon, 10 Jan 2022 16:14:00 +0000 Message-ID: <338956f1-b353-1dc6-4652-5e6192175615@suse.cz> Date: Mon, 10 Jan 2022 17:14:00 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 From: =?utf-8?q?Martin_Li=C5=A1ka?= Subject: [PATCH] Check sorting of MAINTAINERS To: gcc-patches@gcc.gnu.org Content-Language: en-US X-Spam-Status: No, score=-7.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, LIKELY_SPAM_BODY, SPAM_BODY, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" 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 Pedro Alves Raksit Ashok Matt Austern David Ayers Prakhar Bahuguna Giovanni Bajo Simon Baldwin Scott Bambrough Wolfgang Bangerth Gergö Barany Charles Baylis Tejas Belagod Matthew Beliveau Serge Belyshev Jon Beniston Andrew Bennett Andrew Benson Daniel Berlin Pat Bernardi Jan Beulich Indu Bhagat David Billinghurst Tomas Bily Laurynas Biveinis Eric Blake Phil Blundell Hans Boehm Lynn Boger Ian Bolton Andrea Bona Neil Booth Antoni Boucher Robert Bowdidge Joel Brobecker Dave Brolley Christian Bruel Kevin Buettner Andrew Burgess Adam Butcher Andrew Cagney Daniel Carrera Stephane Carrez Gabriel Charette Chandra Chavva Dehao Chen - Fabien Chêne Clément Chigot Harshit Chopra Tamar Christina Eric Christopher + Fabien Chêne Paul Clarke William Cohen Michael Collison Josh Conner R. Kelley Cook Alex Coplan Andrea Corallo Christian Cornelssen Ludovic Courtès Lawrence Crowl Ian Dall David Daney Robin Dapp Simon Dardis Sudakshina Das Bud Davis Chris Demetriou Sameera Deshpande Wilco Dijkstra Benoit Dupont de Dinechin Jason Eckhardt Bernd Edlinger Phil Edwards Mark Eggleston Steve Ellcey Mohan Embar Revital Eres Marc Espie Ansgar Esztermann Doug Evans Chris Fairles Alessandro Fanfarillo Changpeng Fang David Faust Li Feng Thomas Fitzsimmons Alexander Fomin Brian Ford John Freeman + Stefan Schulze Frielinghaus Nathan Froyd Chao-ying Fu Gary Funck Pompapathi V Gadad Eric Gallager Gopalasubramanian Ganesh Kaveh Ghazi Doug Gilmore Matthew Gingell Jan-Benedict Glaw Marc Glisse Prachi Godbole Torbjorn Granlund James Greenhalgh Doug Gregor Matthew Gretton-Dann Yury Gribov Jon Grimm Laurent Guerby Haochen Gui Jiufu Guo Xuepeng Guo Wei Guozhi + Naveen H.S Mostafa Hagog Andrew Haley Frederik Harwath Stuart Hastings Michael Haubenwallner Pat Haugen Michael Hayes Alan Hayward Li Jia He + Kris Van Hees Mark Heffernan George Helffrich Daniel Hellstrom Fergus Henderson Stuart Henderson Marius Hillenbrand Matthew Hiller Kazu Hirata Manfred Hollstein Cong Hou Falk Hueffner Andrew John Hughes - Dominique d'Humieres Andy Hutchinson Joel Hutton Lewis Hyatt - Naveen H.S Roland Illig Meador Inge Bernardo Innocenti Mihail Ionescu Vladislav Ivanishin Alexander Ivchenko Balaji V. Iyer - Pekka Jääskeläinen Daniel Jacobowitz Andreas Jaeger Harsha Jagasia Fariborz Jahanian Qian Jianhua Janis Johnson Teresa Johnson Kean Johnston Phillip Jordan Tim Josling + Pekka Jääskeläinen Victor Kaplansky Geoffrey Keating Brendan Kehoe Andi Kleen Matthias Klose Jeff Knaggs Michael Koch Nicolas Koenig Boris Kolpackov Dave Korn Julia Koval Matt Kraai Jan Kratochvil Matthias Kretz Louis Krupp Prathamesh Kulkarni Venkataramanan Kumar Doug Kwan + Aaron W. LaFramboise Scott Robert Ladd Razya Ladelsky Thierry Lafage Rask Ingemann Lambertsen Jerome Lambourg - Aaron W. LaFramboise Asher Langton Chris Lattner Terry Laurenzo Alan Lawrence Jozef Lawrynowicz Georg-Johann Lay Vlad Lazar Marc Lehmann James Lemke Ilya Leoshkevich Kriang Lerdsuwanakij Renlin Li Xinliang David Li Kewen Lin Chen Liqin Jiangning Liu Sa Liu Ralph Loader Sheldon Lobo - Manuel López-Ibáñez Carl Love - Martin v. Löwis H.J. Lu Xiong Hu Luo Bin Bin Lv Christophe Lyon + Manuel López-Ibáñez + Martin v. Löwis Jun Ma Luis Machado Ziga Mahkovec Matthew Malcomson Mikhail Maltsev Stamatis Markianos-Wright Patrick Marlier Simon Martin Alejandro Martinez Ranjit Mathew Paulo Matos Michael Matz Greg McGary Roland McGrath Bryce McKinlay Adam Megacz Bingfeng Mei Jim Meyering Martin Michlmayr Lee Millward Dragan Mladjenovic Alan Modra Catherine Moore James A. Morrison Brooks Moses Dirk Mueller Phil Muldoon Gaius Mulley Steven Munroe Szabolcs Nagy Quentin Neill Adam Nemet Thomas Neumann Dan Nicolaescu Kelvin Nilsen James Norris Diego Novillo Dorit Nuzman David O'Brien Carlos O'Donell Peter O'Gorman Braden Obrzut Andrea Ornstein Maxim Ostapenko Patrick Palka Srinath Parvathaneni Devang Patel Andris Pavenis Fernando Pereira Sebastian Perta Sebastian Peryt Johannes Pfau Kaushik Phatak Nicolas Pitre Michael Ploujnikov Paul Pluzhnikov Antoniu Pop Marc Poulhiès Siddhesh Poyarekar Vidya Praveen Thomas Preud'homme Vladimir Prus Hafiz Abid Qadeer Yao Qi Jerry Quinn Navid Rahimi Easwaran Raman Joe Ramsay Rolf Rasmussen Fritz Reese Volker Reichelt Bernhard Reutner-Fischer Tom Rix Thomas Rodgers Craig Rodrigues Erven Rohou Ira Rosen Yvan Roux Eugene Rozenfeld Silvius Rus Matthew Sachs Ankur Saini Hariharan Sandanagobalane Duncan Sands Sujoy Saraswati Trevor Saunders Aaron Sawdey Roger Sayle Will Schmidt - Stefan Schulze Frielinghaus Tilo Schwarz Martin Sebor Svein Seldal Senthil Kumar Selvaraj Thiemo Seufer Bill Seurer Tim Shen David Sherwood Sharad Singhai Johannes Singler Franz Sirl Jan Sjodin Trevor Smigiel Edward Smith-Rowland <3dw4rd@verizon.net> Anatoly Sokolov Michael Sokolov Jayant Sonar Richard Stallman Basile Starynkevitch Jakub Staszak Graham Stott Jeff Sturm YunQiang Su Robert Suchanek Andrew Sutton Gabriele Svelto Toma Tabacu Omar Tahir Sriraman Tallam Samuel Tardieu Sam Tebbs Dinar Temirbulatov Kresten Krab Thorup Kai Tietz Ilya Tocar Petter Tomner Philipp Tomsich Daniel Towner Konrad Trifunovic Markus Trippelsdorf Sergei Trofimovich Igor Tsimbalist Martin Uecker David Ung Neil Vachharajani - Kris Van Hees Joost VandeVondele Andre Vehreschild Alex Velenko Ilya Verbin Andre Vieira Rasmus Villemoes Kugan Vivekanandarajah Marcel Vollweiler Ville Voutilainen Nenad Vukicevic Feng Wang Hongyu Wang Jiong Wang Stephen M. Webb John Wehle Florian Weimer Zack Weinberg Mark Wielaard Edmar Wienskoski Ollie Wild Kevin Williams Przemyslaw Wirkus Carlo Wood Jackson Woodruff Jonathan Wright Ruoyao Xi Mingjie Xing Chenghua Xu Canqun Yang Fei Yang Jeffrey Yasskin Joey Ye Kwok Cheung Yeung Greta Yorsh David Yuste Adhemerval Zanella Dennis Zhang Yufeng Zhang Qing Zhao Shujing Zhao Jon Ziegler Roman Zippel Josef Zlomek + Dominique d'Humieres 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)