测试开发实践软件测试程序员

Python - 通过API获取git diff的文件名列表

2018-03-28  本文已影响25人  严北

SHELL

Shell 中, 通过执行

git diff --name-only HASH1 HASH2

可以很简单实现获取两次commit之间有改动的文件列表, 但是一般 Git API 不会提供该功能, 因此通过简单的几行代码实现, 欢迎在大家的项目中使用!

PYTHON

Bitbucket 为例:

import requests

class BitbucketAnalysis(object):
    def __init__(self, owner, proj, pr_id):
        # api 在各大 Git 版本库官网均能查到, diff_api 是 Bitbucket 
        # 提供的查询某次pull request 修改具体内容的接口
        self.pr_api = "https://api.bitbucket.org/2.0/repositories/%s/%s/pullrequests/%s" % (
            owner, proj, pr_id)
        self.diff_api = self.pr_api + "/diff"
    def get_file_changed(self):
        # 发请求时, 若为私人项目, 需要带上 auth 参数, 传输用户名密码用于验证
        diff_res = requests.get(self.diff_api, auth=(USERNAME, PASSWORD))
        file_changed = []
        for line in diff_res.text.splitlines():
            # 有改动的文件都是以 "--- a/xxx" 格式输出, 因此判断行首
            # 为 "---" 三个连接符来判断该行输出了修改过的文件;
            # 也可以加上判断行末是否为自己需要记录的文件格式
            if '---' in line[:3] and ".py" in line[-3:]:
                # 将第六个字符之后作为文件名添加到列表即可
                file_changed.append(line[6:-])
        return file_changed
上一篇下一篇

猜你喜欢

热点阅读