zoukankan      html  css  js  c++  java
  • 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();


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

    调用java去打包的脚本

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

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

  • 相关阅读:
    带符号数的移位
    day03-Java语言基础之运算符
    day02Java语言基础数量部分
    day01Java概述
    交换机光口识别与连接问题
    wireshark怎么抓包
    Java中的语句
    构建主键批注的方法
    通过反射,获得数据库增删改查的sql语句的方法
    sql语句
  • 原文地址:https://www.cnblogs.com/yans/p/svn_deliver.html
Copyright © 2011-2022 走看看