首先,依赖于提交前拿项目根的最大版本号,然后加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都是很简单,但我不怎么精通,哎
今天就到这里吧