婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python實現代碼審查自動回復消息

python實現代碼審查自動回復消息

熱門標簽:天津塘沽區地圖標注 如何申請400電話代理 江門智能電話機器人 地圖標注可以遠程操作嗎 甘肅高頻外呼系統 400電話在線如何申請 杭州房產地圖標注 智能電話機器人調研 滴滴地圖標注公司

在一個規范化的研發流程中,一般遵循如下流程:

  1. 開發階段:研發功能或者修復bug,在本地自測。
  2. 代碼審核階段:提交代碼,并請求團隊內人員做code review。
  3. 測試環境測試階段:部署到測試環境并請求測試。
  4. 發布線上待測階段:測試環境通過測試發布到線上進行測試。
  5. 驗收完成任務:線上驗證成功,關閉這個任務。

實際上這只是一種最理想化的過程,因為我們默認每次狀態流轉都是順利的,開發沒有毛病,測試一次就通過,現實中的研發

流程的情況更復雜,如圖所示。

整個過程一氣呵成,環環相扣。而其中可以被自動化的正好是第二步:請求他人進行code review的時候的反饋消息。

根據實踐的經驗,比較好的內容格式如下(包含Markdown格式,因為跟蹤任務的系統支持這種格式):

**Changes has been committed to feature/xxx-xxx**

- https://git.xxx.com/xxxx/ddaf18f9be4613c31363d4c92b8bafc3sdfdsf

**Details**
Remove invalid logic for admin pannel

由于每次走到Code Review的步驟的時候都需要寫類似的回復在任務管理系統中,所以考慮使用Python腳本去自動生成這段文字,簡化工作。

根據樣例回復進行分析,需要獲取項目的分支名(任務目標分支),項目最后一次提交的commit id去組裝第二行的git commit的鏈接,然后Details的內容可以從git log中的提交信息里面提取。

第一步:獲取分支名稱。

為了簡化過程,默認項目的當前分支就是我們需要的分支,那么問題簡化為獲取當前分支名??梢岳胓it的相關命令實現,如下:

git branch | sed -n '/\* /s///p'

第二步:獲取commit id。

而獲取commit 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.

如果改寫成面向對象的方式會更好,調用更簡單,傳遞參數也更少,采用Python3語法編寫的代碼如下所示:

#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 回復消息生成的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 使用Python建立RNN實現二進制加法的示例代碼
  • Python解析m3u8拼接下載mp4視頻文件的示例代碼
  • Python實現我的世界小游戲源代碼
  • Python爬取你好李煥英豆瓣短評生成詞云的示例代碼
  • 七種Python代碼審查工具推薦

標簽:漢中 德宏 重慶 廊坊 河池 東莞 臨汾 長春

