python git api,python git api
之前一直用简单的极好的函数形式写脚本,前段时间学习框架的时候刚好将类复习了下,果然还是面向对象的编程比较方便,自己以后尽量都用类写一些东西,以下是使用了父类和子类写的脚本。
(后续备注:我这里基于python-gitlab 2.10.0之前的版本写的脚本,在最新的python-gitlab3.8.1中有些应用程序接口用法可能已经不支持了,使用时建议安装2.10.0的应用程序接口库,pip安装python-git lab==2。10 .0,如果要研究最新的应用程序接口使用方法请参考https://python-git lab . readthedocs . io/en/latest/API/git lab . html)
# D:\程序文件(x86)\Python36
# -*-编码=utf-8 -*-
导入gitlab操作系统
从pathlib导入路径
班级登录:
def __init__(自身,url,私有令牌,项目名称) :
self.url=url
self.private_token=私有令牌
self.project_name=project_name
定义状态(自身) :
gl=gitlab .Gitlab(self.url,private _ token=self。私有_令牌)
返回总帐
定义搜索(自己) :
项目=自我。州GL()项目。列表(搜索=自我。项目名称).
# URL=line。http _ URL _ to _ repo for line in projects if line。name==self。项目名称
对于项目中的行:
如果line.name==self.project_name:
url=line.http_url_to_repo
pid=line.id
返回url,pid
def __str__(self):
返回列表(self.search())
吉特雷波类(登录) :
def __init__(自身,url,私有令牌,项目名称) :
超级()。__init__(url,私有令牌,项目名称)
def DOWNRepo(自身、工作目录、分支、报告目录) :
如果不是os.path.exists(工作目录) :
os.makedirs(工作目录)
项目=自己。州GL()项目。获取(列表(自我。search())[1]).
branches=project.branches.list()
文件列表=项目。repository _ tree(path=repodir,ref=branch,recursive=True,all=True)
对于文件列表中的我:
打印(一)
dirs=os.path.join(workdir,i[path])
如果我[type]==tree :
打印(目录)
如果不是os.path.exists(目录) :
os.mkdir(目录)
repodir=os.path.join(repodir,i[name])
自我。下行报告(工作目录、分支、报告目录)
elif I[ type ]= blob :
打印(目录)
用打开(dirs,“wb”)作为女:
项目。文件。raw(file _ path=I[ path ],ref=branch,streamed=True,action=f.write)
打印( %s %目录)
#以下为提交代码到工具仓库的功能,我没加入到主程序中
定义提交代码(自身、分支、工作目录、文件列表) :
项目=自己。州GL()项目。获取(列表(自我。search())[1]).
文件列表为代码仓内部的相对路径,比如D:\REPO\JAVA1\JAVA2\est.java,这里仓库名称为JAVA1,那么文件列表就是 JAVA1\JAVA2\est.java
filepath=os.path.join(workdir,filelist) #本机需要提交的文件的具体路径
提交路径=文件路径。分割(工作方向)[1]#远程仓库的路径,以/开始作为远程仓库的路径
数据={
分支:分支,
"提交消息":"更新内容",
操作:[
{
操作:创建,
“file _ path”:提交路径,
内容 :打开(文件路径, r ,编码=UTF-8 ).read(),
},
]
}
commit=project.commits.create(数据)
if __name__==__main__ :
CUR_DIR=Path(__file__).解决()。父# Path(__file__).解决())当前脚本的详细路径
filepath=os.path.join(CUR_DIR, add-list.txt) #将需要下载的服务写到里面
url=http://10.80.99.35/
token=rwwrtttrteaRwwww
repodir=/ #远程仓库的根目录,即下载整个代码仓,如果带/file,就是下载代码仓中文件目录下的文件
branch=开发 #指定下载的分支
用open(文件路径, r ,编码=utf-8 )作为女:
对于f.readlines()中的行:
reponame=line.strip()
工作方向=操作系统。路径。join(r d:\ Program Files \ GitlabReposity ,reponame)
GitREPO(url,token,reponame).下行报告(工作目录、分支、报告目录)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。