svn没有批量添加ignore file的功能,只能一个个目录去设置,故写了脚本自动化的执行

使用了svn propset,故改了ignore file,可以反复的执行此脚本

#!/usr/bin/python
# -*- coding: utf8 -*-
# antsmallant 2018.09.05 import time
import os
import sys
import commands def print_usage():
myname = os.path.basename(sys.argv[0])
help = '''
#######################################################
usage : {0} ignore_file
e.g : {0} ../server/ignore.txt ignore_file looks like:
bin/3rd/a
bin/b
bin/c/d/e #######################################################
'''.format(myname)
print(help) #exe shell cmd, return True if no error, otherwise False
def exe_cmd(cmdstr):
print("exe_cmd, cmdstr={0}".format(cmdstr))
status, output = commands.getstatusoutput(cmdstr)
if status != 0:
print("exe_cmd fail, error={0}, errorcode={1}, cmdstr={2}".format(output, status>>8, cmdstr))
return False
print("exe_cmd success, output={0}".format(output))
return True #retrun dict
def parse_ignore_file(file_path):
f = open(file_path, "r")
allline = f.readlines()
f.close()
ret = {}
for line in allline:
line = line.strip()
line = line.replace("\n", "")
line = line.replace("\r", "")
if len(line) == 0:
continue
dn = os.path.dirname(line)
bn = os.path.basename(line)
if ret.has_key(dn):
ret[dn].append(bn)
else:
ret[dn] = []
ret[dn].append(bn)
return ret def set_ignore(dn, filelist):
assert len(filelist) > 0, "filelist has no data"+str(filelist)
print("set_ignore" + dn)
#make temp ignore file
temp_ignore = os.path.join(dn, "temp_ignore.txt")
f = open(temp_ignore, "w")
if not f:
return False
for i in filelist:
f.write(i+"\n")
f.flush()
f.close()
cmd = "cd {0} && svn up && svn propset svn:ignore ./ -F {1}".format(dn, temp_ignore)
ok = exe_cmd(cmd)
if not ok:
os.remove(temp_ignore)
return False
cmd = "cd {0}/../ && svn up && svn ci -m 'add ignore' ./".format(dn)
ok = exe_cmd(cmd)
if not ok:
os.remove(temp_ignore)
return False
os.remove(temp_ignore)
return True def main():
if len(sys.argv) < 2:
print("err: arg not given")
print_usage()
return False
ignore_file = os.path.abspath(sys.argv[1])
print("ignore_file: " + ignore_file)
if not os.path.exists(ignore_file):
print("ignore_file not exists")
return False
dn = os.path.dirname(ignore_file)
print("dirname: " + dn)
file_2_ignore = parse_ignore_file(ignore_file)
for k, v in file_2_ignore.items():
ok = set_ignore(os.path.join(dn, k), v)
if not ok:
print("something wrong when doing: "+k+" "+str(v))
return False
return True if __name__ == '__main__':
main()

svn批量的添加ignore的更多相关文章

  1. android stuido 在线安装svn插件,添加版本库无响应

    问题:android stuido 中在线安装svn插件,添加版本库无响应. 原因: 由于android stuido 版本较高,在线安装1.6x 版本的svn,添加版本库一直没有响应,最后卡死.. ...

  2. 利用Dnspod api批量更新添加DNS解析【python脚本】 - 推酷

    利用Dnspod api批量更新添加DNS解析[python脚本] - 推酷 undefined

  3. svn提交后 添加注释

    svn 提交后添加注释 第一步: 第二步: 第三步:提交就可以了. 注意:如果svn服务器管理员没有激活pre-revprop-change这个hook,会出现 需要让svn服务器管理员没有激活pre ...

  4. 解决Git在添加ignore文件之前就提交了项目无法再过滤问题

    由于未添加ignore文件造成提交的项目很大(包含生成的二进制文件).所以我们可以将编译生成的文件进行过滤,避免添加到版本库中了. 首先为避免冲突需要先同步下远程仓库 $ git pull 在本地项目 ...

  5. linux svn 批量添加

    近期开始用svn来进行代码版本的维护管理,之前一直用git,两个感觉大同小异.用svn命令行来添加文件的话需要一个一个的选,很是蛋疼,于是就写了个shell脚本,批量添加文件,还在改进中... #!/ ...

  6. Eclipse中SVN设置文件为ignore后重新添加至版本控制

    先前把需要版本控制的文件夹ignore了,用了很长时间找解决方法,结果发现竟如此简单,对eclipse的功能不熟悉啊. 方法如下: 在Window->Show View -> Naviga ...

  7. svn 批量添加命令

    svn st | awk '{if ($1 == "?") {print $2} }' | xargs svn add

  8. zabbix利用api批量添加item,并且批量配置添加graph

    关于zabbix的API见,zabbixAPI 1item批量添加 我是根据我这边的具体情况来做的,本来想在模板里面添加item,但是看了看API不支持,只是支持在host里面添加,所以我先在一个ho ...

  9. svn 强制用户添加注释 和 允许用户修改注释

    当我们用TortoiseSVN提交代码时,有很多人不喜欢写注释,导致以后代码版本多,也不清楚哪个版本到底改了什么东西.所以在提交的时候,我会强制要求添加注释.这是如何实现的?这个话题就涉及到了svn的 ...

  10. svn 批量更新 bat脚本

    由于有多个程序放在svn上管理,每天都要进入相应的目录进行svn 更新操作,现在写了一个简单的脚本进行批量自动更新. Code@echo off @echo ********************* ...

随机推荐

  1. springboot gradle 集成流程引擎activiti

    buildscript { repositories { maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } } dep ...

  2. linux下进程通信总结

    信号: 信号是通知发生了某种事件的机制,内核和进程都可能会向进程发送各种信号,进程也可以向自己发送信号.系统定义了一组标准信号类型,每种信号都拥有唯一的数值和用途.典型的信号递送是异步的,意味着进程可 ...

  3. 浅谈组件二封-vue

    目录 组件二封不是换一种写法 组件二封应当具备哪些条件 我认为的二封应当有哪些作用 二封的好处 先来一个列表页demo来看看效果(Vue2) 本文仅仅针对vue系列做探讨, 项目倾向于大量增删改查的后 ...

  4. -bash: nslookup: 未找到命令;centos7 安装nslookup

    一.安装服务 [root@localhost ~]# yum -y install bind-utils 二.查看 [root@localhost ~]# nslookup

  5. make编译工具教程

    make编译工具教程 背景 CC++编译起来目录结构多的情况需要脚本完成搜索编译-> make 第一课 第三课 makefile常用编程语法: 1 pipe管道符号,用;把命令相连接. 这样就 ...

  6. 微信小程序搜索排名权重!

    最后,再介绍一下排名权重的计算比例: 1.小程序上线时间(占比5%) 2.描述中完全匹配出现关键词次数越多,排名越靠前(10%) 3.标题中关键词出现1次,且整体标题的字数越短,排名越靠前(35%) ...

  7. Unity Prefab(预制体)一次性循环10个会得到同样的

    IEnumerator Test1() { for(int i = 0;i < 5;i++) { GameObject gb = (GameObject)Resources.Load(" ...

  8. dbeaver把表数据导出csv时字符串自动加双引号问题解决

    背景: mysql 5.7 dbeaver 21.1.4 解决:如下图,括起字符这里设置一个 空格(space)即可: 参考1

  9. 家里静态Ip设置

    分配的网段是10.10.1.*

  10. sql 时间

    sql拿两天之内的时间 SELECT * FROM room_message WHERE send_date BETWEEN UNIX_TIMESTAMP( now())-172800 AND now ...