반응형
배경
팀 내에서, 코드 리뷰를 통해서 커밋을 한 경우 리뷰어의 이름을 커밋 메시지에 반드시 적기로 했다. 예를 들면 taptorestart란 사람이 리뷰를 했다면 커밋 메시지에 "taptorestart 리뷰 반영"이라고 적기로 한 것이다.
taptorestart의 리뷰가 반영된 커밋수를 확인하려면 어떻게 해야 할까?
해결방법
git log 명령어로 커밋 메시지에 특정 단어가 들어 있는 커밋을 검색할 수 있다.
예를 들어 git log --grep="flask"라고 검색하면 아래처럼 나오는 것을 볼 수 있다.
매번 일일이 이렇게 확인할 수는 없다.
위 검색 결과를 엑셀로 만들고 싶다면?
pandas를 활용해서 액셀 파일로 정리해서 만들 수 있다.
작업 코드 예다.
import os
import shutil
import re
import pandas as pd
def get_log(username: str, repository: str, pattern: str, start_date: str, end_date: str) -> str:
repository_path = f"./{repository}"
if os.path.exists(repository_path):
shutil.rmtree(repository_path)
os.system(f"gh repo clone {username}/{repository}")
filename = f"commit_{repository}.log"
os.system(
f"cd {repository}; git log --grep={pattern} --regexp-ignore-case --after={start_date} --before={end_date} --pretty=format:'Hash: %H %nAuthor: %aN %nDate: %aD %nMessage: %s' > ../{filename}")
return os.getcwd() + "/" + filename
def get_data(repository: str, filepath: str) -> list:
fp = open(filepath, 'r')
lines = fp.readlines()
data = []
commit = {"repository": repository}
for line in lines:
if 'Hash: ' in line:
commit_hash = re.sub(r'(Hash: | \n)', '', line)
if commit.get('hash') and commit.get('hash') != commit_hash:
data.append(commit)
commit = {"repository": repository}
commit["hash"] = commit_hash
elif 'Author: ' in line:
commit["author"] = re.sub(r'(Author: | \n)', '', line)
elif 'Date: ' in line:
commit["date"] = re.sub(r'(Date: | \n)', '', line)
elif 'Message: ' in line:
commit["message"] = re.sub(r'(Message: | \n)', '', line)
data.append(commit)
return data
if __name__ == '__main__':
"""
pip install pandas
pip install openpyxl
gh 설치 및 로그인된 상태에서 실행
"""
username = "taptorestart"
repositories = ["python-backend-examples"] # 작업 저장소 목록 추가
start_date = "2022-01-01"
end_date = "2022-12-31"
data = []
pattern = "'fastapi\|flask'" # 검색하고 싶은 단어 추가 or \| 로 표시 예) fastapi 와 flask 검색하고 싶은 경우 fastapi\|flask
for repository in repositories:
log_file = get_log(username, repository, pattern, start_date, end_date)
data += get_data(repository, log_file)
df = pd.DataFrame(data)
df.to_excel(f"commit.xlsx")
위 코드를 실행하면 commit.xlsx 파일이 생성된다.
실행 결과 예다.
반응형