node.svntail
v0.6.30
Published
node svn server hook extend
Downloads
20
Readme
演示截图
安装手册
依赖
nodejs 0.6.1x
NodeJS官方网站 | 安装参考文章
定位hooks目录
一般hooks目录位于svn库根目录下,一般同级的目录还有dav、db、locks
通过NPM安装node.svntail
// 在hooks目录下运行
npm install node.svntail
修改pre-commit文件(以下是示例)
注意!在一切开始前,首先要给pre-commit赋可执行权限,安装完成后建议运行 dos2unix pre-commit 转义其中的非ASCII字符.
#!/usr/bin/node
/**
* 配置集合
*/
var config = {
/**
* 总控开关 (on/off)
* @property config.switch {string}
*/
switch : "on",
/**
* 版本库地址
* @property config.repos {string}
*/
repos : process.argv[2],
/**
* 当前提交唯一标识戳 中间状态版本号
* @property config.txn {string}
*/
txn : process.argv[3],
/**
* 作用域
* @property config.scope {array}
*/
scope : ['^intl-style/*'],
/**
* debug 模式 (额外信息输出)
* @property config.debug {boolean}
*/
debug : false,
/**
* SVN提交内容缓存路径 检测作用域
* @property config.tempPath {string}
*/
tempPath : __dirname + '/temp-svntail-pre-commit/' + process.argv[3],
/**
* svnlook命令全路径
* 通过whereis svnlook可获取,通常是 /usr/bin/svnlook 或 /usr/local/bin/svnlook
* @property config.cmdSvnlook {string}
*/
cmdSvnlook : 'LANG=zh_CN.utf8 /usr/local/bin/svnlook',
/**
* 是否需要传输数据到远程API
* @property config.remoteConnect {boolean}
*/
remoteConnect : false,
/**
* 远程API设置 ( 用于发送提交信息至此API )
* @property config.remoteApiSettings {object}
*/
remoteApiSettings : {
host: 'reporter.aliui.com',
port: '99',
path: '/api.js',
method: 'POST'
},
/**
* 强制提交注释标识
* @property config.forceCommitLog {string}
*/
forceCommitLog : '--force-commit',
/**
* 是否自动删除缓存文件
* @property config.autoDelTemp {boolean}
*/
autoDelTemp : true,
/**
* 各种检测模块配置 (和检测模块同名)
* @property config.lintsConfig {object}
*/
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 = require('node.svntail/lib/hook-pre-commit.js');
// 传入自定义配置 开始运行
preCommit.start(config);
运行服务端(默认端口为99)
// 开启前注意配置SVN钩子端的remoteConnect及remoteApiSettings配置
node node.svntail/lib/server-reporter.js