SVN版本号打包脚本工具
做网页游戏开发的时候,经常会触及到对文件版本号的管理。
最近由于做新项目的原因,把原来手写版本号的方法改进了一下,借由svn的版本号生成及用java写了个xml解析输出文件,把手动的东西都变成全自动。
主要是思路是这样的:
1.用svn脚本生成版本的xml文件,这里要用到svn工具,这个是官方的下载地址:http://subversion.apache.org/packages.html
2.对生成的xml文件(如svn.xml)进行解析并打包。输出个二进制文件(如svn.dat)
3.工具里对版本号文件进行压缩。
下面贴出来部分关键的代码:
生成svn版本号的脚本
svn status [path] -v --xml > c:\svn.xml
主代码,打包输出并压缩几个步骤在这里
//获取XML
Document documet = GetDocument(path);
//解析
HashMap<String, Integer> map = readFromDocument(documet);
//输出二进制文件
outputBinary(map, outPath);
//压缩
compress(outPath);
解析svn版本号文件
//获取主路径
Element element = (Element)documet.getElementsByTagName("target").item(0);
mainPath = element.getAttribute("path") + "\\";
mainPath = mainPath.replaceAll("\\\\", "\\\\\\\\");; HashMap<String, Integer> map = new HashMap<>();
NodeList list = documet.getElementsByTagName("entry");
for(int i = 0; i < list.getLength(); i++) {
element = (Element)list.item(i);
String path = element.getAttribute("path");
File file = new File(path);
if(file.isFile()) {
if(path.length() != mainPath.length()) path = path.replaceFirst(mainPath, "");
//wc-status commit revision
Element verEle = (Element)(element.getElementsByTagName("commit").item(0));
Integer version = Integer.parseInt( verEle.getAttribute("revision") );
System.out.println(path + ":" + version);
map.put(path, version);
}
}
return map;
压缩输出的文件
System.out.println("#start to compress " + path);
BufferedInputStream in = new BufferedInputStream(new FileInputStream(path));
ByteArrayOutputStream out = new ByteArrayOutputStream(1024); byte[] temp = new byte[1024];
int size = 0;
while ((size = in.read(temp)) != -1) {
out.write(temp, 0, size);
}
in.close();
byte[] data = out.toByteArray();
byte[] output = CompressionUtil.compress(data, CompressionUtil.Level.BEST_COMPRESSION);
System.out.println("before : " + (data.length ) + "byte"); /// 1024
System.out.println("after : " + (output.length ) + "byte"); // FileOutputStream fos = new FileOutputStream(path);
fos.write(output);
out.close();
fos.close();
整个工具的代码在这里 http://files.cnblogs.com/yans/VersionPacking.rar
调用java去打包的脚本
java -jar VersionPacking.jar [path] [outputfile]
其中path是svn.xml的路径, outputfile是输出的目录
SVN版本号打包脚本工具的更多相关文章
- Linux下Maven+SVN自动打包脚本
公司的开发环境每次部署项目都很麻烦,需要手动打包并上传上去.这个太麻烦了,所以就准备搞个自动打包的脚本.脚本自动从svn代码库里面更新最新的代码下来,然后maven打包,最后把war包丢到to ...
- 工具——代码中自动生成SVN版本号
本节和大家讨论一下程序集版本最后一位使用SVN版本号的自动生成方法,这里就向大家简单介绍一下.在进行自动部署的时候,经常需要用脚本获取程序的最新版本号.现在我们定义每个程序集的版本信息的最末段表示SV ...
- Android Gradle实用技巧——APK文件名中加上SVN版本号,日期等
有时候,我们会希望能把APK文件名上带上打包日期,打包时svn的版本号,应用版本号等.当然这些也可以手动添加,但是手动的话也未免太不优雅了,而且可能会出错. 利用Gradle,我们可以让打包出来的ap ...
- 在C++程序中自动加入svn版本号
原创文章,欢迎阅读,如果您想转载,请在第一行醒目注明原作者和原始链接. 为了方便追查和确认软件bug等问题,给软件或者库赋予版本号是个好办法. 最简单的版本号管理是记录编译时间: cout<&l ...
- 自己主动化的在程序中显示SVN版本号
有时候会有这种情况,策划拿着应用过来提一个bug,但我们却不好确定策划的手机上装的应用相应的是那个代码版本号. 为了解决问题.我们希望能在应用上显示出当前应用所相应的代码版本号,即svn版本号. 构想 ...
- 一键删除.svn文件bat脚本
用过SVN或CVS版本控制工具的朋友,在享受着它们给我们带来的方便的同时,也许也在为这么一件事情苦恼: 如果某个目录在SVN或CVS版本控制工具的控制之下时.该目录下以及该子孙目录下都会有一个.svn ...
- C#:通过Visual Studio项目预生成命令获取SVN版本号
之前有一个winfrom项目,想要通过获取SVN版本号作为程序的内部编译版本号.网上也有各种方法,但没有一篇行得通的方法.于是我经过一系列研究,得出了一些经验,特总结成一篇博客. 方法一:通过SVN命 ...
- xcode8.3 shell 自动打包脚本 记录
题记 xcode升级8.3后发现之前所用的xcode自动打包基本无法使用,因此在网上零碎找到些资料,将之前的脚本简化.此次脚本是基于xcode证书配置进行打包(之前是指定描述文件.相对繁琐).因此代码 ...
- 开始你的第一个npm脚本工具
在实际开发中,一般刚开始一个项目或者刚接手一个项目,我们会运行 npm install 下载安装所有依赖, 在实际开发中,可能也会使用各种命令行-- 来提高我们开发的效率. 与它相处了这么久,你真的了 ...
随机推荐
- querystring 解析url 查询字符串
对前端同学来说,经常要碰到一种比较麻烦的情况,那就是url查询字符串的解析问题.说起来也不难,就是比较麻烦. 具体来处理这种情况的时候,相信有一部分同学就是针对具体项目中的需要的字符去正则匹配一下,业 ...
- debian bcm43* 无线网卡驱动
deb http://httpredir.debian.org/debian/ jessie main contrib non-free # apt-get update# apt-get insta ...
- iOS 如何在Label中显示html的文本
if (self.messageModel) { NSString * htmlString = self.messageModel.contentText; NSAttributedString * ...
- java类
1.四种访问控制符 private.不指明.protected.public 2.构造函数没有返回值 是因为构造函数默认返回的是类的实例对象.所以不需要写返回值 3.static static表示类拥 ...
- was not declared in this scope
“was not declared in this scope”是一个错误信息,在编译的时候会遇到.其含义为标识符在其出现的地方是未被定义的. 出现该错误的时候,会同时把未定义的变量名显示出来.比如如 ...
- 浅谈在静态页面上使用动态参数,会造成spider多次和重复抓取的解决方案
原因: 早期由于搜索引擎蜘蛛的不完善,蜘蛛在爬行动态的url的时候很容易由于网站程序的不合理等原因造成蜘蛛迷路死循环. 所以蜘蛛为了避免之前现象就不读取动态的url,特别是带?的url 解决方案: 1 ...
- Java多线程开发系列之四:玩转多线程(线程的控制1)
在前文中我们已经学习了:线程的基本情况.如何创建多线程.线程的生命周期.利用已有知识我们已经可以写出如何利用多线程处理大量任务这样简单的程序.但是当应用场景复杂时,我们还需要从管理控制入手,更好的操纵 ...
- oracle事物
要想解释oracle事物的工作流程,首先先解释几个小概念: 1.undo段的组成:段头.回滚块 2.事物ID:每一个事物都有一个自己的事物ID,就像身份证号一样. 在v$tra ...
- FC400的PM2.5过滤效率测试。。
今天北京雾霾爆表,拿空气堡在外面测试,达到600多,然后在新风风口测试,差不多60到80.可以得到效率只有85%到90%左右,这和销售说的数值差不多,肯定达不到手册上写的99%,那是实验值,骗人的. ...
- ruby第一次实践 ”hello world“
下载ruby https://rubyinstaller.org/downloads/ 创建 ruby-version 写自己的版本 写Gemfile source: http://ruby.ta ...