校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > python實現(xiàn)代碼審查自動回復(fù)消息

python實現(xiàn)代碼審查自動回復(fù)消息

熱門標(biāo)簽:天津塘沽區(qū)地圖標(biāo)注 如何申請400電話代理 江門智能電話機器人 地圖標(biāo)注可以遠(yuǎn)程操作嗎 甘肅高頻外呼系統(tǒng) 400電話在線如何申請 杭州房產(chǎn)地圖標(biāo)注 智能電話機器人調(diào)研 滴滴地圖標(biāo)注公司

在一個規(guī)范化的研發(fā)流程中,一般遵循如下流程:

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

實際上這只是一種最理想化的過程,因為我們默認(rèn)每次狀態(tài)流轉(zhuǎn)都是順利的,開發(fā)沒有毛病,測試一次就通過,現(xiàn)實中的研發(fā)

流程的情況更復(fù)雜,如圖所示。

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

根據(jù)實踐的經(jīng)驗,比較好的內(nèi)容格式如下(包含Markdown格式,因為跟蹤任務(wù)的系統(tǒng)支持這種格式):

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

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

**Details**
Remove invalid logic for admin pannel

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

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

第一步:獲取分支名稱。

為了簡化過程,默認(rèn)項目的當(dāng)前分支就是我們需要的分支,那么問題簡化為獲取當(dāng)前分支名。可以利用git的相關(guān)命令實現(xiàn),如下:

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

第二步:獲取commit id。

而獲取commit id也非常簡單,只需要如下命令:

git rev-parse HEAD

第三步:獲取提交信息。

還需要獲取提交信息,利用git log的命令進(jìn)行過濾也能得到:

git log --pretty=format:"%s" -1

git log --pretty=format命令很強大,除了獲得提交信息外,還有如下參數(shù)可以使用。

%H 提交對象(commit)的完整哈希字串 
%h 提交對象的簡短哈希字串 
%T 樹對象(tree)的完整哈希字串 
%t 樹對象的簡短哈希字串 
%P 父對象(parent)的完整哈希字串 
%p 父對象的簡短哈希字串 
%an 作者(author)的名字 
%ae 作者的電子郵件地址 
%ad 作者修訂日期(可以用 -date= 選項定制格式) 
%ar 作者修訂日期,按多久以前的方式顯示 
%cn 提交者(committer)的名字 
%ce 提交者的電子郵件地址 
%cd 提交日期 
%cr 提交日期,按多久以前的方式顯示 
%s 提交說明

所以第二步也可以使用git log命令實現(xiàn),如下所示:

git log --pretty=format:"%H" -1

當(dāng)然還需要在后面加一點人性化的感謝的話,畢竟是麻煩其他人來對你代碼進(jìn)行審核,說一些感謝的話吧,這里我就用一個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腳本和項目沒有放在一個目錄下面,所以每次在執(zhí)行g(shù)it相關(guān)命令之前都需要先cd到目標(biāo)項目目錄下。而分別執(zhí)行g(shù)it命令的時候使用subprocess.getstatusoutput()來執(zhí)行,方便獲取標(biāo)準(zhǔn)化輸出的結(jié)果。這里之所以不使用os.system來執(zhí)行命令,是因為os.system運行命令的返回值里面包括兩個部分,第一部分是命令的結(jié)果輸出,第二部分是結(jié)果是否成功的標(biāo)識符。

例如執(zhí)行os.system("git branch | sed -n '/* /s///p'")會返回如下內(nèi)容:

feature/ST-247
0

第一行是我們獲取到的分支名,第二行是成功的標(biāo)識符,0表示命令沒有任何問題。

所以我考慮使用subprocess.getstatusoutput來運行命令,這個函數(shù)會分別返回結(jié)果標(biāo)識和輸出,方便得到想要的執(zhí)行輸出結(jié)果。

雖然代碼還可以進(jìn)一步優(yōu)化,但是已經(jīng)能滿足我的需求了,運行這個腳本就能得到如下的輸出結(jié)果:

