欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2021年02月01日 11:37:21   作者:freephp  
這篇文章主要介紹了python實(shí)現(xiàn)代碼審查回復(fù)消息生成的示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下

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

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

實(shí)際上這只是一種最理想化的過(guò)程,因?yàn)槲覀兡J(rèn)每次狀態(tài)流轉(zhuǎn)都是順利的,開(kāi)發(fā)沒(méi)有毛病,測(cè)試一次就通過(guò),現(xiàn)實(shí)中的研發(fā)

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

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

根據(jù)實(shí)踐的經(jīng)驗(yàn),比較好的內(nèi)容格式如下(包含Markdown格式,因?yàn)楦櫲蝿?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的步驟的時(shí)候都需要寫(xiě)類似的回復(fù)在任務(wù)管理系統(tǒng)中,所以考慮使用Python腳本去自動(dòng)生成這段文字,簡(jiǎn)化工作。

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

第一步:獲取分支名稱。

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

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

第二步:獲取commit id。

而獲取commit id也非常簡(jiǎn)單,只需要如下命令:

git rev-parse HEAD

第三步:獲取提交信息。

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

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

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

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

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

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

當(dāng)然還需要在后面加一點(diǎn)人性化的感謝的話,畢竟是麻煩其他人來(lái)對(duì)你代碼進(jìn)行審核,說(shuō)一些感謝的話吧,這里我就用一個(gè)list來(lái)裝一些感謝的話,然后隨機(jī)獲取一段貼到最后。
如果是以面向過(guò)程的方式去編寫(xiě),那么可以編寫(xiě)如下代碼:

#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腳本和項(xiàng)目沒(méi)有放在一個(gè)目錄下面,所以每次在執(zhí)行g(shù)it相關(guān)命令之前都需要先cd到目標(biāo)項(xiàng)目目錄下。而分別執(zhí)行g(shù)it命令的時(shí)候使用subprocess.getstatusoutput()來(lái)執(zhí)行,方便獲取標(biāo)準(zhǔn)化輸出的結(jié)果。這里之所以不使用os.system來(lái)執(zhí)行命令,是因?yàn)閛s.system運(yùn)行命令的返回值里面包括兩個(gè)部分,第一部分是命令的結(jié)果輸出,第二部分是結(jié)果是否成功的標(biāo)識(shí)符。

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

feature/ST-247
0

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

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

雖然代碼還可以進(jìn)一步優(yōu)化,但是已經(jīng)能滿足我的需求了,運(yùn)行這個(gè)腳本就能得到如下的輸出結(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.

如果改寫(xiě)成面向?qū)ο蟮姆绞綍?huì)更好,調(diào)用更簡(jiǎn)單,傳遞參數(shù)也更少,采用Python3語(yǔ)法編寫(xiě)的代碼如下所示:

#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列表可以在增加多一點(diǎn),這樣隨機(jī)獲取之下重復(fù)的概率會(huì)更少。當(dāng)然最后一段也可以自己每次diy,畢竟感謝要發(fā)自內(nèi)心的最好。

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

Todo:

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

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

相關(guān)文章

  • python 利用已有Ner模型進(jìn)行數(shù)據(jù)清洗合并代碼

    python 利用已有Ner模型進(jìn)行數(shù)據(jù)清洗合并代碼

    今天小編就為大家分享一篇python 利用已有Ner模型進(jìn)行數(shù)據(jù)清洗合并代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python Pool常用函數(shù)用法總結(jié)

    python Pool常用函數(shù)用法總結(jié)

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python Pool常用函數(shù)用法總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2021-04-04
  • 解析python的局部變量和全局變量

    解析python的局部變量和全局變量

    函數(shù)內(nèi)部定義的變量就叫局部變量而如果一個(gè)變量既能在一個(gè)函數(shù)中使用,也可以在其他函數(shù)中使用,這樣的變量就是全局變量。 本文給大家介紹python的局部變量和全局變量的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2019-08-08
  • Python自動(dòng)化爬取天眼查數(shù)據(jù)的實(shí)現(xiàn)

    Python自動(dòng)化爬取天眼查數(shù)據(jù)的實(shí)現(xiàn)

    本文將結(jié)合實(shí)例代碼,介紹Python自動(dòng)化爬取天眼查數(shù)據(jù)的實(shí)現(xiàn),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • Python必備基礎(chǔ)之閉包和裝飾器知識(shí)總結(jié)

    Python必備基礎(chǔ)之閉包和裝飾器知識(shí)總結(jié)

    都2021年了Python的閉包和裝飾器難道你還不會(huì)?今天就帶大家詳細(xì)總結(jié)一下Python閉包和裝飾器的相關(guān)知識(shí),需要的朋友可以參考下
    2021-06-06
  • 利用Python+PyQt5實(shí)現(xiàn)簡(jiǎn)易瀏覽器的實(shí)戰(zhàn)記錄

    利用Python+PyQt5實(shí)現(xiàn)簡(jiǎn)易瀏覽器的實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于如何利用Python+PyQt5實(shí)現(xiàn)簡(jiǎn)易瀏覽器的相關(guān)資料,Qt 的主要優(yōu)勢(shì)是可以開(kāi)發(fā)跨平臺(tái)的圖形界面程序,基于 Qt 的應(yīng)用能夠借助于各平臺(tái)的原生性在不同類的設(shè)備上運(yùn)行,而無(wú)須修改任何代碼庫(kù),需要的朋友可以參考下
    2021-07-07
  • python中pivot()函數(shù)基礎(chǔ)知識(shí)點(diǎn)

    python中pivot()函數(shù)基礎(chǔ)知識(shí)點(diǎn)

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python中pivot()函數(shù)基礎(chǔ)知識(shí)點(diǎn)內(nèi)容,對(duì)此有興趣的朋友們可以參考學(xué)習(xí)下。
    2021-01-01
  • Python 字符串處理特殊空格\xc2\xa0\t\n Non-breaking space

    Python 字符串處理特殊空格\xc2\xa0\t\n Non-breaking space

    今天遇到一個(gè)問(wèn)題,使用python的find函數(shù)尋找字符串中的第一個(gè)空格時(shí)沒(méi)有找到正確的位置,下面是解決方法,需要的朋友可以參考下
    2020-02-02
  • 使用并行處理提升python?for循環(huán)速度的過(guò)程

    使用并行處理提升python?for循環(huán)速度的過(guò)程

    Python?是一門(mén)功能強(qiáng)大的編程語(yǔ)言,但在處理大規(guī)模數(shù)據(jù)或復(fù)雜計(jì)算任務(wù)時(shí),性能可能成為一個(gè)瓶頸,這篇文章主要介紹了使用并行處理提升python?for循環(huán)速度,需要的朋友可以參考下
    2023-06-06
  • Python3.6筆記之將程序運(yùn)行結(jié)果輸出到文件的方法

    Python3.6筆記之將程序運(yùn)行結(jié)果輸出到文件的方法

    下面小編就為大家分享一篇Python3.6筆記之將程序運(yùn)行結(jié)果輸出到文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04

最新評(píng)論