背景:

本人在公司的平台部门工作,我们部门写出的代码都是编译成.a文件,定期发布版本到各个产品,现在老大要求我负责每周向公司的某个产品发布lib。发布lib的步骤大概就是自动化的兄弟给我提供一个归档的版本号、lib的标签号(对应我们平台的代码)和产品适配的标签号(对应产品代码,我们的.a文件会定期提交到这个svn下),然后我根据这个信息,操作svn,定期把适配中指定标签下的指定的两个文件夹导出到归档目录下,然后在归档路径下创建记录这次发布信息(lib、适配各包含哪些标签、版本信息)的文档,还有就是创建一个release notes,要大家填写依赖。为了方便记录我还在另一个目录下记录着每次发布的信息。大概就是这样比较机械的操作,作为程序员当然不能甘于每周重复一次这样无趣的操作,于是乎利用今天调休的时间,用python写了个脚本代替这个工作。

主要用到的是python和pysvn(python)的一个第三方库。这里注意下pysvn要和对应版本的python使用才能生效,否则import会失败,所以建议先选pysvn,然后根据版本选python。

软件下载和使用文档:

软件下载:https://www.python.org/getit/

http://pysvn.tigris.org/project_downloads.html

pysvn非常好的官方使用说明文档:http://pysvn.tigris.org/docs/pysvn_prog_ref.html

