zoukankan      html  css  js  c++  java
  • Mercurial (hg) Hook : PHP Syntax Check , hg 代码检测 钩子

          用百度搜了一遍hg的hook教程,发现真的是太少了。公司目前正要用到这个,正好本人负责,So。

    百度是个坑,少有的几篇文章,再加上善于发现的眼睛,发现TortoiseHg的UI操作都会在控制台显示动作命令,结合之才有下面这个hook!

    以上,是不是要转google?! 

    下面内容结合鄙人的这个篇文章[ 使用 PHP_CodeSniffer 检查 代码 是否 符合 编码规范 ],食用起来应该更美味!

    1.编写如下sh脚本,并执行 chmod a+x 赋予执行权限:

    #!/bin/bash
    
    echo -e "
    ==========================Starting PHP Syntax Check==========================
    "
    
    #在/tmp目录下创建临时目录
    TEMP_DIR=`mktemp -dt php_syntax_files.XXXXXX`
    
    #临时测试
    #TEMP_DIR="/tmp/test/"
    #HG_NODE="d0a1ccf22a26dfe62ae1db932dcc4972509b8f0b"
    
    HG_BIN="/usr/bin/hg"
    CHECK_CMD="php /home/hg/php_codesniffer/scripts/phpcs --standard=Fenqile --tab-width=4 $TEMP_DIR"、
    
    #输出临时目录
    echo "temp dir : "$TEMP_DIR
    
    #导出当前至最新
    #hg archive -r $HG_NODE:tip -t files /tmp/test
    #导出当前
    #hg archive -r $HG_NODE -t files /tmp/test
    #全量导出
    #hg archive -r tip -t files /tmp/test
    #导出修改部分的代码
    echo $HG_BIN" archive -I "set:added() or modified()" -r "$HG_NODE":tip -t files "$TEMP_DIR
    $HG_BIN archive -I "set:added() or modified()" -r $HG_NODE:tip -t files $TEMP_DIR
    
    #检测代码,输出提示
    echo "$CHECK_CMD"
    TEST_SYNTAX=`$CHECK_CMD`
    echo -e "$TEST_SYNTAX"
    
    #删除目录
    echo "rm -rf "$TEMP_DIR
    rm -rf "$TEMP_DIR"
    
    if [ "0" == "${TEST_SYNTAX}" ] || [ "" == "${TEST_SYNTAX}" ];then
        echo -e "Through code detection, allowed to push!"
        exit 0
    fi
    
    echo -e "
    
    Server detected the code has a problem, please check to submit the push again!"
    echo -e "
    ===============================================================================
    
    "
    exit 1

    2.在代码仓库所在目录下,编辑 [ 代码库/.hg/hgrc ] 文件,添加如下节点:

    [hooks]
    pretxnchangegroup = /home/hg/php_codesniffer/scripts/hg_pretxnchangegroup_hook.sh

    3. 在本地添加代码版本,推送代码(hg push),效果如下:

    test% hg push
    % hg push
    正在推到 ssh://hg@192.168.6.234//home/hg/myproject
    正在搜索修改
    remote: adding changesets
    remote: adding manifests
    remote: adding file changes
    remote: added 3 changesets with 8 changes to 3 files
    remote: 
    remote: ==========================Starting PHP Syntax Check==========================
    remote: 
    remote: temp dir : /tmp/php_syntax_files.OxLrCU
    remote: /usr/bin/hg archive -I "set:added() or modified()" -r d0a1ccf22a26dfe62ae1db932dcc4972509b8f0b:tip -t files /tmp/php_syntax_files.OxLrCU
    remote: php /home/hg/php_codesniffer/scripts/phpcs --standard=Fenqile --tab-width=4 /tmp/php_syntax_files.OxLrCU
    remote: 
    remote: FILE: /tmp/php_syntax_files.OxLrCU/test30000.php
    remote: -------------------------------------------------------------------------
    remote: FOUND 1 ERROR AFFECTING 1 LINE
    remote: -------------------------------------------------------------------------
    remote:  7 | ERROR | [x] A closing tag is not permitted at the end of a PHP file
    remote: -------------------------------------------------------------------------
    remote: PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
    remote: -------------------------------------------------------------------------
    remote: 
    remote: 
    remote: FILE: /tmp/php_syntax_files.OxLrCU/test40000.php
    remote: -------------------------------------------------------------------------
    remote: FOUND 1 ERROR AFFECTING 1 LINE
    remote: -------------------------------------------------------------------------
    remote:  6 | ERROR | [x] A closing tag is not permitted at the end of a PHP file
    remote: -------------------------------------------------------------------------
    remote: PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
    remote: -------------------------------------------------------------------------
    remote: 
    remote: Time: 7ms; Memory: 2Mb
    remote: rm -rf /tmp/php_syntax_files.OxLrCU
    remote: 
    remote: 
    remote: Server detected the code has a problem, please check to submit the push again!
    remote: 
    remote: ===============================================================================
    remote: 
    remote: 
    remote: transaction abort!
    remote: rollback completed
    remote: abort: pretxnchangegroup hook exited with status 1
    [命令返回代码1 Wed Apr 20 12:27:12 2016]
    test% 

    到此配置完毕!

    ps:

    https://www.mercurial-scm.org/wiki/Hook#Hook_return_values

    https://selenic.com/hg/help/config

    http://pear.php.net/manual/en/package.php.php-codesniffer.svn-pre-commit.php

    http://stackoverflow.com/questions/4162384/mercurial-pre-commit-hook

    http://www.softwareprojects.com/resources/programming/t-mercurial-hook-php-syntax-check-1976.html

    https://www.mercurial-scm.org/wiki/Hook

  • 相关阅读:
    继承和多态的纠错
    面向对象的七个设计原则
    C#中简单的继承和多态
    体验套餐管理系统
    项目经理评分(评价)
    考勤信息(员工打卡)
    Python中的进制转换
    Python常用模块
    Tornado中异步框架的使用
    Tornado框架的简单使用
  • 原文地址:https://www.cnblogs.com/phpdragon/p/5412093.html
Copyright © 2011-2022 走看看