tools: Add litex_contributors.py script to easily update CONTRIBUTORS file.
This commit is contained in:
parent
7179d88e8c
commit
a4be067d91
|
@ -0,0 +1,76 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
#
|
||||
# This file is part of LiteX.
|
||||
#
|
||||
# Copyright (c) 2021 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||
# SPDX-License-Identifier: BSD-2-Clause
|
||||
|
||||
# Small tool to easily update CONTRIBUTORS.
|
||||
|
||||
import os
|
||||
import sys
|
||||
import csv
|
||||
import argparse
|
||||
|
||||
# Helpers ------------------------------------------------------------------------------------------
|
||||
|
||||
def make_unique(sequence):
|
||||
seen = set()
|
||||
return [x for x in sequence if not (x in seen or seen.add(x))]
|
||||
|
||||
class Author:
|
||||
def __init__(self, email, year):
|
||||
self.email = email
|
||||
self.years = [year]
|
||||
|
||||
def add_year(self, year):
|
||||
self.years.append(year)
|
||||
self.years = make_unique(self.years)
|
||||
|
||||
# Use Git Log + Processing to create the list of Contibutors ---------------------------------------
|
||||
|
||||
def list_contributors(path):
|
||||
|
||||
# Create .csv with git log.
|
||||
os.system(f"git log --follow --pretty=format:\"%an,%ae,%aI\" {path} | sort | uniq > contribs.csv")
|
||||
|
||||
# Read .csv and process it.
|
||||
authors = {}
|
||||
with open("contribs.csv", newline='') as csvfile:
|
||||
reader = csv.reader(csvfile, delimiter=",")
|
||||
for line in reader:
|
||||
name = line[0]
|
||||
email = line[1]
|
||||
year = line[2][:4]
|
||||
if name in authors.keys():
|
||||
authors[name].add_year(int(year))
|
||||
else:
|
||||
authors[name] = Author(email, int(year))
|
||||
|
||||
# Export Contributors.
|
||||
for name, info in authors.items():
|
||||
r = "Copyright (c) "
|
||||
if len(info.years) > 1:
|
||||
years = f"{info.years[0]}-{info.years[-1]}"
|
||||
else:
|
||||
years = f"{info.years[0]}"
|
||||
r += years + " "*(9-len(years))
|
||||
r += " "
|
||||
r += name
|
||||
r += " <"
|
||||
r += info.email
|
||||
r += ">"
|
||||
print(r)
|
||||
|
||||
# Run ----------------------------------------------------------------------------------------------
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Small tool to easily update CONTRIBUTORS.")
|
||||
parser.add_argument("--path", default="./", help="Git Path.")
|
||||
args = parser.parse_args()
|
||||
|
||||
list_contributors(args.path)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue