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");        // 1024

FileOutputStream fos = new FileOutputStream(path);
fos.write(output);
out.close();
fos.close();


整个工具的代码在这里 https://files.cnblogs.com/yans/VersionPacking.rar

调用java去打包的脚本

java -jar VersionPacking.jar [path] [outputfile]

其中path是svn.xml的路径, outputfile是输出的目录

posted @ 2014-01-14 11:36  yans  阅读(2970)  评论(0编辑  收藏  举报