From 2c8081e83284b39b649f0b8cca8aeec0e6446a6c Mon Sep 17 00:00:00 2001 From: "Azamat H. Hackimov" Date: Fri, 1 Nov 2024 01:10:22 +0300 Subject: [PATCH] Implement git-contributors.py Add tool for creating credits file from git history. --- scripts/data/fullhog/d3-linux-fullhog.txt | 1 + scripts/data/fullhog/d3-osx-fullhog.txt | 1 + scripts/data/fullhog/d3-win-fullhog.txt | 1 + scripts/data/fullhog/oscredits.txt | 48 +++++++++++++ tools/git-contributors/README.md | 24 +++++++ tools/git-contributors/git-contributors.py | 83 ++++++++++++++++++++++ tools/git-contributors/map-names.txt | 2 + tools/git-contributors/no-add.txt | 2 + 8 files changed, 162 insertions(+) create mode 100644 scripts/data/fullhog/oscredits.txt create mode 100644 tools/git-contributors/README.md create mode 100755 tools/git-contributors/git-contributors.py create mode 100644 tools/git-contributors/map-names.txt create mode 100644 tools/git-contributors/no-add.txt diff --git a/scripts/data/fullhog/d3-linux-fullhog.txt b/scripts/data/fullhog/d3-linux-fullhog.txt index 4aaac42f..749bb0fb 100644 --- a/scripts/data/fullhog/d3-linux-fullhog.txt +++ b/scripts/data/fullhog/d3-linux-fullhog.txt @@ -54,6 +54,7 @@ LEVELS2.str pxomain.ogf pxogame.ogf gamecredits.txt +oscredits.txt loki.ogf aigame2.so AIGame3.so diff --git a/scripts/data/fullhog/d3-osx-fullhog.txt b/scripts/data/fullhog/d3-osx-fullhog.txt index 93b85e4e..af19fee6 100644 --- a/scripts/data/fullhog/d3-osx-fullhog.txt +++ b/scripts/data/fullhog/d3-osx-fullhog.txt @@ -54,6 +54,7 @@ LEVELS2.str pxomain.ogf pxogame.ogf gamecredits.txt +oscredits.txt loki.ogf aigame2.dylib AIGame3.dylib diff --git a/scripts/data/fullhog/d3-win-fullhog.txt b/scripts/data/fullhog/d3-win-fullhog.txt index 633db279..4586ec0d 100644 --- a/scripts/data/fullhog/d3-win-fullhog.txt +++ b/scripts/data/fullhog/d3-win-fullhog.txt @@ -54,6 +54,7 @@ LEVELS2.str pxomain.ogf pxogame.ogf gamecredits.txt +oscredits.txt loki.ogf aigame2.dll AIGame3.dll diff --git a/scripts/data/fullhog/oscredits.txt b/scripts/data/fullhog/oscredits.txt new file mode 100644 index 00000000..c61c8a3f --- /dev/null +++ b/scripts/data/fullhog/oscredits.txt @@ -0,0 +1,48 @@ +; This file was autogenerated by git-contributors.py + + +*320 100 320 100 8 +!OPEN SOURCE CONTRIBUTORS + +https://github.com/DescentDevelopers/Descent3 + +Andrew Grigorev +Azamat H. Hackimov +Bernhard M. Wiedemann +Bryan Perris +C.W. "Madd The Sane" Betts +Chris Sarbora +Christian Baumann +Dan Raviv +Daniel Gibson +Edu Garcia +Eric Slutz +GravisZro +InsanityBringer +Jacob Coby +Jan Engelhardt +Jason Yundt +Jeff Slutter +JeodC +Kevin Bentley +Kevin Caccamo +Kreeblah +Louis Gombert +Martin +Matt Stephenson +Oskar Strengbohm +Peter Simard +Phil Ashby +Ryan C. Gordon +Sebastian Holtermann +Taylor Richards +Thomas Otto +Thomas Ross +bperris +scivision +sirken +thfrwn +vlohacks +ziplantil + +END diff --git a/tools/git-contributors/README.md b/tools/git-contributors/README.md new file mode 100644 index 00000000..51dc7e5b --- /dev/null +++ b/tools/git-contributors/README.md @@ -0,0 +1,24 @@ +# git-contributors.py + +**git-contributors.py** - script to generate contributors list from git history. + +## Requirements + +* Recent python (3.12+) +* GitPython package (https://pypi.org/project/GitPython/) + +## Usage + +Just run `git-contributors.py`, review and commit `scripts/data/fullhog/oscredits.txt`. +You're now awesome. + +**Remember regenerate file before releasing new version!** + +## Customization + +Tool provides two ways of customization: + +* Exclude particular name from list of contributors (file `no-add.txt`, + one name per line, comments begins with `#`). +* Replace name in list of contributors with other one (file `map-names.txt`, + one entry per line in format `git_name:replace_name`, comments begins with `#`). diff --git a/tools/git-contributors/git-contributors.py b/tools/git-contributors/git-contributors.py new file mode 100755 index 00000000..4a7deda4 --- /dev/null +++ b/tools/git-contributors/git-contributors.py @@ -0,0 +1,83 @@ +#!/usr/bin/python3 + +# Descent 3 +# Copyright (C) 2024 Descent Developers +# +# This program 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 of the License, or +# (at your option) any later version. +# +# This program 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 this program. If not, see . + +from git import Repo +import argparse +import re + + +def strip_comments(code): + code = str(code) + return re.sub(r'(#.*)?\n?', '', code) + + +def main(): + parser = argparse.ArgumentParser( + prog="git-contributors.py", + description="Script to generate contributors list from git history.", + ) + parser.add_argument( + "--output", "-o", + required=False, + default="../../scripts/data/fullhog/oscredits.txt", + help="output file", + ) + args = parser.parse_args() + + noadds = list() + name_maps = dict() + with open("no-add.txt") as noadd_file: + for line in noadd_file: + name = strip_comments(line) + noadds.append(name.strip()) + with open("map-names.txt") as map_file: + for line in map_file: + (git_name, replace_name) = strip_comments(line.strip()).split(":") + name_maps.update({git_name: replace_name}) + + repo = Repo(search_parent_directories=True) + commits = list(repo.iter_commits("main")) + authors = set() + + for commit in commits: + if commit.author.name not in noadds: + if commit.author.name in name_maps.keys(): + authors.add(name_maps[commit.author.name]) + else: + authors.add(commit.author.name) + + with open(args.output, "w") as result_file: + result_file.write("; This file was autogenerated by git-contributors.py\n") + result_file.write("\n") + result_file.write("\n") + result_file.write("*320 100 320 100 8\n") + result_file.write("!OPEN SOURCE CONTRIBUTORS\n") + result_file.write("\n") + result_file.write("https://github.com/DescentDevelopers/Descent3\n") + result_file.write("\n") + + for author in sorted(authors): + result_file.write(f"{author}\n") + + result_file.write("\n") + result_file.write("END\n") + print("All done!") + + +if __name__ == "__main__": + main() diff --git a/tools/git-contributors/map-names.txt b/tools/git-contributors/map-names.txt new file mode 100644 index 00000000..bae397c3 --- /dev/null +++ b/tools/git-contributors/map-names.txt @@ -0,0 +1,2 @@ +C.W. Betts:C.W. "Madd The Sane" Betts +Thomas Roß:Thomas Ross # No ß in current font \ No newline at end of file diff --git a/tools/git-contributors/no-add.txt b/tools/git-contributors/no-add.txt new file mode 100644 index 00000000..b076a24f --- /dev/null +++ b/tools/git-contributors/no-add.txt @@ -0,0 +1,2 @@ +Edu García # Superseded by 'Edu Garcia' +Jeod # Superseded by 'JeodC' \ No newline at end of file