Python 一键commit文件、目录到SVN服务器

简介: Python 一键commit文件、目录到SVN服务器

一键commit文件、目录到SVN服务器

 


 

实现功能

一键提交文件、目录到svn

 

测试环境

Win7 64

 

Python 3.3.2

 

TortoiseSVN 1.9.6-64 Bit

 

代码show

#!/usr/bin/env/ python
# -*- coding:utf-8 -*-

__author__ ='shouke'

importsubprocess
importos.path


classSVNClient:
   def__init__(self):
       self.svn_work_path ='D:\svn\myfolder'
       if notos.path.exists(self.svn_work_path):
           print('svn工作路径:%s不存在,退出程序'%self.svn_work_path)
           exit()
       self.try_for_filure =1# 提交失败,重试次数

   defget_svn_work_path(self):
       returnself.svn_work_path

   defset_svn_work_path(self, svn_work_path):
       self.svn_work_path  = svn_work_path

   defupdate(self):
       args ='cd /d '+self.svn_work_path +' & svn update'
       withsubprocess.Popen(args,shell=True,universal_newlines=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)asproc:
           output = proc.communicate()
           print('执行svn update命令输出:%s'%str(output))
           if notoutput[1]:
                print('svn update命令执行成功')
                return[True,'执行成功']
           else:
               print('svn update命令执行失败:%s'%str(output))
               return  [False, str(output)]

   defadd(self, path):
       args ='cd /d '+self.svn_work_path +' & svn add '+ path
       withsubprocess.Popen(args,shell=True,universal_newlines=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)asproc:
           output = proc.communicate()
           print('执行svn add命令输出:%s'%  str(output))
           if notoutput[1]or(notstr(output) andstr(output).find('is already under version control') != -1):
                print('svn add命令执行成功')
                return[True,'执行成功']
           else:
               print('svn add命令执行失败:%s'%str(output))
               return  [False,'svn add命令执行失败:%s'% str(output)]

   defcommit(self, path):
       args ='cd /d '+self.svn_work_path +' & svn commit -m "添加版本文件"'+ path
       withsubprocess.Popen(args,shell=True,universal_newlines=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)asproc:
           output = proc.communicate()
           print('执行svn commit命令输出:%s'%str(output))
           if notoutput[1]:
                print('svn commit命令执行成功')
                return[True,'执行成功']
           else:
               print('svn commit命令执行失败,正在重试:%s'% str(output))
               ifself.try_for_filure !=0:
                   self.commit(path)
                   self.try_for_filure =self.try_for_filure -1
               return  [False, str(output)]



filepath_list = []

# 获取目标目录下的文件|子目录|子文件路径
defget_subdir_or_subfile_paths(dirpath, excludes):
   global  filepath_list
   if notos.path.exists(dirpath):
       print('路径:%s不存在,退出程序'% dirpath)
       exit()
   elif notos.path.isdir(dirpath):
       print('路径:%s不为目录'% dirpath)
       return  []

   fornameinos.listdir(dirpath):
       forexcludeinexcludes.strip(',').split(','):
           if notname.endswith(exclude):
               full_path = os.path.join(dirpath, name)
               filepath_list.append(full_path)
               ifos.path.isdir(full_path):
                   get_subdir_or_subfile_paths(full_path, exclude)

   returnfilepath_list

if__name__ =='__main__':
   svn_client = SVNClient()
   svn_client.update()
   dirpath ='dirname'  # 'D:\svn\myfolder\dirname'
   ifsvn_client.add(dirpath)[0]:
       svn_client.commit(dirpath)

   dirpath ='D:\svn\myfolder\dirname'  # ''
   # 传递每个文件、目录的绝对路径,确保重复执行时,给定目录下新增的文件也可以被提交
   paths = get_subdir_or_subfile_paths(dirpath,'.svn')# .svn文件需要被过滤掉,因为无法提交成功
   forpathinpaths:
       ifsvn_client.add(path)[0]:
           svn_client.commit(dirpath)

   filepath ='myfile.txt'# 'D:\svn\myfolder\dirname\myfile.txt'
   ifsvn_client.add(filepath)[0]:
       svn_client.commit(filepath)

   # 报错
   # dirpath = 'd:/svn/dir_out_of_svn_workpath'
   # if svn_client.add(dirpath)[0]:
   #     svn_client.commit(dirpath)

 

