From 682da2d0e52a5b081d9751f15e0391ed9e2d9fda Mon Sep 17 00:00:00 2001 From: Damien Picard Date: Mon, 22 Jun 2026 21:11:02 +0200 Subject: [PATCH] Credits Script: Report duplicate authors Also add duplicate identities found using this report to the canonical authors list. Ref !160527 --- tools/utils/credits_git_gen.py | 15 ++++++ tools/utils/git_data_canonical_authors.py | 56 +++++++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/tools/utils/credits_git_gen.py b/tools/utils/credits_git_gen.py index 76261a00397..915fd4ae655 100755 --- a/tools/utils/credits_git_gen.py +++ b/tools/utils/credits_git_gen.py @@ -402,6 +402,21 @@ def main() -> int: credits.process(GitCommitIter(args.source_dir, commit_range), jobs=jobs) + # Report when a single name has multiple entries, + # as they may need deduplicating in git_data_canonical_authors.py. + unique_author_names = {} + for author in credits.users: + author_name, author_email = author.rsplit("<", 1) + author_name = author_name.rstrip() + author_email = "<" + author_email + unique_author_name = unique_author_names.setdefault(author_name, []) + unique_author_name.append(author_email) + for name, emails in sorted(unique_author_names.items()): + if len(emails) > 1: + print(f"More than one entry for {name}:") + for email in sorted(emails): + print(f' "{name} {email}",') + credits.write( "credits.html", is_main_credits=True, diff --git a/tools/utils/git_data_canonical_authors.py b/tools/utils/git_data_canonical_authors.py index 438bb6973bd..94a81f50798 100644 --- a/tools/utils/git_data_canonical_authors.py +++ b/tools/utils/git_data_canonical_authors.py @@ -60,6 +60,7 @@ def canonical_author_map() -> dict[str, str]: ), "Alex Fuller ": ( "Alex ", + "Alex Fuller <>", "Alex Fuller ", "Alex Fuller ", ), @@ -76,6 +77,7 @@ def canonical_author_map() -> dict[str, str]: "Alexandre Cardaillac ", ), "Ale\u0161 Jelov\u010dan ": ( + "Ale\u0161 Jelov\u010dan <33534+frogstomp@noreply.localhost>", "Ale\u0161 Jelov\u010dan ", "frogstomp ", ), @@ -176,6 +178,7 @@ def canonical_author_map() -> dict[str, str]: ), "Brady Johnston ": ( "Brady Johnston <36021261+BradyAJohnston@users.noreply.github.com>", + "Brady Johnston <>", "Brady Johnston ", ), "Brecht Van Lommel ": ( @@ -199,6 +202,7 @@ def canonical_author_map() -> dict[str, str]: "Campbell Barton ": ( "Campbell Barton ", "Campbell Barton ", + "Campbell Barton ", ), "Carlo Andreacchio ": ( "Carlo Andreacchio ", @@ -247,13 +251,16 @@ def canonical_author_map() -> dict[str, str]: "Cl\u00c3\u00a9ment Foucault ", "Cl\u00e9ment ", "Cl\u00e9ment FOUCAULT ", + "Cl\u00e9ment Foucault <>", "Cl\u00e9ment Foucault ", "Cl\u00e9ment Foucault ", "fclem ", ), "Colin Basnett ": ( + "Colin Basnett <5035660+cmbasnett@users.noreply.github.com>", "Colin Basnett ", "Colin Basnett ", + "Colin Basnett ", ), "Colin Marmond ": ( "Colin ", @@ -270,6 +277,7 @@ def canonical_author_map() -> dict[str, str]: "Dalai Felinto ", ), "Damien Picard ": ( + "Damien Picard <>", "Damien Picard ", "Damien Picard ", "Damien Picard ", @@ -283,6 +291,9 @@ def canonical_author_map() -> dict[str, str]: "ZanQdo ", "zanqdo ", ), + "Dave Pagurek ": ( + "Dave Pagurek ", + ), "David Friedli ": ( "David ", ), @@ -363,6 +374,9 @@ def canonical_author_map() -> dict[str, str]: "Gaia Clary ", "gaiaclary ", ), + "Gaktan ": ( + "Gaktan ", + ), "Geedoubleu ": ( "Geedoubleu ", ), @@ -387,6 +401,9 @@ def canonical_author_map() -> dict[str, str]: "mano-wii ", "mano-wii ", ), + "Gianluca Giampuzzo ": ( + "Gianluca Giampuzzo <>", + ), "Gilberto Rodrigues ": ( "Gilberto Rodrigues ", "Gilberto.R ", @@ -422,10 +439,14 @@ def canonical_author_map() -> dict[str, str]: "Henrik Dick (weasel) <>", "Henrik Dick ", ), + "Henry Jiang ": ( + "Henry Jiang ", + ), "Himanshi Kalra ": ( "Himanshi Kalra ", ), "Howard Trickey ": ( + "Howard Trickey <5005+howardt@noreply.localhost>", "Howard Trickey ", "Howard Trickey ", "howardt ", @@ -461,6 +482,7 @@ def canonical_author_map() -> dict[str, str]: "Iyad Ahmed ", ), "Jacques Lucke ": ( + "Jacques Lucke <>", "Jacques Lucke ", "Jacques Lucke ", ), @@ -485,6 +507,9 @@ def canonical_author_map() -> dict[str, str]: "jeroen@blender.org ", "jeroen@blender.org ", ), + "Jerry Wei <79512937+JerryWeii-27@users.noreply.github.com>": ( + "Jerry Wei ", + ), "Jesse Yurkovich ": ( "Jesse Y ", "Jesse Yurkovich ", @@ -496,8 +521,12 @@ def canonical_author_map() -> dict[str, str]: "Johannes J ": ( "Johannes J ", ), + "John Kinzel ": ( + "John Kinzel ", + ), "John Kiril Swenson ": ( "John Kiril Swenson ", + "John Kiril Swenson ", "John Swenson ", ), "Johnny Matthews ": ( @@ -529,6 +558,7 @@ def canonical_author_map() -> dict[str, str]: "joshua-maros <60271685+joshua-maros@users.noreply.github.com>", ), "Julian Eisel ": ( + "Julian Eisel <>", "Julian Eisel ", "Julian Eisel ", "Julian Eisel ", @@ -569,6 +599,7 @@ def canonical_author_map() -> dict[str, str]: "K\u00e9vin Dietrich ": ( "Kevin Dietrich ", "K\u00e9vin Dietrich ", + "K\u00e9vin Dietrich ", ), "Laurynas Duburas ": ( "Laurynas Duburas ", @@ -594,15 +625,20 @@ def canonical_author_map() -> dict[str, str]: "Luca Rood ": ( "Luca Rood ", ), + "Lucas Boutrot ": ( + "Lucas Boutrot ", + ), "Lucas Tadeu Teixeira ": ( "Lucas Tadeu ", ), "Lukas Stockner ": ( + "Lukas Stockner <>", "Lukas Stockner ", "Lukas Stockner ", ), "Lukas T\u00f6nne ": ( "Lukas Toenne ", + "Lukas T\u00f6nne <>", "Lukas T\u00f6nne ", "Lukas T\u00f6nne ", ), @@ -643,6 +679,7 @@ def canonical_author_map() -> dict[str, str]: "Martijn Berger ", ), "Martijn Versteegh ": ( + "Martijn Versteegh <23055+baardaap@noreply.localhost>", "Martijn Versteegh ", "Martijn Versteegh ", "Martijn Versteegh ", @@ -697,6 +734,8 @@ def canonical_author_map() -> dict[str, str]: "Miguel Porces ", ), "Miguel Pozo ": ( + "Miguel Pozo <>", + "Miguel Pozo ", "Miguel Pozo ", "Miguel Pozo ", ), @@ -728,6 +767,9 @@ def canonical_author_map() -> dict[str, str]: "Nathan Vegdahl ": ( "Nathan Vegdahl ", ), + "Nazir Galimov ": ( + "Nazir Galimov ", + ), "Nicholas Bishop ": ( "Nicholas Bishop ", ), @@ -803,6 +845,7 @@ def canonical_author_map() -> dict[str, str]: "Pedro A ", ), "Philipp Oeser ": ( + "Philipp Oeser <>", "Philipp Oeser ", "Philipp Oeser ", "Philipp Oeser ", @@ -848,6 +891,8 @@ def canonical_author_map() -> dict[str, str]: "Red Mser ": ( "RedMser ", "RedMser ", + "RedMser ", + "RedMser ", ), "Richard Antalik ": ( "Richard Antalik ", @@ -884,6 +929,7 @@ def canonical_author_map() -> dict[str, str]: ), "Sebastian Herholz ": ( "Sebastian Herholz ", + "Sebastian Herholz ", "Sebastian Herholz ", "Sebastian Herholz ", "Sebastian Herhoz ", @@ -966,6 +1012,9 @@ def canonical_author_map() -> dict[str, str]: "Thomas Szepe ": ( "HG1 ", ), + "Tibo Stans <192132910+stanzerelli@users.noreply.github.com>": ( + "Tibo Stans ", + ), "Tobias Kummer | Overmind Studios ": ( "Tobias Kummer | Overmind Studios ", "tobi ", @@ -1084,6 +1133,7 @@ def canonical_author_map() -> dict[str, str]: "Jon Denning ", ), "luz paz ": ( + "luz paz <>", "luz paz ", "luzpaz ", "luzpaz-2 ", @@ -1097,6 +1147,12 @@ def canonical_author_map() -> dict[str, str]: "ok_what ": ( "ok what ", ), + "syzygial ": ( + "syzygial ", + ), + "unerr ": ( + "unerr ", + ), "\u4f73\u96ef \u7a0b ": ( "Chiaki_meow ", "\u4f73\u96ef \u7a0b ",