python 코드 심사 자동 답장 실현
4.567917.개발 단계:연구 개발 기능 또는 bug 를 복원 하여 현지에서 자체 측정 합 니 다4.567917.코드 심사 단계:코드 를 제출 하고 팀 내 인원 에 게 code review 를 요청 합 니 다4.567917.테스트 환경 테스트 단계:테스트 환경 에 배치 하고 테스트 를 요청 합 니 다4.567917.온라인 테스트 단계 발표:테스트 환경 은 테스트 를 통 해 온라인 으로 발표 하여 테스트 한다4.567917.검수 완료 임무:온라인 검증 성공,이 임 무 를 닫 습 니 다실제로 이것 은 가장 이상 적 인 과정 일 뿐이다.왜냐하면 우 리 는 매번 상태 가 순조롭게 돌아 가 고 개발 에 문제 가 없 으 며 테스트 를 한 번 에 통과 하 는 것 을 묵인 하기 때문이다.현실 에서 의 연구 개발 이다.
그림 과 같이 절차 의 상황 이 더욱 복잡 하 다.
전체 과정 이 단숨에 이 루어 져 서로 연결 되 어 있다.그 중에서 자동 화 될 수 있 는 것 은 바로 두 번 째 단계 이다.다른 사람 에 게 code review 를 요청 할 때의 피드백 메시지 이다.
실천 경험 에 따 르 면 비교적 좋 은 내용 형식 은 다음 과 같다.
**Changes has been committed to feature/xxx-xxx**
- https://git.xxx.com/xxxx/ddaf18f9be4613c31363d4c92b8bafc3sdfdsf
**Details**
Remove invalid logic for admin pannel
Code Review 단계 에 들 어 갈 때마다 작업 관리 시스템 에 비슷 한 답장 을 써 야 하기 때문에 Python 스 크 립 트 를 사용 하여 이 문 자 를 자동 으로 생 성하 고 작업 을 간소화 하 는 것 을 고려 합 니 다.샘플 답장 을 분석 하려 면 프로젝트 의 분기 명(작업 목표 분기)을 가 져 와 야 합 니 다.프로젝트 가 마지막 으로 제출 한 commt id 는 두 번 째 줄 의 git commt 링크 를 조립 한 다음 에 Details 의 내용 은 git log 에서 제출 한 정보 에서 추출 할 수 있 습 니 다.
첫 번 째 단계:분기 이름 가 져 오기.
과정 을 간소화 하기 위해 기본 항목 의 현재 지점 은 우리 가 필요 로 하 는 지점 입 니 다.그러면 문 제 는 현재 지점 이름 을 얻 는 것 으로 간 화 됩 니 다.git 의 관련 명령 을 이용 하여 다음 과 같이 실현 할 수 있 습 니 다.
git branch | sed -n '/\* /s///p'
두 번 째 단계:commt id 가 져 오기.commt id 를 가 져 오 는 것 도 간단 합 니 다.다음 명령 만 있 으 면 됩 니 다.
git rev-parse HEAD
세 번 째 단계:제출 정 보 를 얻 습 니 다.제출 정 보 를 가 져 와 야 합 니 다.git log 명령 을 사용 하여 걸 러 도 얻 을 수 있 습 니 다.
git log --pretty=format:"%s" -1
git log--pretty=format 명령 은 매우 강력 합 니 다.제출 정 보 를 얻 는 것 외 에 다음 과 같은 매개 변 수 를 사용 할 수 있 습 니 다.
%H (commit)
%h
%T (tree)
%t
%P (parent)
%p
%an (author)
%ae
%ad ( -date= )
%ar ,
%cn (committer)
%ce
%cd
%cr ,
%s
따라서 두 번 째 단 계 는 git log 명령 을 사용 하여 이 루어 질 수 있 습 니 다.다음 과 같 습 니 다.
git log --pretty=format:"%H" -1
물론 뒤에 인성 화 된 감 사 를 더 해 야 합 니 다.다른 사람 이 당신 의 코드 에 대해 심 사 를 하고 감사 한 말 을 하 는 것 이 귀 찮 기 때 문 입 니 다.여 기 는 제 가 list 로 감사 한 말 을 담 은 다음 에 무 작위 로 한 단락 을 얻어 마지막 에 붙 이 겠 습 니 다.프로 세 스 를 위 한 방식 으로 작성 된다 면 다음 코드 를 작성 할 수 있 습 니 다.
#coding=utf-8
#!/usr/bin/python
import os, subprocess
import random
# use subprocess to get the current branch name from output
def get_branch_name(cd_path):
os.chdir(cd_path)
status, branch_name = subprocess.getstatusoutput("git branch | sed -n '/\* /s///p'")
# print(output)
# exit(0)
return branch_name
def get_latest_git_log(cd_path):
"""
docstring
"""
os.chdir(cd_path)
status, log_info = subprocess.getstatusoutput("git log --pretty=format:\"%s\" -1")
return log_info
def get_latest_commit_id(cd_path):
os.chdir(cd_path)
status, commit_id = subprocess.getstatusoutput("git rev-parse HEAD")
return commit_id
def get_reviewer_by_random(reviewers):
return random.choice(reviewers)
def get_thanks_words_by_random(thanks_words):
return random.choice(thanks_words)
def create_comment(reviewers, branch_name, log_info, commit_id, thanks_words):
print(get_reviewer_by_random(reviewers))
print("*Changes made has been committed to " + branch_name + "*")
print("- https://git.xxxxx.com/someproject/subname/-/commit/" + commit_id)
print("*Details*")
print("-" + log_info)
print(get_thanks_words_by_random(thanks_words))
branch_name = get_branch_name('/Users/tony/www/autoWork')
log_info = get_latest_git_log('/Users/tony/www/autoWork')
commit_id = get_latest_commit_id('/Users/tony/www/autoWork')
reviewers = [
'[~Harry]',
'[~Tom]'
]
random_thanks_words = [
'Review it please, thanks.',
'Actually, I am glad to see you have time to review it, thanks a lot.',
'Please check it if you have free time, thanks.',
'Check it please.'
'Waiting for your code review, thank you.'
]
create_comment(reviewers, branch_name, log_info, commit_id, random_thanks_words)
Python 스 크 립 트 와 항목 이 디 렉 터 리 아래 에 놓 여 있 지 않 기 때문에 git 관련 명령 을 실행 하기 전에 대상 항목 디 렉 터 리 에 먼저 cd 를 넣 어야 합 니 다.git 명령 을 각각 실행 할 때 subprocess.getstatusoutput()를 사용 하여 표준화 출력 결 과 를 쉽게 얻 을 수 있 습 니 다.여기 서 os.system 을 사용 하지 않 는 이 유 는 os.system 이 명령 을 실행 하 는 반환 값 에 두 부분 이 포함 되 어 있 기 때 문 입 니 다.첫 번 째 부분 은 명령 의 결과 출력 이 고 두 번 째 부분 은 결과 가 성공 적 인지 여 부 를 나타 내 는 식별 자 입 니 다.예 를 들 어 os.system("git branch|sed-n"/*/s///p")을 실행 하면 다음 과 같은 내용 을 되 돌려 줍 니 다.
feature/ST-247
0
첫 번 째 줄 은 우리 가 얻 은 분기 이름 이 고 두 번 째 줄 은 성공 적 인 식별 자 이 며 0 은 명령 에 문제 가 없다 는 것 을 나타 낸다.그래서 저 는 subprocess.getstatusoutput 를 사용 하여 명령 을 실행 하 는 것 을 고려 합 니 다.이 함 수 는 각각 결과 표지 와 출력 을 되 돌려 주 고 원 하 는 출력 결 과 를 쉽게 얻 을 수 있 습 니 다.
코드 는 더 최적화 할 수 있 지만 제 요 구 를 만족 시 킬 수 있 습 니 다.이 스 크 립 트 를 실행 하면 다음 과 같은 출력 결 과 를 얻 을 수 있 습 니 다.
[~Harry]
*Changes made has been committed to feature/ST-247*
- https://git.xxxxx.com/someproject/subname/-/commit/d21033057677e6d49d9cea07c64c49e35529545dx
*Details*
- Remove some invalid logic
Please check it if you have free time, thanks.
대상 을 대상 으로 하 는 방식 으로 바 꾸 면 더 좋 고 호출 이 간단 하 며 전달 매개 변수 도 적 습 니 다.Python 3 문법 으로 작 성 된 코드 는 다음 과 같 습 니 다.
#coding=utf-8
#!/usr/bin/python
import os
import subprocess
import random
class CommitComment:
def __init__(self, project_path: str, reviewers: list, thanks_words: list):
self.project_path = project_path
self.reviewers = reviewers
self.thanks_words = thanks_words
# use subprocess to get the current branch name from output
def get_branch_name(self) -> str:
os.chdir(self.project_path)
status, branch_name = subprocess.getstatusoutput("git branch | sed -n '/\* /s///p'")
return branch_name
# use subprocess to get the latest commit message from git log
def get_latest_git_log(self) -> str:
os.chdir(self.project_path)
status, log_info = subprocess.getstatusoutput("git log --pretty=format:\"%s\" -1")
return log_info
# use subprocess to get the latest commit id from git log
def get_latest_commit_id(self) -> str:
os.chdir(self.project_path)
status, commit_id = subprocess.getstatusoutput("git rev-parse HEAD")
return commit_id
def get_reviewer_by_random(self) -> str:
return random.choice(self.reviewers)
def get_thanks_words_by_random(self) -> str:
return random.choice(self.thanks_words)
def create_comment(self):
print(self.get_reviewer_by_random())
print("*Changes has been committed to " + self.get_branch_name() + "*")
print("- https://git.xxxx.com/MyProject/ProjectName/-/commit/" + self.get_latest_commit_id())
print("*Details*")
print("-" + self.get_latest_git_log())
print(self.get_thanks_words_by_random())
thanks_words = [
'Review it please, thanks.',
'Actually, I am glad to see you have time to review it, thanks a lot.',
'Please check it if you have free time, thanks.',
'Check it please.'
'Waiting for your code review, thank you.'
]
reviewers = [
'[~Harry]',
'[~Tom]'
]
comment = CommitComment('/Users/tony/www/autoWork', reviewers, thanks_words)
comment.create_comment() # will print out the complete comment
thanks_words 목록 은 조금 더 늘 릴 수 있 습 니 다.무 작위 로 얻 으 면 중복 되 는 확률 이 더 적 습 니 다.물론 마지막 단락 도 매번 diy 할 수 있 습 니 다.감사 함 은 마음 에서 우 러 나 오 는 것 이 가장 좋 습 니 다.이런 워 크 플 로 를 간소화 하 는 스 크 립 트 의 본질은 반복 적 인 노동 을 줄 이 는 것 이다.특히 하루 에 많은 임 무 를 완 수 했 을 때.그러나 반성 자 체 는 간소화 되 지 않 고 일 을 하지 않 는 노예 가 아니 라 일의 주인 이다.
벽돌 을 던 져 옥 을 끌 어 들 이 고 자신 과 미래의 자신 에 게 도 거울 이 되 기 를 바란다.
Todo:
1.이 스 크 립 트 를 매일 정시 에 실행 하여 답장 메 시 지 를 생 성 할 수 있 습 니 다.
2.스 크 립 트 를 통 해 처리 해 야 할 항목 디 렉 터 리 를 동적 으로 선택 합 니 다.이 사례 코드 에 서 는 hard code 입 니 다.기본적으로 autoWork 라 는 항목 을 선 택 했 습 니 다.
3.언어 자료 실(thanks words)에 접속 하 는 것 도 고려 할 수 있 습 니 다.이렇게 감사 하면 반복 되 지 않 고 새로운 단 어 를 배 울 수 있 습 니 다.:)
이상 은 python 이 코드 심사 답장 메시지 생 성 을 실현 하 는 상세 한 내용 입 니 다.python 답장 메시지 생 성 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.