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是输出的目录