在本教程系列中,您将看到如何使用Python构建代码审查计划程序。 在本系列的整个过程中,您将学习一些基本概念,例如阅读电子邮件,发送电子邮件,从Python程序执行终端命令,处理git日志等。
在第一部分中,您将首先设置基本配置文件,读取git日志,并处理它们以发送代码审查请求。
入门
首先创建一个名为CodeReviewer
的项目文件夹。 在CodeReviewer
文件夹中,创建一个名为scheduler.py
的文件。
假设将对多个项目运行代码审阅计划程序,则需要指定计划程序将针对其运行的项目名称以及需要处理日志的天数。 因此,首先从代码检查程序中读取这两个参数作为参数。
让我们利用argparse
Python模块读取程序参数。 导入库并添加程序参数。 您可以使用argparse
模块的ArgumentParser
方法来启动解析器。 启动后,您可以将参数添加到解析器。 这是从程序中读取参数的代码:
import argparse
parser = argparse.ArgumentParser(description="Code Review Scheduler Program")
parser.add_argument("-n", nargs="?", type=int, default=1, help="Number of (d)ays to look for log. ")
parser.add_argument("-p", nargs="?", type=str, default="em", help="Project name.")
args = parser.parse_args()
no_days = args.n
project = args.p
print 'Processing the scheduler against project ' + project + '....'
设置项目配置
让我们维护一个单独的配置文件,该文件将由代码审阅者处理。 在项目目录CodeReviewer
创建一个名为config.json
的文件。 在配置文件中,将包含有关将要处理的每个项目的信息。 这是项目配置文件的外观:
[{
"name": "project_x",
"git_url": "https://github.com/royagasthyan/project_x"
}, {
"name": "project_y",
"git_url": "https://github.com/royagasthyan/project_y"
}]
在后面的部分中,将在项目配置中添加更多选项。
让我们将配置JSON
文件读入Python程序。 导入JSON
模块并加载从配置文件读取的JSON
数据。
#
# Read the scheduler config file
#
with open('config.json') as cfg_file:
main_config = json.load(cfg_file)
从存储库中读取提交信息
运行审阅者脚本时,会将项目名称指定为参数。 根据指定的项目名称,检查其配置是否可用,然后克隆存储库。
首先,您需要从配置中找到项目URL。 迭代项目的数据并找到项目URL,如下所示:
for p in main_config:
if p['name'] == project:
project_url = p['git_url']
break
获得项目URL后,请检查是否已克隆该项目。 如果不是,请克隆项目URL。 如果已经存在,请导航到现有项目目录并提取最新更改。
# Clone the repository if not already exists
print "********* Doing project checkout **********"
if(os.path.isdir("./" + project)):
execute_cmd("cd " + project + "; git pull")
else:
execute_cmd("git clone " + project_url + " " + project)
print "*** Done *******"
print " "
要执行系统命令,您将使用Python os
模块。 创建一个执行系统命令的方法,因为您将经常使用它。 这是execute_cmd
方法:
def execute_cmd(cmd):
print "***** Executing command '"+ cmd + "'"
response = os.popen(cmd).read()
return response
处理Git日志
从Git存储库中获取提交日志后,您将分析日志。 创建一个名为process_commits
的新Python方法来处理Git日志。
def process_commits():
# code would be here
Git为我们提供了获取提交日志的命令。 要从存储库获取所有日志,命令将是:
git log --all
响应将是:
commit 04d11e21fb625215c5e672a93d955f4a176e16e4
Author: royagasthyan <royagasthyan@gmail.com>
Date: Wed Feb 8 21:41:20 2017 +0530
Create README.md
您还可以获取特定于执行命令后的天数的日志。 要获取n天后的日志,命令将是:
git log --all --since=n.days
您可以进一步缩小范围,以查看特定的提交是添加,修改还是删除。 使用--name-status
执行上述命令:
git log --all --since=10.days --name-status
上面的命令将具有以下输出:
commit 04d11e21fb625215c5e672a93d955f4a176e16e4
Author: royagasthyan <royagasthyan@gmail.com>
Date: Wed Feb 8 21:41:20 2017 +0530
Create README.md
A README.md
README.md
文件左侧的A
字母表示添加。 同样, M
表示修改, D
表示删除。
在process_commits
方法内部,让我们定义要执行的Git命令以获取日志历史记录。
cmd = "cd " + project + "; git log --all --since=" + str(no_days) + ".day --name-status"
将上面的命令cmd
传递给execute_cmd
方法。
response = execute_cmd(cmd)
阅读响应,重复每一行,然后打印相同的内容。
def process_commits():
cmd = "cd " + project + "; git log --all --since=" + str(no_days) + ".day --name-status"
response = execute_cmd(cmd)
for line in response.splitlines():
print line
读取配置后,调用process_commits
方法。
print 'Processing the scheduler against project ' + project + '....'
process_commits()
保存以上更改,并尝试使用以下命令执行代码查看器:
python scheduler.py -n 10 -p "project_x"
如您所见,我们已经使用天数和要处理的项目名称启动了代码审查器。 您应该能够看到以下输出:
********* Doing project checkout **********
***** Executing command 'cd project_x; git pull'
*** Done *******
Processing the scheduler against project project_x....
***** Executing command 'cd project_x; git log --all --since=10.day --name-status'
commit 04d11e21fb625215c5e672a93d955f4a176e16e4
Author: royagasthyan <royagasthyan@gmail.com>
Date: Wed Feb 8 21:41:20 2017 +0530
Create README.md
A README.md
因此,当您执行代码审阅者时,可以看到存储库已创建(如果尚不存在),否则将被更新。 之后,根据提供的天数,它获取要处理的提交日志历史记录。
现在,让我们分析提交日志以找出提交ID,提交日期和提交作者。
从日志中可以看到,提交ID以关键字commit
开头,author以关键字Author:
开头,date以关键字Date:
开头。 您将使用以下关键字来标识提交ID,作者和提交日期。
让我们尝试从Git日志行中获取提交ID。 这很简单。 您只需要检查行是否以关键字commit
开头。
for line in response.splitlines():
if line.startswith('commit '):
print line[7:]
保存更改并执行调度程序,您应该可以获取提交ID。
下一个任务是提取作者姓名。 要检查该行是否包含作者信息,请首先检查该行是否以Author
关键字开头。 如果是这样,您将使用正则表达式来获取用户。
如您所见,用户电子邮件地址位于“小于大于”符号内。 我们将使用正则表达式读取< >
之间的电子邮件地址。 正则表达式将如下所示:
'\<(.*?)\>'
导入Python re
模块以在Python中使用正则表达式。
import re
现在检查行是否以Author
关键字开头。 如果是这样,请使用上面的正则表达式提取用户电子邮件地址。 外观如下:
if line.startswith('Author:'):
if(re.search('\<(.*?)\>',line)):
print re.search('\<(.*?)\>',line).group(1)
要从日志中提取提交日期,您需要检查该行是否以Date
关键字开头。 外观如下:
if line.startswith('Date:'):
print line[5:]
这是最终的process_commits
方法:
def process_commits():
cmd = "cd " + project + "; git log --all --since=" + str(no_days) + ".day --name-status"
response = execute_cmd(cmd)
for line in response.splitlines():
if line.startswith('commit '):
print line[7:]
if line.startswith('Author:'):
if(re.search('\<(.*?)\>',line)):
print re.search('\<(.*?)\>',line).group(1)
if line.startswith('Date:'):
print line[5:]
保存以上更改,然后启动代码查看器。
python scheduler.py -n 10 -p "project_x"
您应该具有每个提交详细信息,并在终端上打印出提交ID,作者和提交日期。
包起来
在Python Code Review Scheduler的第一部分中,您了解了如何设置项目。 您将读取调度程序处理项目所需的输入参数。 在本系列教程的下一部分中,我们将从process_commits
方法收集提交详细信息,并将提交发送给随机开发人员进行代码审查。
不要犹豫,看看我们可以在Envato Market上出售和进行研究的东西 ,也可以使用下面的提要,提出任何问题并提供宝贵的反馈意见。
希望您喜欢第一部分。 请在下面的评论中让我们知道您的想法或任何建议。
该教程的源代码可在GitHub上获得 。