Python3下操作SVN

文章目录

  • Python3下操作SVN
    • 一、背景
    • 二、python3环境准备
    • 三、在svn仓库上创建子目录
    • 四、将文件提交到svn仓库
    • 五、checkout目录
    • 六、更新svn仓库的文件

一、背景

在一次需求开发中,需要在python3的环境下,操作SVN,在SVN仓库上实现如下操作:创建SVN目录、拉取SVN文件内容、将文件推送到SVN仓库。

经过不断的探索尝试,最终实现了这些功能,这里将这些功能实现记录下来。

二、python3环境准备

关于python3在linux环境下的安装,可以参考:在Linux系统上安装Python3。

下载安装svn相关python库:https://pypi.org/

根据python版本选择合适的whl库

  • pysvn-0.1.0-py3-none-any.whl
  • svn-0.3.44-py2.py3-none-any.whl

安装完之后测试:

$ python3
>>> import stat,os,shutil,time,platform
>>> import svn, svn.remote

三、在svn仓库上创建子目录

# 如果SVN仓库上的子目录不存在,就创建出来
def createSubDirOnSVNReportIfNotExists(svn_base_url, svn_username, svn_password, subDir):subDirs = subDir.split("/")createDirFlag = Falsecurrent_svn_base_url = svn_base_urlfor oneSubDir in subDirs:svnClient = svn.remote.RemoteClient(current_svn_base_url,username=svn_username, password=svn_password)current_svn_base_url += "/" + oneSubDir# 查询svn当前目录下的所有子目录subAll = svnClient.list()findFlag = Falsefor subName in subAll:if oneSubDir in subName:findFlag=Truebreakif not findFlag:createDirFlag = Truebreak# 子目录不存在,创建子目录if createDirFlag:svnClient = svn.remote.RemoteClient(svn_base_url, username=svn_username, password=svn_password)# 执行创建SVN 子目录的命令svn_sub_command = 'mkdir'command_args = ["--parents", "-m", "python程序创建svn子目录:"+subDir, str(svn_base_url+"/"+subDir).replace(' ', '%20')]svnClient.run_command(svn_sub_command, command_args)return svn_base_url+"/"+subDir

四、将文件提交到svn仓库

# 判断本地文件是否存在
def isFileAndExists(filePath):if os.path.exists(filePath) and os.path.isfile(filePath):return Trueelse:return False# 执行提交操作
def commitSVNReportFile(svnUrl, target_localfilePath, svn_username, svn_password):# 如果本地文件不存在,就不用提交了if not isFileAndExists(target_localfilePath):raise Exception('要向SVN仓库提交的本地文件不存在');# 提交SVN报告svnUrl = svnUrl.replace(' ', '%20')svnClient = svn.remote.RemoteClient(svnUrl, username=svn_username, password=svn_password)# 先执行add操作svn_sub_command_add = 'add'command_args_add = ["--force", target_localfilePath]svnClient.run_command(svn_sub_command_add, command_args_add)# 再执行commit操作svn_sub_command_commit = 'commit'command_args_commit = [target_localfilePath, '-m', 'python3程序提交文件:'+os.path.split(target_localfilePath)[-1]]svnClient.run_command(svn_sub_command_commit, command_args_commit)

五、checkout目录

# 如果目录不存在就创建目录
def createDirIfNotExists(dirPath):if not os.path.exists(dirPath) or not os.path.isdir(dirPath):os.makedirs(dirPath)# checkout svn 文件
def checkoutSVNFile(local_base_dir, svn_base_url, svn_username, svn_password, svn_subdir):# 在本地创建一个SVN临时目录svn_local_temp_dir = os.path.join(local_base_dir, 'svn_reports', str(int(time.time())))# 创建目录createDirIfNotExists(svn_local_temp_dir)# 在svn上创建子目录,如果子目录不存在svnUrl = createSubDirOnSVNReportIfNotExists(svn_base_url, svn_username, svn_password, svn_subdir)svnUrl = svnUrl.replace(' ', '%20')# 将目录checkout下来svnClient = svn.remote.RemoteClient(svnUrl, username=svn_username, password=svn_password)svnClient.checkout(svn_local_temp_dir)return svn_local_temp_dir

六、更新svn仓库的文件

# 递归删除
def deleteDirsRecursion(dirPath):if not isDirAndExists(dirPath):returnif platform.system().lower()=='windows':shutil.rmtree(dirPath, onerror=remove_readonly)else:shutil.rmtree(dirPath)# 解决: shutil.rmtree 在Windows 上删除只读文件报错问题
def remove_readonly(func, path, _):os.chmod(path, stat.S_IWRITE)func(path)# 更新svn仓库的文件
def updateSVNFile(update_filepath, svn_subdir, svn_base_url, svn_username, svn_password):if not isFileAndExists(update_filepath):raise Exception('要更新的SVN文件不存在: %s' % update_filepath)# 在本地创建一个SVN临时目录svn_local_temp_dir = os.path.join(local_base_dir, 'svn_reports', str(int(time.time())))# 创建目录createDirIfNotExists(svn_local_temp_dir)# 在svn上创建子目录,如果子目录不存在svnUrl = createSubDirOnSVNReportIfNotExists(svn_base_url, svn_username, svn_password, svn_subdir)svnUrl = svnUrl.replace(' ', '%20')# 将目录checkout下来svnClient = svn.remote.RemoteClient(svnUrl, username=svn_username, password=svn_password)svnClient.checkout(svn_local_temp_dir)# 获取要更新的文件名target_localfilePath = os.path.join(svn_local_temp_dir, os.path.split(update_filepath)[-1])# 拷贝文件内容shutil.copyfile(update_filepath, target_localfilePath)# 向SVN仓库提交文件commitSVNReportFile(svnUrl, target_localfilePath, svn_username, svn_password)# sleeptime.sleep(3)# 删除临时目录deleteDirsRecursion(svn_local_temp_dir)

