xref: /DragonOS/tools/list_contributors.py (revision 4ad52e57e612a88ab09413c7ac0072db96a93632)
1*9358ff0fSlogin# pip install gitpython
2*9358ff0fSloginimport argparse
3*9358ff0fSloginfrom git import Repo
4*9358ff0fSloginimport os
5*9358ff0fSloginimport json
6*9358ff0fSlogin
7*9358ff0fSloginparser = argparse.ArgumentParser(
8*9358ff0fSlogin    description='List contributors of DragonOS project')
9*9358ff0fSloginparser.add_argument('--since', type=str, help='Since date')
10*9358ff0fSloginparser.add_argument('--until', type=str, help='Until date')
11*9358ff0fSloginparser.add_argument('--mode', type=str, help='脚本的运行模式 可选:<all> 输出所有信息\n' +
12*9358ff0fSlogin                    ' <short> 输出贡献者名单、邮箱以及提交数量', default='all')
13*9358ff0fSloginargs = parser.parse_args()
14*9358ff0fSlogin
15*9358ff0fSloginrepo = Repo(os.path.dirname(os.path.realpath(__file__)) + "/..")
16*9358ff0fSlogin
17*9358ff0fSlogin# Get the list of contributors
18*9358ff0fSlogin
19*9358ff0fSloginformat = '--pretty={"commit":"%h", "author":"%an", "email":"%ae", "date":"%cd"}'
20*9358ff0fSlogin
21*9358ff0fSloginlogs = repo.git.log(format, since=args.since, until=args.until)
22*9358ff0fSlogin
23*9358ff0fSlogin
24*9358ff0fSloginif args.mode == 'all':
25*9358ff0fSlogin    print(logs)
26*9358ff0fSloginelif args.mode == 'short':
27*9358ff0fSlogin    logs = logs.splitlines()
28*9358ff0fSlogin    print("指定时间范围内总共有", len(logs), "次提交")
29*9358ff0fSlogin    logs = [json.loads(line) for line in logs]
30*9358ff0fSlogin    print("贡献者名单:")
31*9358ff0fSlogin
32*9358ff0fSlogin    authors = dict()
33*9358ff0fSlogin    for line in logs:
34*9358ff0fSlogin        if line['email'] not in authors.keys():
35*9358ff0fSlogin            authors[line['email']] = {
36*9358ff0fSlogin                'author': line['author'],
37*9358ff0fSlogin                'email': line['email'],
38*9358ff0fSlogin                'count': 1
39*9358ff0fSlogin            }
40*9358ff0fSlogin        else:
41*9358ff0fSlogin            authors[line['email']]['count'] += 1
42*9358ff0fSlogin
43*9358ff0fSlogin    # 排序输出
44*9358ff0fSlogin    authors = sorted(authors.values(), key=lambda x: x['count'], reverse=True)
45*9358ff0fSlogin    for author in authors:
46*9358ff0fSlogin        print(author['author'], author['email'], author['count'])
47