Skip to content

Add .mailmap Validation with mailmap-checker #148329

Description

@cansarigol

Feature or enhancement

Proposal:

Proposal: Add .mailmap Validation with mailmap-checker

Summary

Add automated .mailmap validation to CPython's patchcheck.py and pre-commit configuration using the mailmap-checker tool, ensuring proper formatting, completeness, and preventing duplicate entries.

Background

The .mailmap file was introduced in PR #103696 to map contributor name/email changes in git history. As noted by @zware in that discussion:

"Since we've now started down this road, there may be other contributors who would like to be similarly added here..."

Currently, there's no automated validation, which can lead to:

  • Syntax errors going undetected
  • Unmapped contributor identities across email changes
  • Duplicate or conflicting entries
  • Manual maintenance burden

Proposed Solution

Use the existing mailmap-checker tool (https://github.com/cansarigol/mailmap-checker) which:

  • Detects unmapped Git identities by scanning commit history
  • Groups authors by email and local-part
  • Validates .mailmap syntax and completeness
  • Can auto-fix and suggest entries

Implementation

1. Add to Tools/scripts/patchcheck.py:

def mailmap_checked():
    """Check if .mailmap is properly maintained."""
    try:
        subprocess.check_call(
            ['mailmap-checker', 'check'],
            cwd=SRCDIR,
            stdout=subprocess.DEVNULL,
            stderr=subprocess.DEVNULL
        )
        return True
    except subprocess.CalledProcessError:
        print("Mailmap check failed. Run 'mailmap-checker check' to see details.")
        return False
    except (FileNotFoundError, OSError):
        print("mailmap-checker not installed, skipping mailmap check.")
        return True

2. Add to .pre-commit-config.yaml:

  - repo: https://github.com/cansarigol/mailmap-checker
    rev: v1.0.0  # Use latest stable version
    hooks:
      - id: mailmap-check

3. Update documentation:

Add to Doc/developers/patchcheck.rst or contributing guide:

Mailmap Validation
------------------

CPython uses `.mailmap` to consolidate contributor identities. To validate:

.. code-block:: bash

   # Check for unmapped identities
   mailmap-checker check

   # Auto-fix (preview first)
   mailmap-checker fix --dry-run
   mailmap-checker fix

Related

Has this already been discussed elsewhere?

This is a minor feature, which does not need previous discussion elsewhere

Links to previous discussion of this feature:

No response

Activity

  1. cansarigol commented on Apr 10, 2026

    @cansarigol
    Author

    This shows the current situation.

    Details
    >> mailmap-checker check
    Found 187 unmapped identities in 166 groups:
    
      Canonical: A.Ibrahim <abdulrasheedibrahim47@gmail.com>
        - Abdul <abdulrasheedibrahim47@gmail.com>
      Canonical: AJ Jordan <alex@strugee.net>
        - Alex Jordan <alex@strugee.net>
      Canonical: AN Long <aisk@users.noreply.github.com>
        - An Long <aisk@users.noreply.github.com>
      Canonical: Alexander Belopolsky <abalkin@users.noreply.github.com>
        - Lev Abalkin <abalkin@users.noreply.github.com>
      Canonical: Alexey Izbyshev <izbyshev@ispras.ru>
        - Alexey Izbyshev <izbyshev@users.noreply.github.com>
        - izbyshev <izbyshev@users.noreply.github.com>
      Canonical: Allen <64019758+aboddie@users.noreply.github.com>
        - aboddie <64019758+aboddie@users.noreply.github.com>
      Canonical: Alyssa Coghlan <ncoghlan@gmail.com>
        - Nick Coghlan <ncoghlan@gmail.com>
      Canonical: Ananthakrishnan <ananthakrishnan15.2001@gmail.com>
        - ananthan-123 <ananthakrishnan15.2001@gmail.com>
      Canonical: Andre Delfino <adelfino@gmail.com>
        - Andrés Delfino <adelfino@gmail.com>
      Canonical: Andrej <azhilenkov@gmail.com>
        - Andrej730 <azhilenkov@gmail.com>
      Canonical: Andrew Kuchling <amk@amk.ca>
        - Andrew M. Kuchling <amk@amk.ca>
      Canonical: Andrew Zipperer <47086307+zipperer@users.noreply.github.com>
        - zipperer <47086307+zipperer@users.noreply.github.com>
      Canonical: Batuhan Taskaya <batuhanosmantaskaya@gmail.com>
        - Batuhan Taşkaya <batuhanosmantaskaya@gmail.com>
      Canonical: Ben Harper <btharper1221@gmail.com>
        - btharper <btharper1221@gmail.com>
      Canonical: Benedikt Johannes <benedikt.johannes.hofer@gmail.com>
        - benediktjohannes <benedikt.johannes.hofer@gmail.com>
      Canonical: Benjamin Fogle <benfogle@gmail.com>
        - benfogle <benfogle@gmail.com>
      Canonical: Benjamin Szőke <egyszeregy@freemail.hu>
        - Livius <egyszeregy@freemail.hu>
      Canonical: Beomsoo Kim <bluewhale8202@gmail.com>
        - Derek B. Kim <bluewhale8202@gmail.com>
      Canonical: Boris Verhovsky <boris.verk@gmail.com>
        - Boris Verkhovskiy <boris.verk@gmail.com>
        - Борис Верховский <boris.verk@gmail.com>
      Canonical: Brad Solomon <brad.solomon.1124@gmail.com>
        - Brad <brad.solomon.1124@gmail.com>
      Canonical: Brandt Bucher <brandtbucher@gmail.com>
        - Brandt Bucher <brandtbucher@microsoft.com>
      Canonical: Brian Curtin <brian.curtin@gmail.com>
        - briancurtin <brian.curtin@gmail.com>
      Canonical: Brian Curtin <brian@python.org>
        - brian.curtin <brian@python.org>
      Canonical: Brian Quinlan <brian@sweetapp.com>
        - bquinlan <brian@sweetapp.com>
      Canonical: Brij Kapadia <97006829+bkap123@users.noreply.github.com>
        - bkap123 <97006829+bkap123@users.noreply.github.com>
      Canonical: C.A.M. Gerlach <CAM.Gerlach@Gerlach.CAM>
        - CAM Gerlach <CAM.Gerlach@Gerlach.CAM>
      Canonical: CF Bolz-Tereick <cfbolz@gmx.de>
        - Carl Friedrich Bolz-Tereick <cfbolz@gmx.de>
      Canonical: Charles-Francois Natali <cf.natali@gmail.com>
        - Charles-François Natali <cf.natali@gmail.com>
      Canonical: Cheryl Sabella <cheryl.sabella@gmail.com>
        - csabella <cheryl.sabella@gmail.com>
      Canonical: Chih-Hsuan Yen <yan12125@gmail.com>
        - Yen Chi Hsuan <yan12125@gmail.com>
      Canonical: Christian Clauss <cclauss@me.com>
        - cclauss <cclauss@me.com>
      Canonical: Christian Heimes <christian@cheimes.de>
        - Christian Heimes <christian@python.org>
      Canonical: Christian Ullrich <chris@chrullrich.net>
        - chrullrich <chris@chrullrich.net>
      Canonical: Colin Watson <cjwatson@debian.org>
        - Colin Watson <cjwatson@ubuntu.com>
      Canonical: Daniel Weiss <134341009+justdan6@users.noreply.github.com>
        - justdan6 <134341009+justdan6@users.noreply.github.com>
      Canonical: David Benjamin <davidben@davidben.net>
        - David Benjamin <davidben@google.com>
      Canonical: Dennis Sweeney <36520290+sweeneyde@users.noreply.github.com>
        - sweeneyde <36520290+sweeneyde@users.noreply.github.com>
      Canonical: Devin Jeanpierre <jeanpierreda@gmail.com>
        - Devin Jeanpierre <jeanpierreda@google.com>
      Canonical: Dino Viehland <dinoviehland@fb.com>
        - Dino Viehland <dinoviehland@gmail.com>
        - Dino Viehland <dinoviehland@meta.com>
      Canonical: Dominic H <dom@dominic.sk>
        - Dominic H. <dom@dominic.sk>
      Canonical: Dong-hee Na <donghee.na@python.org>
        - Donghee Na <donghee.na@python.org>
      Canonical: E Kawashima <e-kwsm@users.noreply.github.com>
        - Eisuke Kawashima <e-kwsm@users.noreply.github.com>
      Canonical: E. M. Bray <erik.m.bray@gmail.com>
        - Erik Bray <erik.m.bray@gmail.com>
      Canonical: Eddie Elizondo <eelizondo@fb.com>
        - Eddie Elizondo <eelizondo@meta.com>
      Canonical: Edward Xu <xuxiangad@foxmail.com>
        - Edward Xu <xuxiangad@gmail.com>
      Canonical: Eric Smith <eric@trueblade.com>
        - Eric V. Smith <eric@trueblade.com>
      Canonical: Eric V. Smith <ericvsmith@users.noreply.github.com>
        - ericvsmith <ericvsmith@users.noreply.github.com>
      Canonical: Erik Janssens <erik.janssens@conceptive.be>
        - erikjanss <erik.janssens@conceptive.be>
      Canonical: Erlend E. Aasland <erlend.aasland@innova.no>
        - Erlend E. Aasland <erlend.aasland@protonmail.com>
        - Erlend Egeberg Aasland <erlend.aasland@innova.no>
        - Erlend Egeberg Aasland <erlend.aasland@protonmail.com>
      Canonical: Ethan Furman <ethan@stoneleaf.us>
        - ethanfurman <ethan@stoneleaf.us>
      Canonical: FC Stegerman <flx@obfusk.net>
        - Felix C. Stegerman <flx@obfusk.net>
      Canonical: Furkan Onder <furkanonder@protonmail.com>
        - Furkan Önder <furkanonder@protonmail.com>
      Canonical: Furkan Onder <furkantahaonder@gmail.com>
        - Furkan Önder <furkantahaonder@gmail.com>
      Canonical: George Zhang <geetransit@gmail.com>
        - GeeTransit <geetransit@gmail.com>
      Canonical: Gerhard Haering <gh@ghaering.de>
        - Gerhard Häring <gh@ghaering.de>
      Canonical: Giampaolo Rodola <g.rodola@gmail.com>
        - Giampaolo Rodola' <g.rodola@gmail.com>
        - Giampaolo Rodolà <g.rodola@gmail.com>
      Canonical: Grzegorz Grzywacz <grzgrzgrz3@gmail.com>
        - grzgrzgrz3 <grzgrzgrz3@gmail.com>
      Canonical: Guo Ci <zguoci@gmail.com>
        - guoci <zguoci@gmail.com>
      Canonical: Hai Zhu <35182391+cocolato@users.noreply.github.com>
        - LloydZ <35182391+cocolato@users.noreply.github.com>
      Canonical: INADA Naoki <methane@users.noreply.github.com>
        - Inada Naoki <methane@users.noreply.github.com>
      Canonical: INADA Naoki <songofacandy@gmail.com>
        - Inada Naoki <songofacandy@gmail.com>
      Canonical: Ikko Ashimine <eltociear@gmail.com>
        - Ikko Eltociear Ashimine <eltociear@gmail.com>
      Canonical: Itamar Oren <itamarost@gmail.com>
        - Itamar Ostricher <itamarost@gmail.com>
      Canonical: JMcB <joel.mcbride1@live.com>
        - jmcb <joel.mcbride1@live.com>
      Canonical: Jack DeVries <58614260+jdevries3133@users.noreply.github.com>
        - jdevries3133 <58614260+jdevries3133@users.noreply.github.com>
      Canonical: Jack Hindmarch <1750152+jackh-ncl@users.noreply.github.com>
        - jackh-ncl <1750152+jackh-ncl@users.noreply.github.com>
      Canonical: James Gerity <snoopjedi@gmail.com>
        - James <snoopjedi@gmail.com>
      Canonical: Jason Zhang <yurenzhang2017@gmail.com>
        - JasonYZ <yurenzhang2017@gmail.com>
      Canonical: Jay Aljelo Ting <65202977+jayasting98@users.noreply.github.com>
        - Jay Ting <65202977+jayasting98@users.noreply.github.com>
      Canonical: Jaysinh Shukla <jaysinhp@gmail.com>
        - UltimateCoder <jaysinhp@gmail.com>
      Canonical: Jeffrey Kintscher <49998481+websurfer5@users.noreply.github.com>
        - websurfer5 <49998481+websurfer5@users.noreply.github.com>
      Canonical: Jeroen Demeyer <J.Demeyer@UGent.be>
        - jdemeyer <J.Demeyer@UGent.be>
      Canonical: Jesus Cea <jcea@jcea.es>
        - Jesús Cea <jcea@jcea.es>
        - jcea <jcea@jcea.es>
      Canonical: Jules Lasne <jules.lasne@gmail.com>
        - Jules Lasne (jlasne) <jules.lasne@gmail.com>
      Canonical: Julian Waters <32636402+TheShermanTanker@users.noreply.github.com>
        - TheShermanTanker <32636402+TheShermanTanker@users.noreply.github.com>
      Canonical: JunWei Song <sungboss2004@gmail.com>
        - Nick Sung <sungboss2004@gmail.com>
        - nick sung <sungboss2004@gmail.com>
      Canonical: Karthikeyan Singaravelan <tir.karthi@gmail.com>
        - Xtreak <tir.karthi@gmail.com>
      Canonical: Kazantcev Andrey <45011689+heckad@users.noreply.github.com>
        - Andrey <45011689+heckad@users.noreply.github.com>
      Canonical: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com>
        - Fidget-Spinner <28750310+Fidget-Spinner@users.noreply.github.com>
        - kj <28750310+Fidget-Spinner@users.noreply.github.com>
      Canonical: Kevin Follstad <kfollstad@gmail.com>
        - kfollstad <kfollstad@gmail.com>
      Canonical: Kira <coldcaption@gmail.com>
        - abstractedfox <coldcaption@gmail.com>
      Canonical: Kirill Podoprigora <80244920+Eclips4@users.noreply.github.com>
        - Eclips4 <80244920+Eclips4@users.noreply.github.com>
        - Kirill <80244920+Eclips4@users.noreply.github.com>
      Canonical: Kristjan Valur Jonsson <sweskman@gmail.com>
        - Kristján Valur Jónsson <sweskman@gmail.com>
        - krisvale <sweskman@gmail.com>
      Canonical: Kyle Stanley <44193521+aeros167@users.noreply.github.com>
        - Aeros <44193521+aeros167@users.noreply.github.com>
      Canonical: Larry Hastings <larry@hastings.org>
        - larry <larry@hastings.org>
        - larryhastings <larry@hastings.org>
      Canonical: Licht Takeuchi <licht-t@outlook.jp>
        - Rito Takeuchi <licht-t@outlook.jp>
      Canonical: Louie Lu <git@louie.lu>
        - mlouielu <git@louie.lu>
      Canonical: Loïc Simon <loic.simon@espci.org>
        - Loïc Simon <loic.simon@napta.io>
      Canonical: M Bussonnier <bussonniermatthias@gmail.com>
        - Matthias Bussonnier <bussonniermatthias@gmail.com>
      Canonical: Ma Lin <animalize@users.noreply.github.com>
        - animalize <animalize@users.noreply.github.com>
      Canonical: Marc-Andre Lemburg <mal@egenix.com>
        - Marc-André Lemburg <mal@egenix.com>
      Canonical: Marco Aurélio A. Barbosa <aureliobarbosa@gmail.com>
        - Marco Barbosa <aureliobarbosa@gmail.com>
      Canonical: Mariatta Wijaya <Mariatta@users.noreply.github.com>
        - Mariatta <Mariatta@users.noreply.github.com>
      Canonical: Martin DeMello <martindemello@fb.com>
        - Martin DeMello <martindemello@gmail.com>
      Canonical: Martin v. Loewis <martin@v.loewis.de>
        - Martin v. Löwis <martin@v.loewis.de>
      Canonical: Mathieu Dupuy <deronnax@gmail.com>
        - Mathieu Dupuy <deronnax@users.noreply.github.com>
      Canonical: Mathieu Dupuy <mathieu.dupuy@critizr.com>
        - Mathieu Dupuy <mathieu.dupuy@doctolib.com>
      Canonical: Matthew Hughes <34972397+matthewhughes934@users.noreply.github.com>
        - matthewhughes934 <34972397+matthewhughes934@users.noreply.github.com>
      Canonical: Matthias Klose <doko@ubuntu.com>
        - doko@ubuntu.com <doko@ubuntu.com>
      Canonical: Maurycy Pawłowski-Wieroński <5383+maurycy@users.noreply.github.com>
        - maurycy <5383+maurycy@users.noreply.github.com>
      Canonical: Michael Osipov <michael.osipov@innomotics.com>
        - Michael Osipov <michael.osipov@siemens.com>
      Canonical: Mikhail Efimov <efimov.mikhail@gmail.com>
        - efimov-mikhail <efimov.mikhail@gmail.com>
      Canonical: Milan Oberkirch <milan.oberkirch@geops.com>
        - Milan Oberkirch <milan.oberkirch@geops.de>
      Canonical: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
        - Miss Skeleton (bot) <31488909+miss-islington@users.noreply.github.com>
      Canonical: Nadeshiko Manju <me@manjusaka.me>
        - Manjusaka <me@manjusaka.me>
      Canonical: Naglis <naglis@users.noreply.github.com>
        - naglis <naglis@users.noreply.github.com>
      Canonical: Naglis Jonaitis <827324+naglis@users.noreply.github.com>
        - naglis <827324+naglis@users.noreply.github.com>
      Canonical: Nikita Sobolev <mail@sobolevn.me>
        - sobolevn <mail@sobolevn.me>
      Canonical: Oren Milman <orenmn@gmail.com>
        - orenmn <orenmn@gmail.com>
      Canonical: Oz N Tiram <oz.tiram@gmail.com>
        - Oz N Tiram <oz.tiram@noris.de>
      Canonical: Pablo Galindo <Pablogsal@gmail.com>
        - Dargor <Pablogsal@gmail.com>
        - Pablo Galindo <pablogsal@gmail.com>
        - Pablo Galindo Salgado <Pablogsal@gmail.com>
      Canonical: Paul m. p. P <mail.peny@free.fr>
        - Paul m. p. Peny <mail.peny@free.fr>
      Canonical: Paulo Henrique Silva <ph.silva@carta.com>
        - Paulo Henrique Silva <ph.silva@gmail.com>
      Canonical: Peter Bierma <zintensitydev@gmail.com>
        - Peter <zintensitydev@gmail.com>
      Canonical: Philipp A <flying-sheep@web.de>
        - Philipp A. <flying-sheep@web.de>
      Canonical: Quentin Agren <quentin.agren@gmail.com>
        - Quentin <quentin.agren@sciencespo.fr>
        - Quentin Agren <quentin.agren@sciencespo.fr>
      Canonical: R Chintan Meher <meherrihaan@gmail.com>
        - Rihaan Meher <meherrihaan@gmail.com>
        - sharktide <meherrihaan@gmail.com>
      Canonical: R David Murray <rdmurray@bitdance.com>
        - R. David Murray <rdmurray@bitdance.com>
      Canonical: RUANG (James Roy) <longjinyii@outlook.com>
        - RUANG (Roy James) <longjinyii@outlook.com>
      Canonical: Radislav Chugunov <52372310+chgnrdv@users.noreply.github.com>
        - chgnrdv <52372310+chgnrdv@users.noreply.github.com>
      Canonical: Rafael Weingartner-Ortner <38643099+RafaelWO@users.noreply.github.com>
        - RafaelWO <38643099+RafaelWO@users.noreply.github.com>
      Canonical: Rémi Lapeyre <remi.lapeyre@henki.fr>
        - Rémi Lapeyre <remi.lapeyre@lenstra.fr>
      Canonical: Samodya Abey <379594+sransara@users.noreply.github.com>
        - Samodya Abeysiriwardane <379594+sransara@users.noreply.github.com>
      Canonical: Savannah Bailey <savannahostrowski@gmail.com>
        - Savannah Ostrowski <savannahostrowski@gmail.com>
      Canonical: Sean Reifscheider <jafo@tummy.com>
        - Sean Reifschneider <jafo@tummy.com>
      Canonical: Semyon Moroz <donbarbos@proton.me>
        - donBarbos <donbarbos@proton.me>
      Canonical: Senthil Kumaran <orsenthil@gmail.com>
        - orsenthil@gmail.com <orsenthil@gmail.com>
      Canonical: Stan U. <89152624+StanFromIreland@users.noreply.github.com>
        - Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
      Canonical: Stanislav Terliakov <50529348+sterliakov@users.noreply.github.com>
        - sterliakov <50529348+sterliakov@users.noreply.github.com>
      Canonical: Stanley <46876382+slateny@users.noreply.github.com>
        - slateny <46876382+slateny@users.noreply.github.com>
      Canonical: Stefan Behnel <stefan_ml@behnel.de>
        - scoder <stefan_ml@behnel.de>
      Canonical: Steve (Gadget) Barnes <gadgetsteve@hotmail.com>
        - Steve (Gadget) Barnes <gadgetsteve@live.co.uk>
      Canonical: Steve Dower <steve.dower@microsoft.com>
        - Steve Dower <steve.dower@python.org>
      Canonical: Steven D'Aprano <steve+python@pearwood.info>
        - stevendaprano <steve+python@pearwood.info>
      Canonical: Steven M. Vascellaro <S.Vascellaro@gmail.com>
        - Stevoisiak <S.Vascellaro@gmail.com>
      Canonical: Stéphane Bidoul <stephane.bidoul@acsone.eu>
        - Stéphane Bidoul <stephane.bidoul@gmail.com>
      Canonical: Sviatoslav Sydorenko <wk.cvs.github@sydorenko.org.ua>
        - Sviatoslav Sydorenko (Святослав Сидоренко) <wk.cvs.github@sydorenko.org.ua>
      Canonical: Sviatoslav Sydorenko <wk@sydorenko.org.ua>
        - Sviatoslav Sydorenko (Святослав Сидоренко) <wk@sydorenko.org.ua>
      Canonical: T <tnie@tuta.io>
        - Tiger <tnie@tuta.io>
      Canonical: T. Wouters <thomas@python.org>
        - Thomas Wouters <thomas@python.org>
      Canonical: Terry Jan Reedy <tjreedy@udel.edu>
        - Terry Reedy <tjreedy@udel.edu>
        - terryjreedy <tjreedy@udel.edu>
      Canonical: Tian Gao <gaogaotiantian@hotmail.com>
        - gaogaotiantian <gaogaotiantian@hotmail.com>
      Canonical: Tomas R <tomas.roun8@gmail.com>
        - Tomas R. <tomas.roun8@gmail.com>
      Canonical: Valentin Haenel <esc@users.noreply.github.com>
        - esc <esc@users.noreply.github.com>
      Canonical: Victor Stinner <victor.stinner@gmail.com>
        - Victor Stinner <victor.stinner@haypocalc.com>
      Canonical: Victor Stinner <vstinner@python.org>
        - Victor Stinner <vstinner@redhat.com>
        - Victor Stinner <vstinner@wyplay.com>
      Canonical: Victorien <65306057+Viicos@users.noreply.github.com>
        - Viicos <65306057+Viicos@users.noreply.github.com>
      Canonical: W. H. Wang <mattwang44@gmail.com>
        - Wei-Hsiang (Matt) Wang <mattwang44@gmail.com>
      Canonical: Walter Doerwald <walter@livinglogic.de>
        - Walter Dörwald <walter@livinglogic.de>
      Canonical: Wansoo Kim <rladhkstn8@gmail.com>
        - marload <rladhkstn8@gmail.com>
      Canonical: Weilin Du <108666168+LamentXU123@users.noreply.github.com>
        - LamentXU <108666168+LamentXU123@users.noreply.github.com>
      Canonical: Weipeng Hong <hongweichen8888@sina.com>
        - HongWeipeng <hongweichen8888@sina.com>
      Canonical: Willow Chargin <wchargin@gmail.com>
        - William Chargin <wchargin@gmail.com>
      Canonical: Wim Jeantine-Glenn <hey@wimglenn.com>
        - wim glenn <hey@wimglenn.com>
      Canonical: Wim Jeantine-Glenn <jump@wimglenn.com>
        - wim glenn <jump@wimglenn.com>
      Canonical: Wulian <1055917385@qq.com>
        - Wulian233 <1055917385@qq.com>
      Canonical: Xianpeng Shen <xianpeng.shen@gmail.com>
        - shenxianpeng <xianpeng.shen@gmail.com>
      Canonical: Xuehai Pan <XuehaiPan@outlook.com>
        - Xuehai Pan <XuehaiPan@pku.edu.cn>
      Canonical: Yao Zuo <laike9m@users.noreply.github.com>
        - laike9m <laike9m@users.noreply.github.com>
      Canonical: Yilei Yang <hi@mangoumbrella.com>
        - Yilei <hi@mangoumbrella.com>
      Canonical: Yuki K <drsuaimqjgar@gmail.com>
        - F3eQnxN3RriK <drsuaimqjgar@gmail.com>
        - Yuki Kobayashi <drsuaimqjgar@gmail.com>
        - yuki <drsuaimqjgar@gmail.com>
      Canonical: Yury Selivanov <yselivanov@gmail.com>
        - Yury Selivanov <yselivanov@sprymix.com>
      Canonical: cvs2svn <tools@python.org>
        - unknown <tools@python.org>
      Canonical: opavliuk <40970635+opavlyuk@users.noreply.github.com>
        - opavlyuk <40970635+opavlyuk@users.noreply.github.com>
      Canonical: t k <tahia.khan@gmail.com>
        - t k <tahia.khan@utoronto.ca>
        - tahia <tahia.khan@gmail.com>
      Canonical: Éric Araujo <merwok@netwok.org>
        - Éric <merwok@netwok.org>
    
  2. StanFromIreland commented on Apr 10, 2026

    @StanFromIreland
    Member

    Use the existing mailmap-checker tool (https://github.com/cansarigol/mailmap-checker) which:

    This tool is a week old, (and I see you're the author?) IMO we'd have to audit it before adding it to pre-commit, since it is then automatically installed in many places.

  3. cansarigol commented on Apr 10, 2026

    @cansarigol
    Author

    Yes, I'm the author. The tool originated from solving this exact problem at my company - tracking down scattered user identities across our Git history. After seeing similar gaps in large Python projects (including CPython's new .mailmap), I decided to make it public.

    I completely understand the need for an audit before adopting external dependencies.

  4. StanFromIreland commented on Apr 10, 2026

    @StanFromIreland
    Member

    Also, how does the tool pick what is 'canonical'? It got my name wrong, for example.

  5. StanFromIreland commented on Apr 10, 2026

    @StanFromIreland
    Member

    I see there is also an older, and a little more popular pre-commit hook that seems to do the same thing, https://github.com/jumanjihouse/pre-commit-hooks?tab=readme-ov-file#check-mailmap?

  6. cansarigol commented on Apr 10, 2026

    @cansarigol
    Author

    Also, how does the tool pick what is 'canonical'? It got my name wrong, for example.

    When no .mailmap entry exists, the tool picks the canonical using a heuristic: it prefers names that start with a letter and contain a space. Among equally valid names, it falls back to alphabetical order. This is a known limitation.

    I'm open to improving the heuristic. One idea is to prefer the name with the most commits

  7. encukou commented on Apr 10, 2026

    @encukou
    Member

    I don't think "scattered user identities" is a problem we need to solve. Also, changing peoples' names without their consent would be quite rude.

  8. StanFromIreland commented on Apr 10, 2026

    @StanFromIreland
    Member

    I'm also -1 on this.

  9. cansarigol commented on Apr 10, 2026

    @cansarigol
    Author

    I see there is also an older, and a little more popular pre-commit hook that seems to do the same thing, https://github.com/jumanjihouse/pre-commit-hooks?tab=readme-ov-file#check-mailmap?

    My main concern was auto-fix that automatically generates and inserts the missing entries. mailmap-checker supports committer identities and cross-domain grouping via email local-part matching. But logic is same as you said

  10. vstinner commented on Apr 10, 2026

    @vstinner
    Member

    The .mailmap file was created in 2023 and then only modified once in 2025. I don't think that we need a tool validating this file automatically, since it's almost never modified. We can use such tool manually when a future change will happen.

  11. cansarigol commented on Apr 10, 2026

    @cansarigol
    Author

    To clarify — the tool doesn't change anyone's name. It detects gaps in the existing .mailmap file that CPython already maintains since 2023. I understand that a pre-commit hook may be overkill for a file that's rarely modified. The tool can also be used as a one-off CLI command (mailmap-checker check) — no hook needed.

  12. StanFromIreland commented on Apr 11, 2026

    @StanFromIreland
    Member

    Thanks for the suggestion @cansarigol, but unfortunately I'm going to close this issue. It is clear there is no support for this from the core team (if someone does, please re-open!).

    It could be used as a one-off command, but that brings us back to Petr's point:

    Also, changing peoples' names without their consent would be quite rude.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    pendingThe issue will be closed if no feedback is providedtype-featureA feature request or enhancement

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions