怎么在gitlab服务器端加pre-receive钩子执行phpcs的检查

Dleno 2019-03-25 05:44:16
怎么在gitlab服务器端加pre-receive钩子执行phpcs的检查,哪位大佬知道。
phpcs检查后面要跟文件路径,而git服务器端实际上市没有那个文件路径的
...全文
765 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dleno 2019-03-26
  • 打赏
  • 举报
回复 1
已解决,分享出来

#!/usr/bin/env bash

# 创建临时目录
TMP_DIR=$(mktemp -d)

# 警告数
warnings_count=0
# 错误数
errors_count=0

# 空hash
EMPTY_REF='0000000000000000000000000000000000000000'

# Colors
PURPLE='\033[35m'
RED='\033[31m'
RED_BOLD='\033[1;31m'
YELLOW='\033[33m'
YELLOW_BOLD='\033[1;33m'
GREEN='\033[32m'
GREEN_BOLD='\033[1;32m'
BLUE='\033[34m'
BLUE_BOLD='\033[1;34m'
COLOR_END='\033[0m'

while read oldrev newrev ref
do
# 当push新分支的时候oldrev会不存在,删除时newrev就不存在
if [[ $oldrev != $EMPTY_REF && $newrev != $EMPTY_REF ]]; then
echo -e "\n${PURPLE}CodeSniffer check result:${COLOR_END}"
# 被检查了的文件数
checked_file_count=0
# 找出哪些文件被更新了
for line in $(git diff-tree -r $oldrev..$newrev | grep -oP '.*\.(php)' | awk '{print $5$6}')
do
# 文件状态
# D: deleted
# A: added
# M: modified
status=$(echo $line | grep -o '^.')

# 不检查被删除的文件
if [[ $status == 'D' ]]; then
continue
fi

# 文件名
file=$(echo $line | sed 's/^.//')

# 为文件创建目录
mkdir -p $(dirname $TMP_DIR/$file)
# 保存文件内容
git show $newrev:$file > $TMP_DIR/$file


output=$(phpcs --standard=PSR2 --colors --encoding=utf-8 -n -p $TMP_DIR/$file)

warning=$(echo $output | grep -oP '([0-9]+) WARNING' | grep -oP '[0-9]+')
error=$(echo $output | grep -oP '([0-9]+) ERROR' | grep -oP '[0-9]+')

if [[ $warning || $error ]]; then

msg="${file}: "

if [[ $warning > 0 ]]; then
msg="$msg${YELLOW_BOLD}${warning}${COLOR_END} ${YELLOW}warnings${COLOR_END} "

let "warnings_count = warnings_count + 1"
fi
if [[ $error > 0 ]]; then
msg="$msg${RED_BOLD}${error}${COLOR_END} ${RED}errors${COLOR_END}"

let "errors_count = errors_count + 1"
fi

echo -e " $msg"
fi

let "checked_file_count = checked_file_count + 1";

done

if [[ $checked_file_count == 0 ]]; then
echo -e " ${BLUE_BOLD}No file was checked.${COLOR_END}"
elif [[ $warnings_count == 0 && $errors_count == 0 ]]; then
echo -e "${GREEN_BOLD}$(cowsay 'Congratulations!!!')${COLOR_END}"
elif [[ $errors_count == 0 ]]; then
echo -e " ${BLUE}Good job, no errors were found!!!${COLOR_END}"
fi

fi
done

# 删除临时目录
rm -rf $TMP_DIR

if [[ $warnings_count > 0 || $errors_count > 0 ]]; then
echo -e "${RED}$(cowsay -f dragon 'PHPCS Check Error!!!')${COLOR_END}"
exit 1
fi

exit 0
内容概要:本文提出了一种基于蒙特卡洛模拟与拉格朗日松弛法的分散式优化策略,用于解决电动汽车充电站在分时电价机制下的有序充电调度问题。通过蒙特卡洛方法模拟电动汽车充电行为的随机性,生成多样化负荷场景,构建以降低电网负荷波动和用户充电成本为目标的优化模型;采用拉格朗日松弛法对耦合约束进行解耦,实现分布式求解,在保障用户隐私的同时提升计算效率。文中设计了详细的仿真场景,系统分析了该调度策略对电网负荷特性和用户经济性的影响,验证了所提方法在实际应用中的有效性与可行性。; 适合人群:具备电力系统运行、优化算法理论及Matlab编程能力的研究生、科研人员以及从事智能电网与电动汽车相关领域的工程技术人员。; 使用场景及目标:①应用于城市规模化充电站集群的有序充电管理,实现电网“削峰填谷”;②为电力公司制定科学合理的分时电价政策提供量化分析工具;③支撑智能电网中需求侧资源的分布式协同优化调度研究与系统设计。; 阅读建议:建议结合提供的Matlab代码深入理解算法实现流程,重点掌握蒙特卡洛场景生成机制与拉格朗日松弛迭代求解过程,可通过调整参数设置复现不同工况下的仿真结果,以深化对分散式优化机制与调度效果之间关系的理解。
内容概要:本文研究了基于元胞神经网络配流与DQN强化学习的公交线网扰动韧性恢复方法,旨在应对公共交通系统中突发事件导致的网络扰动问题。通过结合元胞神经网络对交通流量进行精细化建模与分配,并利用深度Q网络(DQN)强化学习算法动态优化调度策略,实现公交线路在扰动后的快速恢复与运力再分配。研究构建了完整的仿真框架,在Matlab平台上实现了算法的编码与测试,验证了所提方法在提升公交系统韧性、减少乘客延误和优化资源利用方面的有效性。; 适合人群:具备一定交通工程、智能算法或强化学习基础,从事智慧交通、城市公交调度、韧性城市等方向研究的研究生、科研人员及工程技术开发者。; 使用场景及目标:①应用于城市公交系统在遭遇突发事件(如道路封闭、车辆故障、极端天气)时的应急调度与恢复决策;②为智能交通系统(ITS)提供基于AI的动态配流与优化控制方案;③推动强化学习在复杂交通网络管理中的落地实践; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注元胞神经网络的状态转移机制与DQN奖励函数的设计逻辑,并可通过调整扰动场景参数进行仿真实验,以掌握模型的适应性与优化潜力。

20,393

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