代码:

  1. import pysvn
  2. import os
  3. import time
  4. import shutil
  5.  
  6. #发布lib时对应的适配代码路径
  7. code_path = "F:/xyp_work";
  8. #lib的归档路径
  9. dest_path = "F:/AR_lib发布";
  10. #自己的备份信息
  11. myself_save_path = "F:/save/备份.txt";
  12. #填写依赖的路径
  13. dependence_path = "F:/依赖";
  14. #维护一个专门记录lib和br标签号的文档用于读取上一次发lib时的标签号
  15. old_num_path = "F:/save/old_num.txt";
  16.  
  17. #svn 路径
  18. lib_svn = "lib的svn路径"
  19. br_svn = "br的svn路径"
  20.  
  21. #版本号和标签号
  22. #verson = "esap v2R2C00B100";
  23. #lib_num = 2;
  24. #br_num = 7;
  25.  
  26. ###读取上一次的标签号和用户输入的本次lib的标签号和版本号###
  27. print("输入版本号");
  28. verson = input();
  29. print("输入lib的标签号");
  30. lib_num = int(input());
  31. print("输入适配的标签号");
  32. br_num = int(input());
  33.  
  34. fp = open(old_num_path,"r");
  35. last_lib_num = fp.readline();
  36. last_br_num = fp.readline();
  37. fp.close();
  38.  
  39. print("last lib num is "+str(last_lib_num));
  40. print("last br num is "+str(last_br_num));
  41. print("current verson is "+str(verson)+"\n");
  42. print("current lib num is "+str(lib_num)+"\n");
  43. print("current br num is "+str(br_num)+"\n");
  44. print("please confirm : y/n");
  45.  
  46. res=input();
  47. if "y"== res:
  48. print("now start");
  49. else:
  50. exit();
  51.  
  52. ###################创建文件夹和文件######################
  53. vasp = dest_path+'/'+"vasp";
  54. vaspadp = dest_path + '/' + "vaspadp";
  55. svn_txt = dest_path + '/'+"svn.txt";
  56.  
  57. isExists=os.path.exists(dest_path);
  58. if not isExists:
  59. os.makedirs(dest_path);
  60. else:
  61. print("AR_lib发布文件夹已存在,看看是否搞错了");
  62. exit();
  63.  
  64. isExists=os.path.exists(vasp)
  65. if not isExists:
  66. os.makedirs(vasp);
  67.  
  68. isExists=os.path.exists(vaspadp)
  69. if not isExists:
  70. os.makedirs(vaspadp);
  71.  
  72. #svn.txt 
  73. fp = open(svn_txt,"a");
  74. fp.write(verson+"\n");
  75. fp.write((lib_svn+" "+ str(lib_num) +"\n"));
  76. fp.write((br_svn+" "+ str(br_num) +"\n"));
  77. fp.close();
  78.  
  79. #自己的备份记录
  80. fp = open(myself_save_path,"a");
  81. fp.write("\n");
  82. fp.write("\n");
  83. fp.write("\n");
  84. fp.write(time.strftime("%d/%m/%Y") + "\n");
  85. fp.write(verson+"\n");
  86. fp.write((lib_svn+" "+ str(lib_num) +"\n"));
  87. fp.write((br_svn+" "+ str(br_num) +"\n"));
  88. fp.close();
  89.  
  90. #依赖文件 复制release notes.xlsx,然后重命名,否则直接创建出来不是共享的
  91. shutil.copyfile(dependence_path+"/release notes.xlsx",dependence_path + "/" + verson+" release notes.xlsx");
  92.  
  93. #维护一个专门记录lib和br标签号的文档用于读取上一次发lib时的标签号
  94. fp = open(old_num_path,"w");
  95. fp.truncate(); #清除文件内容
  96. fp.write(str(lib_num)+"\n");
  97. fp.write(str(br_num)+"\n");
  98. fp.close();
  99. ##############################################
  100.  
  101. pysvn_current_br_num = pysvn.Revision( pysvn.opt_revision_kind.number, br_num);
  102. pysvn_log_start = pysvn.Revision( pysvn.opt_revision_kind.number, last_lib_num);
  103. pysvn_log_end = pysvn.Revision( pysvn.opt_revision_kind.number, lib_num);
  104. """
  105. retcode - boolean, False if no username and password are available. True if subversion is to use the username and password.
  106. username - string, the username to uses
  107. password - string, the password to use
  108. save - boolean, return True if you want subversion to remember the username and password in the configuration directory. return False to prevent saving the username and password.
  109. """
  110. #def get_login( realm, username, may_save ):
  111. # return retcode, username, password, save
  112.  
  113. client = pysvn.Client()
  114. #client.callback_get_login = get_login
  115.  
  116. client.revert(code_path,True);
  117.  
  118. client.update(code_path,True,pysvn_current_br_num,False);
  119.  
  120. client.export(code_path+"/vasp",vasp,True,pysvn_current_br_num,None,False);
  121. client.export(code_path+"/product/ar/vaspadp",vaspadp,True,pysvn_current_br_num,None,False);
  122.  
  123. """
  124. log returns a list of log entries; each log entry is a dictionary. The dictionary contains:
  125. author - string - the name of the author who committed the revision
  126. date - float time - the date of the commit
  127. message - string - the text of the log message for the commit
  128. revision - pysvn.Revision - the revision of the commit
  129. changed_paths - list of dictionaries. Each dictionary contains:
  130. path - string - the path in the repository
  131. action - string
  132. copyfrom_path - string - if copied, the original path, else None
  133. copyfrom_revision - pysvn.Revision - if copied, the revision of the original, else None
  134. """
  135. logmessege=client.log(code_path,pysvn_log_start,pysvn_log_end,False,False);
  136. log_file = dest_path + '/'+"log.txt";
  137. fp = open(log_file,"a");
  138. for log_one in logmessege:
  139. fp.write(log_one.author +" "+ log_one.message + "\n");
  140. fp.close();

