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