zoukankan      html  css  js  c++  java
  • svn客户端代码版本号自动更新 依赖Lua

    首先,依赖于提交前拿项目根的最大版本号,然后加1再提交

    依赖:Lua和Subversion

    不清楚这个流程是否有问题,望高人指点。实现如下:

    文档类有个静态变量表示svn的版本

    public static const SVN_VERSION : String = "71";

    然后项目根目录下有个比处理hook.bat,是入口

    @echo off
    setlocal enabledelayedexpansion
    ::Lua路径
    SET LUA_PATH=D:\Lua\
    SET LOCAL_PATH=%~dp0
    %LUA_PATH%lua
    .exe -e "local_path='%LOCAL_PATH:\=\\%';file_name='src\\LocalFile.as';dofile('%LUA_PATH%\\svn\\hook.lua');"
    if %errorlevel% gtr 0 goto err
    exit 0
    :err
    echo 错误
    exit 1

    file_name:表示要替换的文件在项目的相对路径,在我这里是LocalFile.as

    在Lua的svn的下面有个hook.lua的文件是实际查找替换的文件,在我这里是D:\Lua\svn\hook.lua

    下面是lua的代码

    --初始化
    svn
    = {};
    --设置svn的路径
    svn.bin
    = "C:\\Program Files\\Subversion\\bin\\";
    --要替换的文件相对路径
    svn.fileName
    = file_name;
    svn.localPath
    = local_path.."";
    function os.capture(cmd, raw)
    local f
    = assert(io.popen(cmd, 'r'))
    local s
    = assert(f:read('*a'))
    f:close()
    if raw then return s end
    s
    = string.gsub(s, '^%s+', '')
    s
    = string.gsub(s, '%s+$', '')
    s
    = string.gsub(s, '[\n\r]+', ' ')
    return s
    end
    function svn.info(path)
    local s
    = os.capture("\"".. svn.bin .."svn.exe\" info "..path,1);
    if s then
    return s;
    else
    return nil;
    end
    end
    function svn.getHeadVersion(path)
    local s
    = svn.info(path);
    if s then
    local info
    = s;
    io.write(s);
    s
    = info:match("最后修改的版本:(%d*)");
    end
    return s;
    end
    function svn.getInfo(path)
    local info
    = {};
    local s
    = svn.info(path);
    for k,v in s:gmatch("([^:]+):%s*([^\r\n]+)[\r\n]+") do
    info[k]
    =v
    end
    return info;
    end
    --先拿版本库的根
    local local_info
    = svn.getInfo(svn.localPath);
    --再拿版本库根的最新版本
    local ii
    = svn.getInfo(local_info["版本库根"]);
    --local ss = svn.getHeadVersion("svn://192.168.1.243/Flash");
    local _version
    = ii["最后修改的版本"] + 1;
    local _root
    = ii["版本库根"];
    if _version and svn.fileName and svn.localPath and svn.localPath ~= '' then
    file
    = io.open(svn.localPath..svn.fileName,"r");
    local v
    = _version;
    ss
    = file:read("*a");
    ss
    = ss:gsub("SVN_VERSION%s?:%s?String%s?=%s?\"(%d*)\"","SVN_VERSION : String = \""..v.."\"",1);
    file:close();
    file
    = nil;
    file
    = io.open(svn.localPath..svn.fileName,"w");
    file:write(ss);
    file:close();

    else
    do
    local message
    = "";
    if not _version then message = message.."_version 为空"; end
    if not svn.fileName then message = message.."svn.fileName 为空"; end
    if not svn.localPath then message = message.."svn.localPath 为空"; end
    if svn.localPath == "" then message = message.."svn.localPath 为\"\""; end
    error(
    "错误 in lua"..message);
    end

    end

    在这里要指定svn的bin目录,我的Subversion是中文版,不知道其他的情况怎么样

    使用方法是在客户端挂re-commit hook就可以了,指定项目路径和执行文件的路径就好了

    还有,或许这个东西用bat或者vb都是很简单,但我不怎么精通,哎

    今天就到这里吧

  • 相关阅读:
    港湾交换机-交换机配置
    华为交换机-SNMP配置
    H3C交换机-SNMP配置
    CISCO交换机-SNMP配置
    docker容器与宿主交互数据
    MYSQL总览
    mysql数据类型优化
    compact 创建一个包含变量名为数组的键和它们的值为数组的值的数组
    php单例模式
    完形填空格式
  • 原文地址:https://www.cnblogs.com/ShepherdIsland/p/2074549.html
Copyright © 2011-2022 走看看