注意:

例中,svn工作路径为:'D:\svn\myfolder',即执行checkout时选择的目录

1、只能添加并提交位于svn工作目录下文件目录,否则会报错,如下:

if__name__ =='__main__':
   svn_client = SVNClient()
   svn_client.update()
   dirpath ='d:/svn/dir_out_of_svn_workpath'
   ifsvn_client.add(dirpath)[0]:
       svn_client.commit(dirpath)

 

 




 

2、如果未对给定目录执行过add类函数,那么执行add函数后,执行commit函数,将会把该目录下的文件、目录及其下子文件、子目录,一起提交svn;否则不会做任何提交操作;所以,给add传递参数,最好是通过遍历的方式,传递每个文件、目录的绝对路径。

 

 

3、安装svn时,第二项,必须选择图示红色选框框选项,否则运行会报错:svn不是内部或外部命令,也不是可运行的程序

 



 

目录
相关文章
|
4月前
|
人工智能 JavaScript API
零基础构建MCP服务器:TypeScript/Python双语言实战指南
作为一名深耕技术领域多年的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP作为Anthropic推出的开放标准,正在重新定义AI应用与外部系统的交互方式,它不仅解决了传统API集成的复杂性问题,更为开发者提供了一个统一、安全、高效的连接框架。在过去几个月的实践中,我发现许多开发者对MCP的概念理解透彻,但在实际动手构建MCP服务器时却遇到了各种技术壁垒。从环境配置的细节问题到SDK API的深度理解,从第一个Hello World程序的调试到生产环境的部署优化,每一个环节都可能成为初学者的绊脚石。因此,我决定撰写这篇全面的实
775 67
零基础构建MCP服务器:TypeScript/Python双语言实战指南
|
4月前
|
机器学习/深度学习 存储 监控
内部文件审计:企业文件服务器审计对网络安全提升有哪些帮助?
企业文件服务器审计是保障信息安全、确保合规的关键措施。DataSecurity Plus 是由卓豪ManageEngine推出的审计工具,提供全面的文件访问监控、实时异常告警、用户行为分析及合规报告生成功能,助力企业防范数据泄露风险,满足GDPR、等保等多项合规要求,为企业的稳健发展保驾护航。
|
3月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
648 1
|
4月前
|
安全 Linux Shell
使用SCP命令在CentOS 7上向目标服务器传输文件
以上步骤是在CentOS 7系统上使用SCP命令进行文件传输的基础,操作简洁,易于理解。务必在执行命令前确认好各项参数,尤其是目录路径和文件名,以避免不必要的传输错误。
439 17
|
4月前
|
自然语言处理 Unix Linux
解决服务器中Jupyter笔记本的文件名字符编码问题
通过上述步骤,可以有效解决Jupyter笔记本的文件名字符编码问题,确保所有文件能在服务器上正常访问并交互,避免因编码问题引起的混淆和数据丢失。在处理任何编码问题时,务必谨慎并确保备份,因为文件名变更是
164 17
|
4月前
|
安全 Linux 网络安全
Python极速搭建局域网文件共享服务器:一行命令实现HTTPS安全传输
本文介绍如何利用Python的http.server模块,通过一行命令快速搭建支持HTTPS的安全文件下载服务器,无需第三方工具,3分钟部署,保障局域网文件共享的隐私与安全。
827 0
|
6月前
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
401 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
5月前
|
Windows
Windows下版本控制器(SVN)-启动服务器端程序
Windows下版本控制器(SVN)-启动服务器端程序
158 4
|
5月前
|
Linux
Linux下版本控制器(SVN) -服务器端环境搭建步骤
Linux下版本控制器(SVN) -服务器端环境搭建步骤
243 0
Linux下版本控制器(SVN) -服务器端环境搭建步骤

推荐镜像

更多