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 답장 메시지 생 성 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기