ns

node.svntail

node svn server hook extend

Showing:

Popularity

Downloads/wk

22

Maintenance

No Maintenance Data Available

Package

Dependencies

7

License

Type Definitions

Tree-Shakeable

No?

Categories

Readme

演示截图

SVN尾巴


安装手册

依赖

nodejs 0.6.1x
NodeJS官方网站 | 安装参考文章

定位hooks目录

一般hooks目录位于svn库根目录下,一般同级的目录还有dav、db、locks

通过NPM安装node.svntail

// 在hooks目录下运行
npm install node.svntail

NPM包详情

修改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

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100
No reviews found
Be the first to rate

Alternatives

No alternatives found

Tutorials

No tutorials found
Add a tutorial