[~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.

如果改寫成面向?qū)ο蟮姆绞綍茫{(diào)用更簡單,傳遞參數(shù)也更少,采用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列表可以在增加多一點,這樣隨機獲取之下重復(fù)的概率會更少。當(dāng)然最后一段也可以自己每次diy,畢竟感謝要發(fā)自內(nèi)心的最好。

這種簡化工作流的腳本本質(zhì)是減少重復(fù)性勞動,特別是一天完成了很多個任務(wù)的時候。但是反思本身是無法被簡化的,不做工作的奴隸,而是工作的主人。
拋磚引玉,希望對自己和未來的自己也是一個還原鏡像。

Todo:

1.可以每天定時執(zhí)行這個腳本去生成回復(fù)消息。
2.通過腳本傳參來動態(tài)選擇需要被處理的項目目錄。在這個案例代碼中是hard code的,默認(rèn)是選擇了autoWork這個項目。
3.還可以考慮接入語料庫(thanks words),這樣感謝的話永不重復(fù),還能學(xué)點新單詞。:)

以上就是python實現(xiàn)代碼審查回復(fù)消息生成的詳細(xì)內(nèi)容,更多關(guān)于python 回復(fù)消息生成的資料請關(guān)注腳本之家其它相關(guān)文章!

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

標(biāo)簽:漢中 德宏 重慶 廊坊 河池 東莞 臨汾 長春

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python實現(xiàn)代碼審查自動回復(fù)消息》,本文關(guān)鍵詞  python,實現(xiàn),代碼,審查,自動,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python實現(xiàn)代碼審查自動回復(fù)消息》相關(guān)的同類信息!
  • 本頁收集關(guān)于python實現(xiàn)代碼審查自動回復(fù)消息的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    在线中文字幕一区二区| 亚洲国产精品久久久男人的天堂 | 91色婷婷久久久久合中文| 亚洲制服丝袜在线| 亚洲免费观看高清| 亚洲精品免费在线观看| 一区二区三区欧美久久| 一区免费观看视频| 一区二区三区精密机械公司| 亚洲精品ww久久久久久p站| 亚洲乱码国产乱码精品精98午夜 | 国产成人在线视频网址| 欧美激情资源网| 正在播放一区二区| 欧美亚洲国产一区二区三区va | 欧美中文字幕一区| 国产盗摄视频一区二区三区| 日韩精品成人一区二区三区| 中文字幕一区日韩精品欧美| 国产亚洲一二三区| 欧美精选在线播放| 欧美日韩在线播放一区| 91国模大尺度私拍在线视频| 91色在线porny| 色婷婷精品久久二区二区蜜臀av | 美女任你摸久久| 同产精品九九九| 精品一区二区三区欧美| 一区二区三区精密机械公司| 亚洲人成网站影音先锋播放| 一区二区三区在线影院| 一区二区三区四区视频精品免费 | 成人av在线影院| 欧美在线制服丝袜| 欧美一区二区三区视频在线观看 | 天天色天天爱天天射综合| 日韩一区精品字幕| 韩日欧美一区二区三区| 99久久精品国产一区| 欧美伊人久久大香线蕉综合69| 欧美视频中文字幕| 国产日韩高清在线| 亚洲国产精品一区二区www | 日韩欧美另类在线| 国产精品色哟哟| 日本成人在线网站| 色偷偷久久人人79超碰人人澡| 欧美一级二级三级蜜桃| 亚洲麻豆国产自偷在线| 成人黄色综合网站| 884aa四虎影成人精品一区| 亚洲自拍偷拍综合| 欧美日韩一区小说| 亚洲风情在线资源站| 欧美日韩国产高清一区| 美女任你摸久久| 日本一区二区三区久久久久久久久不| 五月婷婷激情综合| 91理论电影在线观看| 亚洲美女少妇撒尿| 精品视频色一区| 蜜桃av一区二区在线观看| 337p亚洲精品色噜噜| 六月丁香综合在线视频| 亚洲国产精品成人综合| 色综合视频在线观看| 日本不卡高清视频| 欧美国产综合一区二区| 91女神在线视频| 开心九九激情九九欧美日韩精美视频电影 | 日韩一区二区在线看| 大尺度一区二区| 男女视频一区二区| 亚洲欧洲国产日本综合| 欧美精品1区2区3区| 成人精品视频一区二区三区| 日韩专区在线视频| 日韩码欧中文字| 色偷偷久久人人79超碰人人澡| 久久精品人人做人人综合 | 免费美女久久99| 欧美午夜精品理论片a级按摩| 自拍偷拍国产精品| 欧美日韩精品一区二区三区四区| 亚洲国产成人av好男人在线观看| 欧美天堂一区二区三区| 丝袜国产日韩另类美女| 精品国产乱码久久久久久免费| 国产一区在线观看麻豆| 亚洲欧美激情小说另类| 777色狠狠一区二区三区| 国产一区二区三区av电影| 日本一区二区三级电影在线观看| 色婷婷综合久久久久中文一区二区| 亚洲综合在线五月| 精品国产青草久久久久福利| 91色乱码一区二区三区| 国产精品77777| 亚洲一区欧美一区| 国产精品久久久久四虎| 777午夜精品免费视频| 99精品视频在线观看| 国产综合久久久久影院| 香蕉加勒比综合久久| 欧美国产视频在线| 亚洲精品在线免费观看视频| 欧美日本一区二区| 日本高清不卡在线观看| 成人午夜电影久久影院| 玖玖九九国产精品| 五月天国产精品| 亚洲6080在线| 五月天亚洲婷婷| 亚洲成人免费视| 日韩国产欧美在线视频| 亚洲午夜精品在线| 日韩精品乱码av一区二区| 亚洲国产aⅴ成人精品无吗| 亚洲午夜视频在线观看| 亚洲成人精品在线观看| 婷婷久久综合九色国产成人| 亚洲在线视频免费观看| 日韩制服丝袜av| 精品影院一区二区久久久| 美女尤物国产一区| 国产在线精品免费| 91小视频免费观看| 欧美福利视频导航| 国产日韩欧美综合一区| 樱花草国产18久久久久| 日韩高清不卡一区| 韩国精品一区二区| 91一区二区三区在线播放| 91色.com| 久久色在线视频| 午夜精品一区在线观看| 看电影不卡的网站| 欧美亚洲动漫另类| 欧美国产欧美亚州国产日韩mv天天看完整 | 欧美日韩视频一区二区| 26uuu另类欧美| 亚洲第一福利一区| www.99精品| 26uuu成人网一区二区三区| 亚洲综合在线电影| 粉嫩久久99精品久久久久久夜| 欧美性大战久久久久久久蜜臀| 国产网站一区二区三区| 蜜臀a∨国产成人精品| 欧美影片第一页| 亚洲天天做日日做天天谢日日欢 | 亚洲午夜在线视频| av中文字幕亚洲| 久久久国产午夜精品| 日韩在线一区二区| 欧美日韩在线不卡| 亚洲精品高清视频在线观看| 99久久精品国产网站| 综合欧美一区二区三区| 成人丝袜18视频在线观看| 久久亚洲私人国产精品va媚药| 丝袜a∨在线一区二区三区不卡| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美国产视频在线| 不卡av在线网| 中文字幕亚洲一区二区va在线| 国产一区二区三区免费观看| 欧美极品aⅴ影院| 在线观看成人免费视频| 一区视频在线播放| 精品婷婷伊人一区三区三| 丝袜亚洲精品中文字幕一区| 日韩一卡二卡三卡四卡| 国产经典欧美精品| 中文字幕在线观看不卡| 欧美私人免费视频| 麻豆国产精品777777在线| 精品黑人一区二区三区久久 | 亚洲综合久久久| 欧美一区二区日韩一区二区| 国产主播一区二区| 亚洲日本免费电影| 欧美一区二区日韩一区二区| 韩国精品免费视频| 日韩不卡一区二区| 国产精品久久国产精麻豆99网站| 色综合久久六月婷婷中文字幕| 日韩和欧美的一区| 中文字幕一区二区5566日韩| 久久综合网色—综合色88| 色婷婷精品久久二区二区蜜臂av | av不卡免费电影| 狠狠色丁香久久婷婷综合_中| 亚洲自拍偷拍图区| 亚洲国产精品黑人久久久| 欧美精品一区二区不卡| 欧美日韩精品综合在线| 在线观看网站黄不卡| 在线观看网站黄不卡| 99视频超级精品|