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 [ "0" == "${TEST_SYNTAX}" ];then
    echo -e "Through code detection, allowed to push!"
    exit 0
fi

echo -e "\n\nServer detected the code has a problem, please check to submit the push again!"
echo -e "\n===============================================================================\n\n"
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://[email protected]//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

时间: 2024-11-04 05:34:52

Mercurial (hg) Hook : PHP Syntax Check , hg 代码检测 钩子的相关文章

解决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 syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order (order_name, customer) 原因是order是mysql关键字,不能做

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 manual that corresponds to your MySQL server version for the right syntax to use near ??? 当然,错误提示已经很明白的说明是sql的语法错误. 然而,我的sql 语句是 select count(*) from tab

MySQLSyntaxErrorException: 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 ...

下面是我update数据库时打印出来的异常: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use nea

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version

1.错误描述 org.hibernate.exception.SQLGrammarException: error executing work at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:80) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(

[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','贺磊'10023','1'),('31042','魏小彬'10023','1'); [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server versio

插入mysql语句报错: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

插入一个很简单的sql语句时候,mysql一直报错: [SQL] INSERT INTO ORDER ( id, activity_id, order_type, phone, order_amount, order_state, pay_type)VALUES ( '4', '2121313', '1', '13552444989', '1', '1', '1' ) [Err] 1064 - You have an error in your SQL syntax; check the man

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数据库时候出错,导出数据: [[email protected] ~]# mysqldump -uroot -p mysql >/root/bck.sql Enter password: mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in your SQL syntax; check the manual that corresponds to your M

mysql脚本1064 - You have an error in your SQL syntax; check the manual

SQL数据脚本导入时总是出错(确认脚本语法没错误)" 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DROP TABLE IF EXISTS `pw_members`; CREATE TABLE `pw_members` (   `uid` int(10' 

MySQLSyntaxErrorException: 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 ':ge

数据库表里命名有这个字段,可怎么就是报错呢,大神的解释: 加上之后立马好用!!! MySQLSyntaxErrorException: 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 ':ge