巨人網絡通訊聲明:本文標題《python實現代碼審查自動回復消息》,本文關鍵詞  python,實現,代碼,審查,自動,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python實現代碼審查自動回復消息》相關的同類信息!
  • 本頁收集關于python實現代碼審查自動回復消息的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产一区二区伦理| 国产麻豆午夜三级精品| 国产精品久久久一本精品 | 国产午夜亚洲精品理论片色戒| 精品国精品自拍自在线| 中文字幕日韩精品一区 | 91视视频在线观看入口直接观看www| 青青国产91久久久久久| 久久av老司机精品网站导航| 成人激情av网| 91精品国产综合久久香蕉麻豆| 久久久久青草大香线综合精品| 欧美国产精品专区| 国产精品视频免费| 久久99久久久久| av电影在线观看完整版一区二区| 精品视频资源站| www国产精品av| 亚洲美女视频在线观看| 国产在线乱码一区二区三区| 91视频在线观看| 日韩三级免费观看| 国产拍揄自揄精品视频麻豆| 午夜精品久久久久| 国产一区三区三区| 欧美夫妻性生活| 一区二区三区四区激情| 国产在线乱码一区二区三区| 欧美老人xxxx18| 国产精品传媒入口麻豆| 裸体健美xxxx欧美裸体表演| 91小宝寻花一区二区三区| 欧美日本在线看| 亚洲视频一二三| 北条麻妃一区二区三区| 精品88久久久久88久久久| 亚洲香蕉伊在人在线观| k8久久久一区二区三区| 精品国产一区二区三区四区四 | 老司机一区二区| 97精品国产97久久久久久久久久久久| 精品国产成人系列| 亚洲超碰精品一区二区| 色88888久久久久久影院按摩 | 国产精品色婷婷| 国产一区二区三区视频在线播放| 欧美在线观看你懂的| 亚洲精品你懂的| 国产jizzjizz一区二区| wwwwww.欧美系列| 国产一区二区三区在线观看免费视频 | 日本成人中文字幕在线视频| 在线视频一区二区三| 亚洲品质自拍视频| 成人激情开心网| 国产精品成人网| 99精品欧美一区二区三区综合在线| 国产女同性恋一区二区| 国产成人8x视频一区二区| 久久蜜桃香蕉精品一区二区三区| 美女视频一区二区| 日韩欧美在线网站| 国产一区二区三区久久悠悠色av| 26uuu国产日韩综合| 成人丝袜18视频在线观看| 国产精品久久久久一区二区三区 | 成人一级黄色片| 国产精品久久久久久久久晋中 | 国产精品久久久久久久岛一牛影视 | 亚洲国产欧美日韩另类综合 | 欧美日韩一级黄| 五月激情综合色| 日韩一级高清毛片| 国产精品一级在线| 欧美国产日韩亚洲一区| 色综合久久九月婷婷色综合| 亚洲福利视频导航| 日韩一区二区中文字幕| 国产精品99久久久久| 亚洲人成7777| 日韩一区二区三区四区| 国产精品一区二区无线| 亚洲男同1069视频| 欧美一级午夜免费电影| 成人免费av在线| 午夜精品久久久久久久久| 久久精品亚洲乱码伦伦中文 | 国产精品久久久久国产精品日日| 一本大道av伊人久久综合| 裸体一区二区三区| 中文字幕av在线一区二区三区| 一本久久综合亚洲鲁鲁五月天| 午夜精品一区二区三区三上悠亚| 日韩精品中文字幕一区| 一本色道久久综合狠狠躁的推荐| 蜜桃视频免费观看一区| 亚洲欧美日韩国产中文在线| 日韩欧美国产三级电影视频| 99久久精品一区| 麻豆一区二区三| 亚洲精品日日夜夜| 久久综合丝袜日本网| 欧美日韩中字一区| av一二三不卡影片| 久久精品国产一区二区| 亚洲一区二区三区四区在线免费观看 | 国产传媒日韩欧美成人| 亚洲成人免费在线| 亚洲国产成人在线| 日韩一区二区三区视频| 91黄色小视频| 成人黄色av电影| 国产在线精品一区二区不卡了| 亚洲国产欧美一区二区三区丁香婷| 国产精品色婷婷| 久久亚洲精品小早川怜子| 欧美伦理电影网| 在线国产电影不卡| 成人精品免费看| 国产一区二区三区精品欧美日韩一区二区三区 | 国产精品白丝jk白祙喷水网站| 亚洲成人动漫精品| 一区二区三区四区国产精品| 日本一区二区三级电影在线观看| 欧美一级日韩一级| 91精品国产欧美一区二区成人| 欧美日免费三级在线| 91传媒视频在线播放| 99精品视频在线免费观看| 风间由美性色一区二区三区| 国产在线国偷精品产拍免费yy| 天天色天天操综合| 爽好久久久欧美精品| 亚洲午夜久久久久| 尤物在线观看一区| 亚洲精品亚洲人成人网在线播放| 中文字幕 久热精品 视频在线| 国产欧美一区二区精品秋霞影院| 亚洲精品一区二区三区影院 | 26uuu亚洲| 欧美一卡二卡在线观看| 欧美日韩电影一区| 欧美视频一区二区| 欧美日本高清视频在线观看| 欧美精品日日鲁夜夜添| 欧美一区二区国产| 精品国产免费人成在线观看| 国产丝袜欧美中文另类| 国产免费成人在线视频| 国产精品国产三级国产普通话99| 中文字幕欧美日本乱码一线二线| 国产精品久久久久久久久免费丝袜 | 欧洲亚洲国产日韩| 欧美三级韩国三级日本三斤 | 欧美亚洲综合一区| 欧美日韩视频在线第一区| 欧美精品一二三四| 日韩精品综合一本久道在线视频| 久久久久国产免费免费| 国产精品夫妻自拍| 亚洲欧美日韩久久| 首页综合国产亚洲丝袜| 国产精品中文字幕一区二区三区| www.亚洲精品| 欧美日韩国产美女| 精品久久久久久久久久久久久久久 | 日韩一级完整毛片| 久久精品一区二区三区四区| 亚洲欧美一区二区三区极速播放| 亚洲福利国产精品| 国产一区二三区好的| 日本韩国一区二区三区视频| 欧美一级夜夜爽| 国产精品黄色在线观看| 日本中文字幕一区| 国产成人精品www牛牛影视| 欧洲生活片亚洲生活在线观看| 日韩精品自拍偷拍| 亚洲乱码国产乱码精品精98午夜| 日韩av一级片| voyeur盗摄精品| 欧美成人一区二区三区| 亚洲欧美一区二区视频| 久久激情五月激情| 91成人免费在线| www精品美女久久久tv| 亚洲成人免费在线| av中文字幕亚洲| 日韩美一区二区三区| 一区二区在线看| 国产高清久久久| 欧美一区二区三区啪啪| 日韩理论片网站| 久久99久久久久久久久久久| 欧美自拍丝袜亚洲| 国产女主播一区| 日本午夜精品一区二区三区电影 | 国产欧美精品日韩区二区麻豆天美| 亚洲嫩草精品久久| 韩国女主播一区|