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 "\n==========================Starting PHP Syntax Check==========================\n" #在/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 [ "" == "${TEST_SYNTAX}" ] || [ "" == "${TEST_SYNTAX}" ];then
echo -e "Through code detection, allowed to push!"
exit
fi echo -e "\n\nServer detected the code has a problem, please check to submit the push again!"
echo -e "\n===============================================================================\n\n"
exit
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 changesets with changes to 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= /tmp/php_syntax_files.OxLrCU
remote:
remote: FILE: /tmp/php_syntax_files.OxLrCU/test30000.php
remote: -------------------------------------------------------------------------
remote: FOUND ERROR AFFECTING LINE
remote: -------------------------------------------------------------------------
remote: | ERROR | [x] A closing tag is not permitted at the end of a PHP file
remote: -------------------------------------------------------------------------
remote: PHPCBF CAN FIX THE MARKED SNIFF VIOLATIONS AUTOMATICALLY
remote: -------------------------------------------------------------------------
remote:
remote:
remote: FILE: /tmp/php_syntax_files.OxLrCU/test40000.php
remote: -------------------------------------------------------------------------
remote: FOUND ERROR AFFECTING LINE
remote: -------------------------------------------------------------------------
remote: | ERROR | [x] A closing tag is not permitted at the end of a PHP file
remote: -------------------------------------------------------------------------
remote: PHPCBF CAN FIX THE 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 Wed Apr :: ]
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
Mercurial (hg) Hook : PHP Syntax Check , hg 代码检测 钩子的更多相关文章
- Mercurial 的hook使用
1. Handling repository events with hooks可以通过Mercurial版本管理工具提供的hooks机制来处理repo的各种事件,从而实现对Mercurial的扩展, ...
- delphi Syntax check、 build、 run、 compile的区别
delphi Syntax check. build. run. compile的区别 Build是从新编译所有和生成exe有关的文件,无论.pas文件是否修改过,它都会重新生成新的.dcu,并从新 ...
- C# Mysql You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ????
有几年没用过MySql数据了,今天在使用C#访问MySql数据库时出现了一个小插曲. 错误提示: You have an error in your SQL syntax; check the man ...
- 解决You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order (order_name, customer)
在学习hibernate一对多映射关系时,根据视频学习的时候,例子是顾客和订单的问题,一个顾客有多个订单.按照视频中的敲代码出现了You have an error in your SQL synta ...
- ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=InnoDB' at line 7
问题: 使用hibernate4.1.1,数据库使用mysql5.1.30,使用hibernate自动生成数据库表时,hibernate方言使用org.hibernate.dialect.MySQLI ...
- MySql 执行语句错误 Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
关于用Power Designer 生成sql文件出现 错误 [Err] 1064 - You have an error in your SQL syntax; check the manual ...
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
mysql中如果字段使用了关键字,在插入和更新时会提示 You have an error in your SQL syntax; check the manual that corresponds ...
- mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in your SQL syntax; check the manual t
1.备份mysql数据库时候出错,导出数据: [root@localhost ~]# mysqldump -uroot -p mysql >/root/bck.sql Enter passwor ...
- [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds...
INSERT INTO `ftms_active_dealer`(dealer_code,dealer_name,active_id,dealer_state)VALUES('415A1','贺磊'1 ...
随机推荐
- linux <<eof
在平时的运维工作中,我们经常会碰到这样一个场景:执行脚本的时候,需要往一个文件里自动输入N行内容.如果是少数的几行内容,还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式就显得愚蠢 ...
- Linux中ls -l(ll)返回结果中的文件访问权限-rw-r--rw-
linux文件访问权限(像rw-r--rw-是什么意思) Linux的文件访问权限分为 读.写.执行三种 r:可读(4) w:可写(2)对目录来说则可新建文件 x:可执行(1)对目录来说则可进入该 ...
- Mongoose多数据库连接及实用样例
使用环境: MongoDB 3.6 插件版本: "mongodb": "^3.1.10","mongoose": "^5.4.2& ...
- ext2文件系统学习(一)
源码分析网上太多了,不写了,记录简单的实践步骤: 1. 创建ext2文件镜像并映射 cd /tmp count= mkfs.ext2 ext2-1M.img mkdir ext2 sudo mount ...
- webbench进行压力测试
参考原文:http://www.vpser.net/opt/webserver-test.html webbench是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力 ...
- yum install --downloadonly 下载依赖包到本地 但不安装
如果手动去一个个找依赖是很困难的,即便已经知道名字.版本,下面就依赖系统自带的命令完成该步骤 以java为例,其他安装包只要替换包名 yum install --downloadonly --down ...
- Eclipse 4.5.0 离线安装 Veloeclipse 插件
下载 Veloeclipse 在 Eclipse eclipse-jee-mars-R-win32-x86_64 版本 4.5.0,Build id 为 20150621-1200,离线安装 Velo ...
- 熬之滴水成石:最想深入了解的内容--windows内核机制(6)
58 进程和线程(3) 说完进程再说说线程,线程相比于进程其实有更多可说的内容.首先实现线程调用的数据结构是个栈,该栈记录了调用方法的信息这里面也包括了函数调用及返回的地址.线程肯定是属于某个进程,其 ...
- JFinal提示:java.lang.RuntimeException: dao 只允许调用查询方法
public class UserModel extends Model<UserModel>{ public static final UserModel userDao = new U ...
- 结巴分词和自然语言处理HanLP处理手记
手记实用系列文章: 1 结巴分词和自然语言处理HanLP处理手记 2 Python中文语料批量预处理手记 3 自然语言处理手记 4 Python中调用自然语言处理工具HanLP手记 5 Python中 ...