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