python利用pysvn发布lib的小程序的更多相关文章

  1. Python 练习冊,每天一个小程序

    Python 练习冊,每天一个小程序 说明:     Github 原文地址: 点击打开链接 Python 练习冊.每天一个小程序.注:将 Python 换成其它语言,大多数题目也试用 不会出现诸如「 ...

  2. 利用函数计算构建微信小程序的Server端

    10分钟上线 - 利用函数计算构建微信小程序的Server端-博客-云栖社区-阿里云 https://yq.aliyun.com/articles/435430 函数计算  读写 oss import ...

  3. js 利用throw 写的一个小程序

    在下边的小程序中比较特殊的是使用isNaN()函数判断一个参数是不是数字, <!DOCTYPE html> <!DOCTYPE html> <html> <h ...

  4. 如何利用MongoDB打造TOP榜小程序

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB发表于云+社区专栏 今天我分享的主题内容大概是两部分,最主要的还是小游戏和小程序,第一部分就是跟大家分 ...

  5. 微信小程序如何提交审核并发布?发布问题:小程序只支持https访问

    http://www.jisuapp.cn/news/305.html 发布问题:1.小程序只支持https访问 2.要配置服务域名

  6. 利用Bomb打造自己的小程序

    小程序开发 Bomb免费后端云开发 首先,小程序的开发已是热门,一个前段技术人员必备的技术就是开发小程序.在这里推荐一个入门小程序文章(连胜出品). 对于小程序的入门开发就不再做详细介绍,这里针对Bm ...

  7. CocosCreator上的游戏(调试)发布到微信小程序

    1.下载CocosCreator,微信开发者工具 官网地址:http://www.cocos.com/download 官网下载:https://developers.weixin.qq.com/mi ...

  8. uniapp发布到微信小程序整改摘要

    uniapp作为跨端的利器,可同时发布到安卓.ios.微信小程序.支付宝小程序.百度小程序.头条小程序.QQ小程序等8个平台. 如果是轻量级的应用,不涉及太多功能的话,或许可以直接打包移植,但涉及前后 ...

  9. 破界!Omi生态omi-mp发布,用小程序开发生成Web

    omi-mp 是什么 Omi 框架是微信支付线研发部和 AlloyTeam 开源的通用 Web 组件化框架,基于 Web Components,用来开发 PC.手机浏览器或者微信.手Q webview ...

随机推荐

  1. 利用nginx实现负载均衡和动静分离

    1.Nginx介绍 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 . Nginx 是由 ...

  2. Aurora Player 开源啦~~~

    上一年做了很久的项目,是一个完整版的视频播放器,强大.美观!!! 现在转投UWP了,决定开源这个项目. 在你下载本项目之前,请仔细阅读每一行字,以免以后引起不必要的法律纠纷. 本项目最终解释权归本人所 ...

  3. 浏览器Agent大全 (含IE 11, Edge)

    Edge mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/51.0.27 ...

  4. 毕达哥拉斯树(pythagorasTree)原理解析及canvas动画实现

    以前就看到了这个东西,由于太忙了最近才有时间来实现这个; 该文章适合有一定 canvas 基础的人阅读; 首先说说他的原理: The construction of the Pythagoras tr ...

  5. poj 2905 双向队列(待补充)

    Parallel Computer Simulator   Description Programs executed concurrently on a uniprocessor system ap ...

  6. 关于SPI通信原理与程序实现

    第一次接触SPI是因为当时用到NRF24L01,需要用SPI进行通信.因为2401上面写着MOSI.MISO.SS.RST,当时以为只要用到SPI就肯定有这几个引脚,以至于限制了自己的思维.只认识MI ...

  7. Ubuntu使用之Svn命令小技巧

    注: [svn Path]:是指要代替码分支的server绝对路径 [Path]:是指终端相对当前文件夹的相对路径.假设是在当前文件夹下,就省略路径 ①.取svnserver的代码: svn co [ ...

  8. 【日常学习】【线性DP】codevs1044 拦截导弹题解

    题目描写叙述 Description 某国为了防御敌国的导弹突击,发展出一种导弹拦截系统.可是这样的导弹拦截系统有一个缺陷:尽管它的第一发炮弹可以到达随意的高度,可是以后每一发炮弹都不能高于前一发的高 ...

  9. 用泛型创建SqlServerHelper类实现增删改查(一)

    使用泛型,可以构建对数据库单表的基本增删改查. 首先有一数据库 Test_SqlServerHelper ,有2表 接下来创建项目,对数据库进行增删改查. 直接贴代码:(SqlServerHelper ...

  10. 【maven教程】(1)---maven环境配置

    maven环境配置 刚开始学习maven,现在项目需要用到maven,而且他确实很好用,也比较容易上手,我也是主要通过视频学习,在写博客的时候也会总结其它人所写 博客,从简到难,如果你也是初学者那接下 ...