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不是内部或外部命令,也不是可运行的程序

 



 

目录
相关文章
|
1月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
130 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
1月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
135 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
1月前
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
288 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
|
18天前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
1月前
|
Linux 数据安全/隐私保护 Windows
centos 7.2 搭建svn服务器
centos 7.2 搭建svn服务器
51 0
|
1月前
|
网络协议 Python
Python创建一个TCP服务器
Python创建一个TCP服务器
|
4天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
4天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
4天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
6天前
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####