python3下操作SVN相关推荐

  1. linux下操作svn,实现根据时间段查看某个指定用户提交的记录

    svn log -v -r {2018-9-10}:{2018-9-25} -l 10 | sed -n '/danni/,/--$/ p' 其中: -r {2018-9-10}:{2018-9-25 ...

  2. ubuntu下使用SVN

    写在前面的话 我最烦网上写个什么鬼东西,看完一脸懵逼的感觉,这这这写的是啥.这种时候只能靠我们这种每一步都必须弄得非常清楚的女程序员出来撑脸面了. 哈哈哈哈哈哈-. 玩嘛,就是要胆子大就是要不断试错. ...

  3. 命令行操作svn和git和git

    前几天在写代码的时候电脑突然坏掉,老大交代的任务没完成,非常痛恨自己用svn或者git保存代码,相信很多程序员遇到过,硬盘坏掉,存在硬盘中的代码丢失,无法找回的问题,svn和git可谓程序员界的福音, ...

  4. Centos6.3下apache+svn部署web版本同步

    前段时间一直忙项目,所以项目初期的svn服务就一直没来得及更新,今天刚好忙完就将自己之前的配置重新总结了下,供大家参考. svn(subversion)作为一款开源的代码版本管理软件,目前普遍用在项目 ...

  5. Mac下Jenkins+SVN+Xcode构建持续

    1 安装Jenkins Jenkins是基于Java开发的一种持续集成工具.所以呢,要使用Jenkins必须使用先安装JDK. JDK安装 JDK 下载地址 jdk 1.8.png 安装JDK的过程略 ...

  6. Python3 文件操作

    Python3 文件操作 讲师:张学亮 百度:学亮编程手记 网易云课堂:@张学亮 open() 方法 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到 ...

  7. CentOS6.5下搭建SVN服务器

    1.检查是否已安装 rpm -qa | grep subversion 如果要卸载旧版本: yum remove subversion 2.安装 yum install subversion PS:y ...

  8. python3 unicodeencodeerror_解决 Python3 下 print 时出现 UnicodeEncodeError 的问题

    今天试着使用 Selenium 做爬虫时 print 爬取到的信息时,程序报错,信息如下: Traceback (most recent call last): File "spider.p ...

  9. linux下配置SVN搭建 centos svn安装配置

    SVN服务器有2种运行方式: 1.独立服务器(例如:svn://xxx.com/xxx): 2.借助apache (例如:http://svn.xxx.com/xxx): 为了不依赖apache,我选 ...

  10. CentOS 6.3下Apache+SVN部署Web版本同步

    CentOS 6.3下Apache+SVN部署Web版本同步 来自:Linux公社   |  时间:2013-07-06 11:12:31 原文链接: http://www.linuxidc.com/ ...

最新文章

  1. Redis官方教程中文版
  2. .ipynb文件怎么打开
  3. 【Android 高性能音频】Oboe 开发流程 ( Oboe 完整代码示例 )
  4. 安装中文版man手册,同时保留原英文版手册
  5. 【转】SAP Cloud Platform平台下,ABAP人员的出路在哪里
  6. VTK修炼之道75:交互部件_测量类Widget的应用
  7. mysql 树排序_mysql按树深度排序
  8. c语言循环程序怎么编程,c语言程序(5):循环结构程序设计
  9. 手机浏览器网址_你真的会用浏览器搜索吗?几个高阶搜索技巧助您高效找到有用信息
  10. 使用app loader上传iOS应用
  11. 浅谈跨平台框架 Flutter 的优势与结构 1
  12. linux修改mysql配置文件_CentOS7离线安装 mysql,超细步骤,基础配置,90%小白10分钟学会...
  13. WIFI 信道 channel
  14. Hierachy Viewer 使用 monitor命令
  15. 股票实时行情获取及特征计算
  16. 选取网页内容后弹出提示框,类似于微博的快捷转发功能。
  17. Oxygen XML Editor Mac版(基于Java的XML编辑器)
  18. 联想拯救者Y7000 2020安装Windows 10+CentOS7双系统
  19. 实施工程师如何做好一次调研
  20. 1199: 多项式相加(多实例)

热门文章

  1. openGL之glsl入门3--正弦函数叠加为方波
  2. python 处理 图像和视频
  3. 爬取虾米音乐flac高品质下载
  4. WORD图片无法同时选中/WORD图片无法组合
  5. ASP.NET全套视频教程
  6. 中继器有何作用?它的工作原理是什么?-道合顺大数据Infinigo
  7. 由内而外全面造就自己
  8. 智能水杯设计方案_智能水杯-设计报告终稿.doc
  9. 基于Java+Swing+Mysql酒店客房预订管理系统设计
  10. 2014完美世界校招笔试题及答案