演示截图
安装手册
依赖
nodejs 0.6.1x
NodeJS官方网站 | 安装参考文章
定位hooks目录
一般hooks目录位于svn库根目录下,一般同级的目录还有dav、db、locks
通过NPM安装node.svntail
// 在hooks目录下运行npm install nodesvntail
修改pre-commit文件(以下是示例)
注意!在一切开始前,首先要给pre-commit赋可执行权限,安装完成后建议运行 dos2unix pre-commit 转义其中的非ASCII字符.
#!/usr/bin/node /** * 配置集合*/var config = /** * 总控开关 (on/off) * @property config.switch */ */ repos : processargv2 /** * 当前提交唯一标识戳 中间状态版本号 * @property config.txn */ txn : processargv3 /** * 作用域 * @property config.scope */ scope : '^intl-style/*' /** * debug 模式 (额外信息输出) * @property config.debug */ debug : false /** * SVN提交内容缓存路径 检测作用域 * @property config.tempPath */ tempPath : __dirname + '/temp-svntail-pre-commit/' + processargv3 /** * svnlook命令全路径 * 通过whereis svnlook可获取,通常是 /usr/bin/svnlook 或 /usr/local/bin/svnlook * @property config.cmdSvnlook */ cmdSvnlook : 'LANG=zh_CN.utf8 /usr/local/bin/svnlook' /** * 是否需要传输数据到远程API * @property config.remoteConnect */ remoteConnect : false /** * 远程API设置 ( 用于发送提交信息至此API ) * @property config.remoteApiSettings */ remoteApiSettings : host: 'reporter.aliui.com' port: '99' path: '/api.js' method: 'POST' /** * 强制提交注释标识 * @property config.forceCommitLog */ forceCommitLog : '--force-commit' /** * 是否自动删除缓存文件 * @property config.autoDelTemp */ autoDelTemp : true /** * 各种检测模块配置 (和检测模块同名) * @property config.lintsConfig */ validateConfigs : // 提交路径检测规则 'mod-validator-path' : // 新增目录规则 'TheNewDirNameRules' : ruleName : 'The New Dir Name Validate Rules' //warnning : '新增目录规则为 : 英文小写字母、数字、中划线连接(开头允许一个下划线)' warnning : '(!) Found Some Dir(s) Name Errors, Rule: lowcase letters, number & line-through[or begining_underline].' filter : itemType : 'dir' commitType : 'A' validateRule : '^_?[a-z0-9-]*/$' // 新增文件规则 'TheNewFileNameRules' : ruleName : 'The New File Name Validate Rules' //warnning : '新增文件规则为 : 英文小写字母、数字、中划线连接。' warnning : '(!) Found Some File(s) Name Errors, Rule: lowcase letters, number & line-through.' filter : itemType : 'file' commitType : 'A' validateRule : '^[a-z0-9-./]*$' // JS目录文件规则 'JsDirRules' : ruleName : 'The Js Dir Validate Rules' warnning : '(!) New js file rule is : extname must be [js|md|js.seed|xml|html|spec.js].' filter : itemType : 'file' commitType : 'A' inRegx : '^intl-style/trunk/deploy/htdocs/js/*''^intl-style/branches/.*?/deploy/htdocs/js/*' // lib目录放行 popRegx : '^intl-style/trunk/deploy/htdocs/js/5v/lib/*''^intl-style/branches/.*?/deploy/htdocs/js/5v/lib/*' validateRule : '^(.*?)\\.(?:js|md|js.seed|xml|html|spec.js).*$' // CSS目录文件规则 'CssDirRules' : ruleName : 'The Css Dir Validate Rules' warnning : '(!) New css file rule is : extname must be [css|md|css.seed|html].' filter : itemType : 'file' commitType : 'A' inRegx : '^intl-style/trunk/deploy/htdocs/css/*''^intl-style/branches/.*?/deploy/htdocs/css/*' validateRule : '^(.*?)\\.(?:css|md|css.seed|html).*$' // 图片目录文件规则 'ImgDirRules' : ruleName : 'The Images Dir Validate Rules' warnning : '(!) New image file rule is : extname must be [jpg|cur|gif|png|psd|md].' filter : itemType : 'file' commitType : 'A' inRegx : '^intl-style/trunk/deploy/htdocs/simg/*''^intl-style/trunk/deploy/htdocs/wimg/*''^intl-style/branches/.*?/deploy/htdocs/simg/*''^intl-style/branches/.*?/deploy/htdocs/wimg/*' validateRule : '^(.*?)\\.(?:jpg|cur|gif|png|psd|md).*$' // 编码检测规则 'mod-validator-charset' : // style utf-8 rule 'TheUTF8NoBOMRules' : ruleName : 'Files Charset Validate Rules' warnning : '(!) File(s) with wrong charset. there must be : ASCII, UTF-8(without BOM).' filter : itemType : 'file' validateRule : 'utf-8''ascii''null''windows-1252' // JS语法检测 'mod-validator-jshint' : 'TheJsHintRules' : ruleName : 'The Javascript Hint Rule' warnning : '(!) JsHint Warnning(s).' filter : itemType : 'file' commitType : 'A''U''_U''UU''G' extName : ".js" inRegx : '^intl-style/trunk/deploy/htdocs/js/*''^intl-style/branches/.*?/deploy/htdocs/js/*' // 提交者检测 'mod-validator-author' : 'JSCommitLimitRule' : ruleName : 'The Javascript File Commit Limit' warnning : '(!) You can not commit in this dir. The free authors are \n[ {{freeAuthors}} ]' filter : itemType : 'all' inRegx : '^intl-style/trunk/deploy/htdocs/js/5v/app/*''^intl-style/trunk/deploy/htdocs/js/5v/util/*''^intl-style/trunk/deploy/htdocs/js/5v/lib/ae/*''^intl-style/trunk/deploy/htdocs/js/5v/mod/common/*''^intl-style/branches/.*?/deploy/htdocs/js/5v/mod/common/*''^intl-style/branches/.*?/deploy/htdocs/js/5v/lib/ae/*''^intl-style/branches/.*?/deploy/htdocs/js/5v/lib/util/*''^intl-style/branches/.*?/deploy/htdocs/js/5v/app/*''^intl-style/trunk/deploy/htdocs/css/6v/seeds/*''^intl-style/branches/.*?/deploy/htdocs/css/6v/seeds/*' freeAuthors : 'zhenyu.zhaozy''nanqiao.dengnq''xiaoxin.zhangxx''yanhua.guyh''zhao.wuz''xiaoyun.fuxy''peng.hep''jianqing.zengjq''been.zhangb''nuo.xun' // ↑ 各种检测模块配置 ; // 载入提交前检测模块var preCommit = ; // 传入自定义配置 开始运行preCommitstartconfig;
运行服务端(默认端口为99)
// 开启前注意配置SVN钩子端的remoteConnect及remoteApiSettings配置node nodesvntail/lib/server-reporterjs