Noosphere Possibilities Maximized

    node.svntail

    0.6.30 • Public • Published

    演示截图

    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

    Install

    npm i node.svntail

    DownloadsWeekly Downloads

    2

    Version

    0.6.30

    License

    none

    Last publish

    Collaborators

    • xunuo
    • wiky